pax_global_header00006660000000000000000000000064146301041210014502gustar00rootroot0000000000000052 comment=91a6aaaf9c3d1043259a441f3eff55941b38fffa fuzzy-logic-toolkit-0.6.0/000077500000000000000000000000001463010412100154525ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.0/CITATION000066400000000000000000000022641463010412100166130ustar00rootroot00000000000000To cite the fuzzy-logic-toolkit in publications, please use: L. Markowsky and B. Segee. "The Octave Fuzzy Logic Toolkit," Proceedings of the 2011 IEEE International Workshop on Open-Source Software for Scientific Computation (OSSC-2011), pp. 118-125, October 2011. L. Markowsky and B. Segee. "Unsupervised Clustering With the Octave Fuzzy Logic Toolkit," Proceedings of the 2013 IEEE 10th International Conference on Fuzzy Systems and Knowledge Discovery (FSKD-2013), pp. 207-212, July 2013. The BibTex entries for LaTex users: @inproceedings{octavefuzzy01, author = "L. Markowsky and B. Segee", title = {{The Octave Fuzzy Logic Toolkit}}, booktitle = "Proceedings of the 2011 IEEE International Workshop on Open-Source Software for Scientific Computation", month = "October", year = 2011, pages = {118--125} } @inproceedings{octavefuzzy02, author = "L. Markowsky and B. Segee", title = {{Unsupervised Clustering With the Octave Fuzzy Logic Toolkit}}, booktitle = "Proceedings of the 2013 IEEE 10th International Conference on Fuzzy Systems and Knowledge Discovery", month = "July", year = 2013, pages = {207--212} } fuzzy-logic-toolkit-0.6.0/COPYING000066400000000000000000001045131463010412100165110ustar00rootroot00000000000000 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 . fuzzy-logic-toolkit-0.6.0/ChangeLog000066400000000000000000000352541463010412100172350ustar00rootroot000000000000002024-06-05 L. Markowsky * Version 0.6.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/*.m and inst/private/*.m: Added many built-in self tests, simplified error messages, and made minor improvements to comments. * inst/private/square_distance_matrix.m and inst/private/update_cluster_membership.m: Reimplemented the two private functions. Tested for identical results with previous implementation using an embedded test in each file. * docs/*.html: New directory containing html documentation for each top-level function. 2024-05-16 L. Markowsky * Version 0.5.1 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. 2024-05-12 L. Markowsky * Version 0.5.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/algebraic_sum.m, inst/bounded_difference.m, and inst/bounded_sum.m: Replaced deprecated '.+' and '.-' operators with '+' and '-', respectively. * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. 2021-02-16 L. Markowsky * Version 0.4.6 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/defuzz.m: Bug #53549 was fixed (parse error in function defuzz.m -- anonymous function body requires only a single expression). * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. 2014-07-01 L. Markowsky * Version 0.4.5 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/setfis.m: Bug #38018 was fixed (typo in function setfis.m -- wrong function name). 2014-06-26 L. Markowsky * Version 0.4.4 released. * ChangeLog: Updated file. * CITATION: New file. References to two published papers about the fuzzy-logic-toolkit. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/readfis.m: Modified to workaround change to strsplit beginning in Octave 3.8.0. * inst/evalmf.m: Removed continuation "..." within double quoted string by writing instruction on one line to maintain compatibility with future versions of Octave. * inst/writefis.m: Changed continuation within double quoted string from "..." to "\" to maintain compatibility with future versions of Octave. * inst/*.m: Updated copyright notices. * inst/*.fis: Updated copyright notices. * inst/private/*.m: Updated copyright notices. * Demos tested under: Fedora 20/Octave 3.8.1 * Demos tested under: Fedora 20/Octave 3.8.0 * Demos tested under: Fedora 20/Octave 3.6.4 2012-10-02 L. Markowsky * Version 0.4.2 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * NEWS: Updated file. * inst/*.m: Some trivial changes to line length and comments. * inst/fcm.m: Edited to reflect the five renamed private functions. Edited the demos to calculate and print the three cluster validity indices. Edited comment. * inst/gustafson_kessel.m: Edited to reflect the five renamed private functions. Edited the demos to calculate and print the three cluster validity indices. Edited comment. * inst/partition_coeff.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/partition_entropy.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/xie_beni_index.m: Demos were merged with the demos in fcm.m and gustafson_kessel.m and then removed. Edited comment. * inst/private/evalmf_private.m: Edited comment. * inst/private/is_builtin_language.m: Edited comment. * inst/private/fcm_compute_convergence_criterion.m: Edited and renamed compute_cluster_convergence.m. * inst/private/fcm_compute_objective_fcn.m: Edited and renamed compute_cluster_obj_fcn.m. * inst/private/fcm_init_prototype.m: Edited and renamed init_cluster_prototypes.m. * inst/private/fcm_update_cluster_centers.m: Edited and renamed update_cluster_prototypes.m. * inst/private/fcm_update_membership_fcn.m: Edited and renamed update_cluster_membership.m. * inst/private/probor.m: Removed unused private function. * Demos tested under: Fedora 17/Octave 3.6.2 * Demos tested under: Fedora 16/Octave 3.4.3 * Demos tested under: Windows 7/Octave 3.2.4 2012-08-26 L. Markowsky * Version 0.4.1 released. * ChangeLog: Updated file. * COPYING: Replaced GPLv2 with GPLv3 (to fix inconsistency with source files). * DESCRIPTION: Updated file. * INDEX: Updated file. * NEWS: Updated file. * inst/fcm.m: Rewrote and embedded the demos previously contained in fcm_demo_1.m and fcm_demo_2.m. * inst/fcm_demo_1.m: Removed script file. * inst/fcm_demo_2.m: Removed script file. * inst/gustafson_kessel.m: Rewrote and embedded the demos previously contained in gustafson_kessel_demo_1.m and gustafson_kessel_demo_2.m. * inst/gustafson_kessel_demo_1.m: Removed script file. * inst/gustafson_kessel_demo_2.m: Removed script file. * inst/*.m: Many trivial changes to line length and copyright notices. * inst/private/*.m: Many trivial changes to line length and copyright notice. * All demos tested under: Fedora 17/Octave 3.6.2 2012-07-10 L. Markowsky * Version 0.4.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * NEWS: New file. * inst/fcm.m: New file. Addition of the Fuzzy C-Means clustering algorithm to the toolkit. * inst/fcm_demo_1.m: New file. Addition of demo script. * inst/fcm_demo_2.m: New file. Addition of demo script. * inst/gustafson_kessel.m: New file. Addition of the Gustafson-Kessel clustering algorithm to the toolkit. * inst/gustafson_kessel_demo_1.m: New file. Addition of demo script. * inst/gustafson_kessel_demo_2.m: New file. Addition of demo script. * inst/partition_coeff.m: New file. Addition of a measure of cluster validity. * inst/partition_entropy.m: New file. Addition of a measure of cluster validity. * inst/xie_beni_index.m: New file. Addition of a measure of cluster validity. * inst/private/fcm_compute_convergence_criterion.m: New file. * inst/private/fcm_compute_objective_fcn.m: New file. * inst/private/fcm_init_prototype.m: New file. * inst/private/fcm_update_cluster_centers.m: New file. * inst/private/fcm_update_membership_fcn.m: New file. * inst/private/square_dist_matrix.m: New file. * New demos tested under: Fedora 16/Octave 3.4.3 2011-11-12 L. Markowsky * Version 0.3.0 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * inst/*.m: Many trivial changes to comments and spacing in parameter lists. * inst/addrule.m: Edited comment to describe use with hedges. * inst/algebraic_product.m: New file. * inst/algebraic_sum.m: New file. * inst/bounded_difference.m: New file. * inst/bounded_sum.m: New file. * inst/cubic_approx_demo.m: Added plot of output membership functions. * inst/cubic_approximator.fis: Corrected range for FIS output. * inst/drastic_product.m: New file. * inst/drastic_sum.m: New file. * inst/einstein_product.m: New file. * inst/einstein_sum.m: New file. * inst/evalmf.m: Edited to add custom and new built-in hedge support. * inst/hamacher_product.m: New file. * inst/hamacher_sum.m: New file. * inst/heart_disease_demo_1.m : Edited and renamed heart_demo_1.m. Edited script to demonstrate hedges and new T-norm/S-norm pairs. * inst/heart_disease_demo_2.m : Renamed heart_demo_2.m. * inst/investment_portfolio.fis: New file. * inst/investment_portfolio_demo.m: New file. * inst/plotmf.m: Edited to add support for linear output membership functions and to support optional y-limit arguments. * inst/readfis.m: Edited to add custom and built-in hedge support. * inst/showrule.m: Edited to add Chinese, Russian, and Spanish to the built-in languages and to add custom language support. Also edited to add custom hedge support and to implement the hedges "somewhat", "very", "extremely", and "very very". * inst/sugeno_tip_calculator.fis: Edited to demonstrate hedges. * inst/sugeno_tip_demo.m: Edited to demonstrate hedges. * inst/writefis.m: Edited comment to note that zenity is required by the GUI. Code edited to support hedges. * inst/private/*.m: Many trivial changes to spacing in parameter lists. * inst/private/aggregate_output_mamdani.m: Edited to support new built-in T-norm/S-norm pairs when used as the FIS aggregation method. * inst/private/eval_firing_strength.m: Edited to support new built-in T-norm/S-norm pairs when used as the FIS 'and' or 'or' method. * inst/private/evalmf_private.m: Edited to evaluate linear membership functions and to add custom and new built-in hedge support. * inst/private/eval_rules_mamdani.m: Edited to add custom and built-in hedge support. * inst/private/eval_rules_sugeno.m: Edited to add custom and built-in hedge support. * inst/private/fuzzify_input.m: Edited to add custom and built-in hedge support. * inst/private/get_mf_index_and_hedge.m: New file to add hedge support. * inst/private/is_real.m: Improved test. * inst/private/is_real_matrix.m: Improved test. * inst/private/is_builtin_language.m: Renamed is_language.m. Edited test to add 'chinese', 'mandarin', 'pinyin', 'russian', 'pycckii', 'russkij', 'spanish', 'french', and 'german' to the strings specifying built-in languages. * Demos tested under: Fedora 15/Octave 3.4.2 * Demos tested under: Windows 7/Octave 3.2.4 2011-09-01 L. Markowsky * Version 0.2.4 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * inst/*.m: Numerous trivial changes. * inst/addmf_demo.m: Merged into addmf.m as an embedded demo and then removed. * inst/addvar_demo.m: Merged into addvar.m as an embedded demo and then removed. * inst/showrule_demo.m: Merged into showrule.m as four embedded demos and then removed. * inst/gensurf.m: Edited to permit scalar grids argument. * inst/getfis.m: Edited to implement "version" field in the FIS. * inst/newfis.m: Edited to implement "version" field in the FIS. * inst/readfis.m: Edited to implement "version" field in the FIS and to handle comments, whitespace, and variable number of membership function parameters. * inst/setfis.m: Edited to implement "version" field in the FIS. Fixed several bugs. * inst/writefis.m: Edited to implement "version" field in the FIS. * inst/cubic_approximator.fis: Renamed cubic-approximator.fis. * inst/heart_disease_risk.fis: Renamed heart-disease-risk.fis. Added comments and whitespace. * inst/linear_tip_calculator.fis: Renamed linear-tip-calculator.fis. * inst/mamdani_tip_calculator.fis: Renamed mamdani-tip-calculator.fis and edited to have multiple outputs. * inst/mamdani_tip_demo.m: Edited to demonstrate multiple outputs. * inst/sugeno_tip_calculator.fis: Renamed sugeno-tip-calculator.fis and edited to have multiple outputs. * inst/sugeno_tip_demo.m: Edited to demonstrate multiple outputs. * inst/private/defuzzify_output_mamdani.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/defuzzify_output_sugeno.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/eval_firing_strength.m: Bug fix. * inst/private/eval_rules_mamdani.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/eval_rules_sugeno.m: Bug fix (to handle an FIS with multiple outputs). * inst/private/is_grid_spec.m: Edited test to make more efficient. * inst/private/is_real.m: New file. * Demos tested under: Fedora 15/Octave 3.4.2 * Demos tested under: Fedora 15/Octave 3.2.4 * Demos tested under: Windows 7/Octave 3.2.4 2011-07-19 L. Markowsky * Version 0.2.3 released. * ChangeLog: Updated file. * DESCRIPTION: Updated file. * INDEX: Updated file. * inst/*.m: Edited numerous comments and texinfo comment blocks. * inst/private/*.m: Edited numerous comments and texinfo comment blocks. * inst/cubic_approx_demo.m: New file. * inst/cubic-approximator.fis: New file. * inst/linear-tip-calculator.fis: New file. * inst/linear_tip_demo.m: New file. * inst/heart_demo_1.m: Renamed commandline_demo.m. * inst/heart_demo_2.m: Renamed heart_demo.m. * inst/mamdani_tip_demo.m: Renamed mamdani_demo.m. * inst/sugeno_tip_demo.m: Renamed tipping_demo.m. * inst/gensurf.m: Edited to handle 2-dimensional plots. * inst/private/eval_rules_sugeno.m: Edited to handle linear output membership functions. * Demos tested under: Fedora 15/Octave 3.4.0 * Demos tested under: Fedora 15/Octave 3.2.4 2011-06-21 L. Markowsky * Version 0.2.2 released. * ChangeLog: New file. * DESCRIPTION: Updated file. * inst/addmf.m: Modified to workaround a bug in Octave 3.4.0. * inst/addrule.m: Modified to workaround a bug in Octave 3.4.0. * inst/addvar.m: Modified to workaround a bug in Octave 3.4.0. * inst/gaussmf.m: Modified demo and texinfo comment string. * inst/getfis.m: Modified to workaround a bug in Octave 3.4.0. * inst/readfis.m: Modified to workaround a bug in Octave 3.4.0. * inst/private/aggregate_output_mamdani.m: Modified to workaround a bug in Octave 3.4.0. * inst/private/evalmf_private.m: Modified to workaround a bug in Octave 3.4.0. * Demos tested under: Fedora 15/Octave 3.4.0 * Demos tested under: Fedora 15/Octave 3.2.4 2011-06-08 L. Markowsky * Version 0.2.1 released. * Initial release on Octave-Forge. * Merged membership function demos into related function files. * Created documentation for Octave-Forge website. * DESCRIPTION: Updated file. * Demos tested under: Fedora 13/Octave 3.2.4 2011-05-25 L. Markowsky * Version 0.2 released. * Moved tests/demos/* and tests/fis/* to inst/*. * Changed indentation and spacing to conform to Octave style. * Converted comments to texinfo. * DESCRIPTION: Update file. * Demos tested under: Fedora 13/Octave 3.2.4 2011-04-19 L. Markowsky * Version 0.1 released. * Initial release on SourceForge. * Demos tested under: Fedora 13/Octave 3.2.4 fuzzy-logic-toolkit-0.6.0/DESCRIPTION000066400000000000000000000006021463010412100171560ustar00rootroot00000000000000Name: fuzzy-logic-toolkit Version: 0.6.0 Date: 2024-06-05 Author: L. Markowsky Maintainer: L. Markowsky Title: Octave Fuzzy Logic Toolkit Description: A mostly MATLAB-compatible fuzzy logic toolkit for Octave. Depends: octave (>= 3.2.4) Autoload: no License: GPLv3+ Url: https://github.com/lmarkowsky/fuzzy-logic-toolkit/releases/tag/0.6.0 fuzzy-logic-toolkit-0.6.0/INDEX000066400000000000000000000017111463010412100162440ustar00rootroot00000000000000fuzzy-logic-toolkit >> Octave Fuzzy Logic Toolkit Evaluation defuzz evalfis evalmf Plotting gensurf plotmf File Input/Output of Fuzzy Inference Systems readfis writefis Command-Line Creation and Modification of Fuzzy Inference Systems addmf addrule addvar newfis rmmf rmvar setfis Text Representation of Fuzzy Inference Systems getfis showfis showrule Membership Functions dsigmf gauss2mf gaussmf gbellmf pimf psigmf sigmf smf trapmf trimf zmf T-Norms and S-Norms (in addition to max/min) algebraic_product algebraic_sum bounded_difference bounded_sum drastic_product drastic_sum einstein_product einstein_sum hamacher_product hamacher_sum Complete Fuzzy Inference System Demos cubic_approx_demo heart_disease_demo_1 heart_disease_demo_2 investment_portfolio_demo linear_tip_demo mamdani_tip_demo sugeno_tip_demo Fuzzy Clustering Functions fcm gustafson_kessel partition_coeff partition_entropy xie_beni_index fuzzy-logic-toolkit-0.6.0/Makefile000066400000000000000000000227451463010412100171240ustar00rootroot00000000000000## Copyright 2015-2016 Carnë Draug ## Copyright 2015-2016 Oliver Heimlich ## Copyright 2017 Julien Bect ## Copyright 2017 Olaf Till ## Copyright 2019 John Donoghue ## ## Copying and distribution of this file, with or without modification, ## are permitted in any medium without royalty provided the copyright ## notice and this notice are preserved. This file is offered as-is, ## without any warranty. TOPDIR := $(shell pwd) ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut TR ?= tr TEXI2PDF ?= texi2pdf -q ## Note the use of ':=' (immediate set) and not just '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" " | \ $(TR) '[:upper:]' '[:lower:]') version := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ") ## These are the paths that will be created for the releases. target_dir := target release_dir := $(target_dir)/$(package)-$(version) release_tarball := $(target_dir)/$(package)-$(version).tar.gz html_dir := $(target_dir)/$(package)-html html_tarball := $(target_dir)/$(package)-html.tar.gz ## Using $(realpath ...) avoids problems with symlinks due to bug ## #50994 in Octaves scripts/pkg/private/install.m. But at least the ## release directory above is needed in the relative form, for 'git ## archive --format=tar --prefix=$(release_dir). real_target_dir := $(realpath .)/$(target_dir) installation_dir := $(real_target_dir)/.installation package_list := $(installation_dir)/.octave_packages install_stamp := $(installation_dir)/.install_stamp ## These can be set by environment variables which allow to easily ## test with different Octave versions. ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc MKOCTFILE ?= mkoctfile ## Command used to set permissions before creating tarballs FIX_PERMISSIONS ?= chmod -R a+rX,u+w,go-w,ug-s HG := hg HG_CMD = $(HG) --config alias.$(1)=$(1) --config defaults.$(1)= $(1) HG_ID := $(shell $(call HG_CMD,identify) --id | sed -e 's/+//' ) HG_TIMESTAMP := $(firstword $(shell $(call HG_CMD,log) --rev $(HG_ID) --template '{date|hgdate}')) ## Detect which VCS is used vcs := $(if $(wildcard .hg),hg,$(if $(wildcard .git),git,unknown)) ifeq ($(vcs),hg) release_dir_dep := .hg/dirstate endif ifeq ($(vcs),git) release_dir_dep := .git/index endif TAR_REPRODUCIBLE_OPTIONS := --sort=name --mtime="@$(HG_TIMESTAMP)" --owner=0 --group=0 --numeric-owner TAR_OPTIONS := --format=ustar $(TAR_REPRODUCIBLE_OPTIONS) ## .PHONY indicates targets that are not filenames ## (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html) .PHONY: help ## make will display the command before runnning them. Use @command ## to not display it (makes specially sense for echo). help: @echo "Targets:" @echo " dist - Create $(release_tarball) for release." @echo " html - Create $(html_tarball) for release." @echo " release - Create both of the above and show md5sums." @echo " install - Install the package in $(installation_dir), where it is not visible in a normal Octave session." @echo " check - Execute package tests." @echo " doctest - Test the help texts with the doctest package." @echo " run - Run Octave with the package installed in $(installation_dir) in the path." @echo " clean - Remove everything made with this Makefile." ## ## Recipes for release tarballs (package + html) ## .PHONY: release dist html clean-tarballs clean-unpacked-release ## To make a release, build the distribution and html tarballs. release: dist html md5sum $(release_tarball) $(html_tarball) @echo "Upload @ https://sourceforge.net/p/octave/package-releases/new/" @echo " and note the changeset the release corresponds to" ## dist and html targets are only PHONY/alias targets to the release ## and html tarballs. dist: $(release_tarball) html: $(html_tarball) ## An implicit rule with a recipe to build the tarballs correctly. %.tar.gz: % $(TAR) -cf - $(TAR_OPTIONS) -C "$(target_dir)/" "$(notdir $<)" | gzip -9n > "$@" clean-tarballs: @echo "## Cleaning release tarballs (package + html)..." -$(RM) $(release_tarball) $(html_tarball) @echo ## Create the unpacked package. ## ## Notes: ## * having ".hg/dirstate" (or ".git/index") as a prerequesite means it is ## only rebuilt if we are at a different commit. ## * the variable RM usually defaults to "rm -f" ## * having this recipe separate from the one that makes the tarball ## makes it easy to have packages in alternative formats (such as zip) ## * note that if a commands needs to be run in a specific directory, ## the command to "cd" needs to be on the same line. Each line restores ## the original working directory. $(release_dir): $(release_dir_dep) -$(RM) -r "$@" ifeq (${vcs},hg) hg archive --exclude ".hg*" --type files "$@" endif ifeq (${vcs},git) git archive --format=tar --prefix="$@/" HEAD | $(TAR) -x $(RM) "$@/.gitignore" endif ## Don't fall back to run the supposed necessary contents of ## 'bootstrap' here. Users are better off if they provide ## 'bootstrap'. Administrators, checking build reproducibility, can ## put in the missing 'bootstrap' file if they feel they know its ## necessary contents. ifneq (,$(wildcard src/bootstrap)) cd "$@/src" && ./bootstrap && $(RM) -r "autom4te.cache" endif ## Uncomment this if your src/Makefile.in has these targets for ## pre-building something for the release (e.g. documentation). # cd "$@/src" && ./configure && $(MAKE) prebuild && \ # $(MAKE) clean && $(RM) Makefile ## # $(MAKE) -C "$@" docs # cd "$@" && $(MAKE) tests # remove dev stuff # cd "$@" && $(RM) -rf "devel" ${FIX_PERMISSIONS} "$@" run_in_place = $(OCTAVE) --eval ' pkg ("local_list", "$(package_list)"); ' \ --eval ' pkg ("load", "$(package)"); ' # html_options = --eval 'options = get_html_options ("octave-forge");' ## Uncomment this for package documentation. html_options = --eval 'options = get_html_options ("octave-forge");' \ --eval 'options.package_doc = "$(package).texi";' $(html_dir): $(install_stamp) $(RM) -r "$@"; $(run_in_place) \ --eval ' pkg load generate_html; ' \ $(html_options) \ --eval ' generate_package_html ("$(package)", "$@", options); '; $(FIX_PERMISSIONS) "$@"; clean-unpacked-release: @echo "## Cleaning unpacked release tarballs (package + html)..." -$(RM) -r $(release_dir) $(html_dir) @echo ## ## Recipes for installing the package. ## .PHONY: install clean-install octave_install_commands = \ ' llist_path = pkg ("local_list"); \ mkdir ("$(installation_dir)"); \ load (llist_path); \ local_packages(cellfun (@ (x) strcmp ("$(package)", x.name), local_packages)) = []; \ save ("$(package_list)", "local_packages"); \ pkg ("local_list", "$(package_list)"); \ pkg ("prefix", "$(installation_dir)", "$(installation_dir)"); \ pkg ("install", "-local", "-verbose", "$(release_tarball)"); ' ## Install unconditionally. Maybe useful for testing installation with ## different versions of Octave. install: $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) ## Install only if installation (under target/...) is not current. $(install_stamp): $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) clean-install: @echo "## Cleaning installation under $(installation_dir) ..." -$(RM) -r $(installation_dir) @echo ## ## Recipes for testing purposes ## .PHONY: run doctest check ## Start an Octave session with the package directories on the path for ## interactice test of development sources. run: $(install_stamp) $(run_in_place) --persist ## Test example blocks in the documentation. Needs doctest package ## https://octave.sourceforge.io/doctest/index.html doctest: $(install_stamp) $(run_in_place) --eval 'pkg load doctest;' \ --eval "targets = '$(shell (ls inst; ls src | $(GREP) .oct) | $(CUT) -f2 -d@ | $(CUT) -f1 -d.)';" \ --eval "targets = strsplit (targets, ' '); doctest (targets);" ## Test package. octave_test_commands = \ ' pkgs = pkg("list", "$(package)"); \ dirs = {pkgs{1}.dir}; \ __run_test_suite__ (dirs, {}); ' ## the following works, too, but provides no overall summary output as ## __run_test_suite__ does: ## ## else cellfun (@runtests, horzcat (cellfun (@ (dir) ostrsplit (([~, dirs] = system (sprintf ("find %s -type d", dir))), "\n\r", true), dirs, "UniformOutput", false){:})); endif ' check: $(install_stamp) $(run_in_place) --eval $(octave_test_commands) ## ## CLEAN ## .PHONY: clean clean: clean-tarballs clean-unpacked-release clean-install test -e inst/test && rmdir inst/test || true test -e $(target_dir)/fntests.log && rm -f $(target_dir)/fntests.log || true @echo "## Removing target directory (if empty)..." test -e $(target_dir) && rmdir $(target_dir) || true @echo @echo "## Cleaning done" @echo .PHONY: tests CC_TST_SOURCES := $(shell $(GREP) --files-with-matches '^%!' src/*.cc) TST_SOURCES := $(patsubst src/%.cc,inst/test/%.cc-tst,$(CC_TST_SOURCES)) inst/test: @mkdir -p "$@" $(TST_SOURCES): inst/test/%.cc-tst: src/%.cc | inst/test @echo "Extracting tests from $< ..." @$(RM) -f "$@" "$@-t" @( echo "## Generated from $<"; \ $(GREP) '^%!' "$<") > "$@" tests: $(TST_SOURCES) fuzzy-logic-toolkit-0.6.0/NEWS000066400000000000000000000071571463010412100161630ustar00rootroot00000000000000Summary of important user-visible changes for fuzzy-logic-toolkit 0.6.0: ------------------------------------------------------------------------ ** Added many built-in self tests, simplified error messages, and made minor improvements to comments. ** Reimplemented two private functions: square_distance_matrix.m and update_cluster_membership.m. Tested for identical results with previous implementation using an embedded test in each file. ** Added new docs directory containing html documentation for each top-level function. Summary of important user-visible changes for fuzzy-logic-toolkit 0.5.1: ------------------------------------------------------------------------ ** Updated several top-level text files (ChangeLog, DESCRIPTION, and NEWS). No change to any code. Summary of important user-visible changes for fuzzy-logic-toolkit 0.5.0: ------------------------------------------------------------------------ ** Replaced several occurrences of the deprecated '.+' and '.-' operators with '+' and '-', respectively. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.6: ------------------------------------------------------------------------ ** Bug #53549 was fixed (parse error in function defuzz.m -- anonymous function body requires only a single expression). Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.5: ------------------------------------------------------------------------ ** Bug #38018 was fixed (typo in function setfis.m -- wrong function name). Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.4: ------------------------------------------------------------------------ ** The function readfis was modified to workaround the change to strsplit beginning in Octave 3.8.0. Without the modification, readfis will not work with Octave versions >= 3.8.0. The new version of readfis works with all versions of Octave >= 3.2.4 by first checking for the version number of Octave and then selecting either ostrsplit (for Octave >= 3.8.0) or strsplit (for Octave < 3.8.0). ** The files writefis.m and evalmf.m were edited to maintain compatibility with future versions of Octave. Two occurrences of the continuation "..." within double quoted strings in writefis.m were changed to "\". One occurrence of "..." in evalmf.m was removed by writing the instruction on a single line. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.2: ------------------------------------------------------------------------ ** The demos embedded in partition_coeff.m, partition_entropy.m, and xie_beni_index.m were merged with the embedded demos in fcm.m and gustafson_kessel.m. Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.1: ------------------------------------------------------------------------ ** The package is no longer automatically loaded. ** The following demo scripts were rewritten and embedded in fcm.m, gustafson_kessel.m, partition_coeff.m, partition_entropy.m, and xie_beni_index.m: fcm_demo_1 fcm_demo_2 gustafson_kessel_demo_1 gustafson_kessel_demo_2 (The separate demo script files have been removed.) Summary of important user-visible changes for fuzzy-logic-toolkit 0.4.0: ------------------------------------------------------------------------ ** The following functions are new: fcm gustafson_kessel partition_coeff partition_entropy xie_beni_index ** The following demo scripts are new: fcm_demo_1 fcm_demo_2 gustafson_kessel_demo_1 gustafson_kessel_demo_2 fuzzy-logic-toolkit-0.6.0/docs/000077500000000000000000000000001463010412100164025ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.0/docs/addmf.html000066400000000000000000000165361463010412100203560ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addmf

Function Reference: addmf

Function File: fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, mf_params)

Add a membership function to an existing FIS structure and return the updated FIS.

The types of the arguments are expected to be:

  • fis: an FIS structure
  • in_or_out: ’input’ or ’output’ (case-insensitive)
  • var_index: valid index of an FIS input/output variable
  • mf_name: a string
  • mf_type: a string
  • mf_params: a vector

If mf_type is one of the built-in membership functions, then the number and values of the parameters must satisfy the membership function requirements for the specified mf_type.

Note that addmf will allow the user to add membership functions or membership function names for a given input or output variable that duplicate mfs or mf names already entered.

Also, constant and linear membership functions are not restricted to FIS structure outputs or to Sugeno-type FIS structures, and the result of using them for FIS inputs or Mamdani-type FIS outputs has not yet been tested.

To run the demonstration code, type "demo addmf" (without the quotation marks) at the Octave prompt. This demo creates two FIS input variables and associated membership functions and then produces two figures showing the term sets for the two FIS inputs.

See also: rmmf, setfis

Example: 1

 

 ## Create new FIS.
 a = newfis ('Heart-Disease-Risk', 'sugeno', ...
             'min', 'max', 'min', 'max', 'wtaver');
 
 ## Add two inputs and their membership functions.
 a = addvar (a, 'input', 'LDL-Level', [0 300]);
 a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]);
 a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ...
            [90 110 120 140]);
 a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ...
            [120 140 150 170]);
 a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ...
            [150 170 180 200]);
 a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]);
 
 a = addvar (a, 'input', 'HDL-Level', [0 100]);
 a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]);
 a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]);
 a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]);
 
 ## Plot the input membership functions.
 plotmf (a, 'input', 1);
 plotmf (a, 'input', 2);

hold is now off for current axes
hold is now off for current axes
                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.0/docs/addrule.html000066400000000000000000000132361463010412100207150ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addrule

Function Reference: addrule

Function File: fis = addrule (fis, rule_matrix)

Add a list of rules to an existing FIS structure and return the updated FIS.

Each row of the rule_matrix represents one rule and has the form:

 
 [in1_mf ... inM_mf out1_mf ... outN_mf weight connect]
 

where:

  • in<i>_mf == membership function index for input i
  • out<j>_mf == membership function index for output j
  • weight == relative weight of the rule (0 <= weight <= 1)
  • connect == antecedent connective (1 == and; 2 == or)

To express:

  • "not" – prepend a minus sign to the membership function index
  • "somewhat" – append ".05" to the membership function index
  • "very" – append ".20" to the membership function index
  • "extremely" – append ".30" to the membership function index
  • "very very" – append ".40" to the membership function index
  • custom hedge – append .xy, where x.y is the degree to which the membership value should be raised, to the membership function index

To omit an input or output, use 0 for the membership function index. The consequent connective is always "and".

For example, to express:

 
 "If (input_1 is mf_2) or (input_3 is not mf_1) or (input_4 is very mf_1),
  then (output_1 is mf_2) and (output_2 is mf_1^0.3)."
 

with weight 1, the corresponding row of rule_matrix would be:

 
 [2   0   -1   4.2   2   1.03   1   2]
 

For a complete example that uses addrule, see heart_disease_demo_1.m.

See also: heart_disease_demo_1, showrule

fuzzy-logic-toolkit-0.6.0/docs/addvar.html000066400000000000000000000126011463010412100205310ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: addvar

Function Reference: addvar

Function File: fis = addvar (fis, in_or_out, var_name, var_range)

Add an input or output variable to an existing FIS structure and return the updated FIS.

The types of the arguments are expected to be:

  • fis - an FIS structure
  • in_or_out - either ’input’ or ’output’ (case-insensitive)
  • var_name - a string
  • var_range - a vector [x1 x2] of two real numbers

The vector components x1 and x2, which must also satisfy x1 <= x2, specify the lower and upper bounds of the variable’s domain.

To run the demonstration code, type "demo addvar" (without the quotation marks) at the Octave prompt.

Example: 1

 

 a = newfis ('Heart-Disease-Risk', 'sugeno', ...
             'min', 'max', 'min', 'max', 'wtaver');
 a = addvar (a, 'input', 'LDL-Level', [0 300]);
 getfis (a, 'input', 1);

Name = LDL-Level
NumMFs = 0
MFLabels = 
Range = [0 300]
                    
fuzzy-logic-toolkit-0.6.0/docs/algebraic_product.html000066400000000000000000000112211463010412100227360ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: algebraic_product

Function Reference: algebraic_product

Function File: retval = algebraic_product (x)
Function File: retval = algebraic_product (x, y)

Return the algebraic product of the input. The algebraic product of two real scalars x and y is: x * y

For one vector argument, apply the algebraic product to all of elements of the vector. (The algebraic product is associative.) For one two-dimensional matrix argument, return a vector of the algebraic product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise product.

See also: algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/algebraic_sum.html000066400000000000000000000111731463010412100220700ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: algebraic_sum

Function Reference: algebraic_sum

Function File: retval = algebraic_sum (x, y)
Function File: retval = algebraic_sum (x, y)

Return the algebraic sum of the input. The algebraic sum of two real scalars x and y is: x + y - x * y

For one vector argument, apply the algebraic sum to all of elements of the vector. (The algebraic sum is associative.) For one two-dimensional matrix argument, return a vector of the algebraic sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise algebraic sum.

See also: algebraic_product, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/assets/000077500000000000000000000000001463010412100177045ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.0/docs/assets/addmf_101.png000066400000000000000000001011751463010412100220530ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯw\×Úđg) ‚4Q+FÀ®¨Ø°!56ŒIˆÄ’¹±\£7c"Æc y“ØrmAM®¢¨QÁ† ¨XC¢‚"(°́ûÇà̀ÀR†ewḮîïû¹ŸÜgggÎ<3ñqfÎ…J¥"€˜±N  G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ Ö !OOOÖ)€n%&&²N:a?Lræéé‰N‘t<¡_d"C&{‘·ª@ G…#H‚Â$Aá&áđáìS€’Đ)̣„~‘!t È G…#H‚Â$Aá’ pIP8€$(@ ‰ë´ÆÓÓ“u `Y§`P8€QA•…oH‡[Ơ G…#H‚Â$Aá’ pIP8€$(@ G…#3‹/V(gΜ‘Ơ®û÷ï¯P(”J¥xM™™YóæÍß{ï½èèh™ è ̃U ;vlƒ ˆèåË—W®\ Û½{÷Úµk§L™Â:5ĐP±iÓ¦ùøøđõ¼9|øđ?₫ØÇǧuëÖ¬³=Á­j¨´æÍ›oß¾]¥R-Y²„u. ?(À(,ÿ÷öÛUÉ=&&fđàÁuëÖuuu:d…#€|ư₫ûï>>>W®\yûí·Ç{ơêUŸßÿˆ TPPpêÔ)nM.¸zơjzz:·ääÉ“uëÖmß¾½î̉kß¾}AAAJJ ëóz‚Â@¦̣̣̣‚ƒƒ4hpñâÅƠ«W¯Zµ*>>¾~ưúŸ~úi^^¿¿??~œ[9**ªM›6*•***ˆ233/^¼8xđ`…BQÎ.zôè¡PśØ1‰6l؈’““YŸ*Đ à́̀rïvvmŸœœ¼fÍç×ù;;;Ï5+88ø̣åË̃̃̃mÛ¶å ÇŒŒŒ«W¯₫ôÓOÓ§OŒŒ1bÄ©S§ \₫.ø±̉b»wï~đà” Ë¯JÁø pđä ë 4‘””DDíÚµ/äbLJJ̣öö4hĐ·ß~›‘‘qúôi•Jåçç×£GÈÈH":ỵ¤……E¿~ưˆèÎ;Í5ă[ؼyóøñă¹¸ÄXiÎ¥K—$ÜMê¦M›²>U '(dJ¥R‘ÚU=sss"ÊÏÏ'"ÿÈÈȳgÏ6jÔ¨Q£F¾¾¾óçÏö́ÙÉ“'{ôèaooOD...Û·oç[èÖ­›¶2¼|ù²………ú5K0V(+p÷îƯAƒí̃½»Ä?øtÍƯƯˆ®\¹̉»wo~aBByzz‘ƯñăÇcbbzơêED}úô),,üßÿ₫wñâÅeË–q›ØÚÚ¾ûî»ZO/>>₫Ô©ScÆŒ±°@9a*08¦Û¶mc˜¨:4jÔhơêƠÜ’§OŸ®ZµªqăÆ^^^DdiiéççÏ:uªY³æ×_-åǪHJJ R( .d}@đO„̉eeeƯºuëÿûßÎ;YçFnăÆ/133[ºtiơêƠW¯^ưÖ[ouèĐà˜1*•j×®]©©©{ö́©^½:·æ AƒöíÛGD\áhnñ³gÏđđđ† ¶jƠJI¾zơêêƠ«gÏÍËËÛ°aC‰×Æ”u,¬Ï1h Ç̉ :ôŸ₫a˜„_ưµÄ ®Ø9rdTTÔ—_~¹eË"̣̣̣Ú³gOçÎù5 DDµk׿n^‘¯¯oxx¸Ö/7̣I* ww÷7ß|sÚ´iêK–s,`܃·PÂéÓ§_½zEDÛ·o?{öl¥qôws;¼f U¯N¯^Qơêộ%YYQ^U«V´D¼¥¥>­[»vùHÉ­Ô|¸…Z??em.̃E‰| É̀¬̀|Êúo©ùôëG:~h)99ÙÍÍM§» ¢ÄDº{·̀Ó#å¿åt—úqơŸA‰Ư%¥£̃xƒÜƯu}ÂôÑ/èÑEºø^U§êâÿPY¨H¥ R¡™åS¾%Y¾¤—Vd%^9̣ªQ5ơå3=g&&&êü4qñôô I ±"+îçûÙ#"î§QIJs2/ñă7Óf̣aSœ½WK×£G.8qâDe·=|ï Îú ˜º¬0<Rưú¬“Đ‚æÍYg =VV”›Ë: mX@ ₫₫OG{ëăƒ4‚FTnƒĂ¬3f…#”¦A"J¾{Ww{xøđ¡N 'GѺuîBÏ^¾$…‚î̃ƠíE]÷KS7Lø`ÀP8@™t}ËR§íï̃­ÓÜ™©^ƯÍƠU·»ĐĂ#` P8jß&M„„Tüô^9Ï–ơVYA•ú×TùÙé3îy.½åSüYĂÇÏƠ©UKWùp Ëïhơg+êY•Ï5ṭ$ë?FZ Ö¹é§GưGXbw©?’Z₫Cå<²Ë壾_ñ†W¯̉‚E»>x&Mb}r5uÎññd<˜sOŒq*–xÆ‘ ÄÏ8ª?Ѩ¾dÍa}”`v̉N+²â-ơGî+₫‡mî¹t Ê{5@(µ/©Z53†uP̀‹ädÂE‰^¾ Ç#GhÀÖ ièàA!~óMÖÙTÍ›oIáx„^ù‚¾p%í_;Eáy‹̃ªÔú “LtöJLÅñ₫;øéSÖèÆï¿³Î  VÑ*>ÖEƠº†Â³µấlÖÙ€QÉ%£`ÂP8@ÙîÜaøù±Î@,-Yg€ÂŒ̉•+B,¾÷n¸† aV5£f¬SM p5:°Î ªÄ#cŒ£pÅÙ³¬³ÑHe ‡CFÑ+¦…c¾úê«ÄÄDéï066Bl˜w«úIˆ=ŒâM"̃̃B¼iël4̣3ừÇơ¨ët@(@Í·ß ñŸ²ÎF·o³Î@ÛÚ¶â„ÖÙhä]àă¹4—u:r±xñb…BaaañäÉơoÏ=«P( ů¿₫ªYûqqq …b×®]¬´ô?sæŒúWưû÷W(J¥R¼&Ï̀̀¬yóæï½÷^tt´ÄA‹P8€.]„X|Óäạ́eÖhD<‰#” T*÷îƯ«¾<,,Œujeºpáˆ#®]»¦ŸƯ;ö³Ï>û́³Ï>ù䓺u놅…ơîƯû‡~`}L&€rxáX·.ë àµgôŒu ̣U§N={öL™2¥Ạ̈½{÷Ö©SçñăǬ,Å£Göïß?kÖ,ứnÚ´i>>>üÇ›7o>üă?öññiƯº5ë“aBpÅÊơún‘)(băĂqwgè̀È‘#O>̃̀̀¬}ûö‹-êܹ3ÿmTTÔ’%KâââêÖ­P¢î¼zơê₫óŸ .¼|ù²C‡³gÏö{=Ó©››ÛđáĂß}÷Ư?üˆ._¾LD«W¯₫å—_îܹS½zuww÷3f¼ûî»Dô₫ûïõ¼™ˆúôéÓ¤I“ääạ̈×…N:ùøǿƯ»·  ÀÂơŒàD@i†¥̉¸2â»ë̀:íùøc¡O¤w̃aPe$0¢gMĐúº¡Zº±c+(›4ỉ¹sçƯ»w‹ ǰ°°aÆYYY‰×üư÷ßG]·nƯ·ß~[¡PüöÛo>>>¿ưöÛ›o¾ID{÷î3fL­Zµ̃~ûm33³íÛ·ÿñÇü¶G6lX½zỡzë-33³}ûö 8pûöícÇåVHII8p ½½}ÿ₫ư‰hÑ¢E‹/îÛ·ïèÑ£_½zµoß¾   ;;»¡C‡₫ë_ÿrssûâ‹/–/_̃¥K)ëBûöíÏœ9“’’âææ¦÷^5U*Đ6Ö)@Iwï̃e‚¡ùùgQÑÿN̉Åt×) ¹₫¸̃yGW»ĐQ¿|­úúuîtKuKw§¨¬ßÀü©c̣¿±cËLxÑ¢EDtûöíåË—›››?~ü˜[@Dû÷ï?pàq·e_½zåææÖ¤I“'Op«=ỵ¤qăÆM›6}ơêƠË—/7n\¯^½‡rߦ¦¦ºººÑÎ;_½zåîîîåå•““Ă}ụ̂åËnƯº5mÚ´  @¥R5ỉ„ˆ/^¬T*¹6mêáᑟŸÏ}|ö́™……ÅÔ©S¹\b'Oä+¿ñ²¼ü†Ü§OŸVodÙ²eDô矖¿Æ?6ÚƯÄ8àG(øÙ@Ñ ƒđđ!ë tÏàÆ,‰‡T»Ö,E`` R©Ü·o÷1,,̀ÆÆfàÀâuâăă“““gÍǻ́̀-qvv5kÖƯ»w/_¾ÿ₫ưO?ư´~ưúÜ·ơêƠ›1c_¼x1))iö́ÙÖÖÖÜ’êƠ«OŸ>ưîƯ»ñññüú ,03+ª bbbâăăù»ÀéééD”““£¼”ÆKÅ•kÔ¨‘Ä“¦P(X÷›ÉÁ­j(M:B|à-_Î:!(&3“u•t†Ï®§R±>ỉ¤I§Nö́ÙĂƯ­₫í·ß† Râ>uRR•x'EÛ¶m¹¯̣óó‰¨cÇâo½¼¼¸àæÍ›DôÎ;ï¼£ö”Ăƒ¼½½‰ÈÓÓ“¯‰ÈÑÑñ́Ù³G½yófRR̉µk× ÄCÏDÊoÜÉÉ©Y3á%“›7o?~<—+͹té̉ƒ¤œ´””"jÚ´©₫úÉä¡p€Ü¸Á: uíÊ:€Ê œ?₫“'O>}zíÚ5ơ›¹*•Ô.³™››Q~~>wi°Ä·|!X­Z5"úöÛoÛ¨ kÙ²%888đ _½z5räÈđđpooï 6¬[·nÊxiù;::nß¾_̉­[7m±Ë—/[XX4hĐ@ë}eAáF%9Yˆi.Nÿ₫tô(ë$ª/,G``àܹs÷íÛ—––fmm=hĐ +¸»»Ñ•+Wz÷îÍ/ä†ôôôäJƸ¸¸>}úđß^ºtI¼mÍ5Å·¿¯_¿~åÊq½È;}útxxø5kfΜÉ/,ëcùÛÚÚrc±µ+>>₫Ô©ScÆŒÁj}Â3P†æÍYg  ñĂÆW8È€̃SH…Â!Ñơö¸¹¹úØqÏ=aaaƒ¶¿5ˆˆ:tèШQ£Ơ«WgddpK>}ºjƠªÆ{yyuèĐ¡iÓ¦«V­úûoŸ|HD-Z´à—üöÛo/^¼P¿ë_XX¨AăU—””¤P(.\¨¿\q€2 L7oÅwîĐo°NH’Å‹…øơĂ]Æ# @˜Vföl:r„uB̉|A_‡€Â±\Ÿ₫¹R©œ={¶ú·Ơ«W_½zơ[o½Ơ¡C‡1cƨTª]»v¥¦¦îÙ³§zơêD´bÅ1cÆxyy½ơÖ[–––»víâ'·°°X³fÍ›o¾Ù®]»1cÆäççïß¿?%%eçÎÜÍî|}}mll&Môî»ïÖ¯_ÿܹsǯ]»öéÓ§:4hĐ î:åÆ=z4v́ØJ5®7ră¸_½zuơêƠ³gÏæååmذ¡ÄkcøƠxfffK—.eƯ±F„ơ°n#d²Côå Óñh""B˜MdëV­7¯£NÏb”ø£ë̃]'íë¢_&«&óƯ’§ÊÓéù1¸ßÀüt<ÜÇ;wîQơêƠ³²²¸%âéx8gÏơ÷÷wqqqqqñ÷÷?₫¼¸Á¨¨¨~ưú9::‘½½ư={ˆhçÎÜ·ñññuëÖutt́Ó§Ï‘#Gø ›4i2|øpqS‘‘‘Ư»w·µµ}ă7&NœøäÉ“ÿû¿ÿ«]»öÀU*UaaáÛo¿mggסC‡ /ëÀK=§_¿~¤6O¡Pxxx¼óÎ;gÏUoP……E…½€éx¤S¨ä?̉̀Đxzz&&&²ÎINNÆô°àŸ²ë-Ú¹S»më¨SÄŒ̣×›®Pử€üEåLºíü楦¦ÖªU‹» åÓàÇÆd̉p«$0¸i‰jÖd¼ÆW OÜÔßÚ…Á1 Av6ë *ÍøFÆpP C(Àxœ8!Ä¥M0b ́́„¸Œ©Qä«&á:0€aCáeó÷gAåˆï¨ư5ëltcÙ²̉W¶î̉]>KsY§U‚ÂÊ&¾Ư[î geB\H9:²ÎF7Ä}b…£ø-Ơ˜‹ÀĐ¡p€²Z‘ÂÏ;iÄÄïÈ0„>)V8¶§ö¬Ó€*AáeO˲|9ël ¤ÔTÖHA¬S­Aá̉ÔÀê6mXg`ŒP8€‘xüXˆu.N÷î¬3ĐˆÙU½` …#”«aCÖH%~àϸ GñÑƯ¾Í:éicd €áCáå)YY¬³)Ï’%BÜ£ëltIÜ'ÿ₫7ëlʵ’V i£p0|( \uêñ±c¬³)Ïß³Î@_ÚµầLÖÙ”Kü²ÁdÔå<€i@áåZ´Hˆå=ûËË—¬3`áèQÖ”K<Ocj̀:9Z¼x±B¡8sæŒúWưû÷W(J¥’ûسgO///)mº¹¹ê"nM™™YóæÍß{ï½èèh‰ ‚¡³¨z`̀ !–wáXjÊÀÖ-ºÅ:ăannnnnÎ: "¢±cÇ6hĐ€ˆ^¾|yåÊ•°°°Ư»w¯]»vÊ”)¬SCá’=zÄ:IŒ{d Ç̃^î7©AëN<É:…"Ó¦Móññá?̃¼ysøđáü±OëÖ­Ygº…[Ơ` víbñc™ÆÊÙ™u•dMÖ¬S]ĩ¼ùöíÛU*Ơñ50R( "={²Î bׯ ±ø±Lcơå—B,Û1K“0^)˜‚Y§cđ|}}ÅÏ8?̃ßßßÉÉ©mÛ¶ÿùÏ6mÚ¤P(._¾̀¯pæ̀™Aƒ9;;ׯ_ÿă?~₫ü¹îrëÔ©“Ï̃½{ XŸ'Đ-ܪ€Đ©SEñ­[äáÁ:¡Rˆ¿4œ©'57dH±cï×uB¥Œa>O"%2Ü»ÙƠ£zZlđÈ‘#Æ «W¯̃‡~˜““óư÷ßW«VM¼BBBB@@À¸qăúơë÷ûï¿oÚ´©°°đ‡~ĐƯ1¶oß₫̀™3)))nâW•‚ÑAá  yóâƒåY8ÆÅ±Î@¿́D/a9p€V¯fPiÄ…cwbüº›æÔœá̃Ç̉Ø´£œzTfêÑÂÂÂàààúơëÇÆÆ:99Ñ´iÓÚ·o/^çÖ­[¿ÿ₫û°aĂˆhÖ¬YmÚ´‰ˆ¨à¥á•ÊA]Æ ‰(99…£qCá?í₫ƠWŒ{̣"Û—Ḉ§ư¬S0ü8e±Ư»w?xđ@}å‹/^¿~}íÚµ\ƠHD-Z´=zôÿû_~®j$"ssóöíÛ­hê¦Jå Né L G¨Œ§OYgP5XgPy%Æ)s.]ºTjÑvëÖ-"jÛ¶­xa‰á̀Åï đóøÜ¹s§Y³fụ̈Í›7?^ƒÔ¥¤¤QÓ¦MYŸKĐ-`đ^¼â>`¾´oO—.±NB ü]s•®2Ü»=Ùk±µ¼¼<ơ…%¦x´²²*u[—íÛ·ó»u릭¬._¾laa¡~ÍŒ û?̀`œœä|­Q<2Æ&qä "©©äêÊ:¡²1CD­¨ë´¦yóæDtíÚµ̃½{ó ¯]»&e[[[Ûwß}Wë)ÅÇÇŸ:uj̀˜1¨+Œ¦ă ä]‰ GÖÙ苸OdøNŸstNHU…£1iß¾}ăÆ¿û¬,nÉíÛ·wï̃Í*Ÿ¤¤¤   …B±páBÖçtÿ2 ^?ƒOD´k½ơë„Ù³‡u,tí*Ä?₫H“&±N¨¸P åăNÔ‰u:F¥zơê«W¯ ́رc```nnî¶mÛ:v́xæ̀kk}L´¾qăÆÑ«W¯®^½zö́Ù¼¼¼ 6”xÎ’_gff¶téRÖ窅#HđƠWôƯwEñÙ³r+ssYgÀÚÅ‹¬3Ps‰.ñ±yĩ”fĈGY´hÑúơë[µjµzơê¿ÿ₫û̀™3zØû¯¿₫Ê …ÂƯƯưÍ7ßœ6múă’üj< †N¡R©Xç`l<==YÎ4 ê0µ˜đsm¼ñ†V&€Ñb§ˆ§1©_iº8pmơ‹‚„äT¤¿^1…ßÀùùù ơêƠs=Ù:uêÔ-[¶dffâ)C hđcc ?i¥Â3PIwî°Î L¾¾¬3Đ/KKÖ æææưúơqÉ̀̀Ü·o_@@ªFĐ5`Ø~ÿ]ˆå=†Gû âx›Q³ª7bfffÓ§O?ỵäèÑ£ẃرzơê={fggú駬Să‡Â¤‘ë¼¾â›Eâñ"¦ M!>{–u6"Y”ÅÇí©=ëtŒĐ¢E‹Ö®]{ëÖ­‰'.^¼¸V­Z'Nœèjj€ Í;ïñ_±ÎF ‰FíµFîăK?̀‰ßR=™&³NÇq^¼xñ́Ù³'Ntê„¡ë (@¹NÅ:vêƠb9ơI±Â±?ơgh GF|¬øÜl —/³Î@D\8€1Aá•Î:ƒR˜á÷™l<£g¬SÀ/Z¨<¥’u¥˜0u,¸»³ÎL G¬Z5Ö”$¾gnsÓhø¨33Yg£¦ơch GL~¥™xDˆü²ÓYºBW„ôÈ${Àx¡pÉÄEʦM¬³!"úñG!®^u6,ô]ÑûüsÖÙÑlÍÇ(Œ ̃M’ùû ñƒ¬³!’éĂ–̀dd°Î€ˆˆ²)›Ư‰Á3˜¬Ï€ÑBá’Ơ¯/Ä̉×_³N‘É3gè Ă½'_%d,’““ƯÜÜXg@„[Ơ ¡„Öƒw­è G0TqqBl#c8ưåúf–zT¯ê€¬ p€ÊÓŒ<çÎ ño°Î†[[!f₫₫˜B*äc;²cœ h G¨ŒO>âgÏØæ"}æí·ÙæẬ̉åB̀|FñË—Ñ2ÆÙ€¶¡p€ÊÓ´‡³Ư¿\4k&Ĭû¤XሹxŒ G¨ ??!f^¤€³g' .-É’q6 m(@S;w²Î ˆ%êÙxHY§:„Â4¥R±Î È¨Q¬3`ÍƠ•u`P8€A:qBˆMy.ơ3PPÀ:""êFƯX§Ú‡Â*iÀÖÀ…£LÆ,Ư¥»BJ`ŒP8@%‰‹”Ư»Ye±i“;:²<r î“ ˜¥1—æ )¡p0F( ’Ú´â¤$VY¼xÁú<ȉ……?}Ê,çôœÛS{†'t…#T’¯¯cFùIMe¶ë`}ô [(  Äoưc¤ukÖ˜ `x?bŒŒátïÎ:‘T“u  ( ̣̀ÍÙîéR!~ă ¶¹È…x„ó Áµ¨ă @7P8@åM$Äyyúßÿ_•‹)Ó±± 8NÇùx -a}>@'P8@å±6crÔµk'ÄLÎø-ƠChëó:a*…ă={½¼¼|||æÏŸŸ‘‘Q₫úyyy?₫øăÈ‘#½¼¼úöí;sæ̀$vÓÈëÂñåKÖg@̃a°Sqáè@¬Ïè„I«W¯^°`Á;w¼½½mmmĂÂÂ&Oœ››[ÖúJ¥rüøñ+V¬ÈÈÈèÙ³gưúơ#""̃|óÍX&·dH¡â_~‘I"ÀV"%²NtÎø ÇÄÄÄĐĐP—LJ††FDDŒ7.!!aÅem²k×®øøøAƒ=ztíÚµÛ¶mûå—_ˆhĂ2ÈVa!Ă7iÂúđåÄ̉’u`́Œ¿pܽ{waaá¬Y³êÔ©Ă-™7o½½ư¡C‡ Ëø />>ˆÆoñúm ƯºukѢŽ{÷2|'QLŒÏ™Ă:9 dµ¡6UoäÉø ÇØØX33³>}úđK̀ÍÍ{ơê•ΈêêƠ«GDâQ¥R={ö̀̀̀̀Büb/SÖ³'«=‹ªÄ$bâ³ñçŸzƯơ#z$¤·T/#/U*ƠíÛ·œœœœœÄË=<<ˆ(%%¥Ô­† beeµté̉sçÎåææ¦¦¦.\¸đáÇvvv¬ @ÄEÊ­[úܳ¸plØơy†c–Ä#cP81#¿~–““£T*J,···§â×Å<==·mÛ6a„ &đ ƒ‚‚æÏŸ/q¿%–>|˜ơÉ0i>d‚±±qp¨ó:~¶jUÆÜ¹•mAăN‰‹săăäädÖgBnNÎÖ­ÊéÓh°½fư²¾̃z²*ë'×O&ô‹6á7s₫₫₫¬S #/¹¡Ó666%–ÛÚÚQfff©[eee-[¶́Å‹­ZµjÓ¦MzzúéÓ§÷ïßßµk×₫ưûKÙob"FÊ››[ƠÁ”)ôÑG\èpû¶ƒF§·ê‚n-Kzº¹Æ'Gƒ ¯ÑµªlÂYeKư¯uơ+D&ÂÈ G…B‘““Sbyvv6½¾î¨nΜ9qqqóæÍ{ÿư÷¹%©©©cÇ ₫ă?6mÊú°dFÏÏÓ½†¿Iåă½b胑?ăhaaaoo¯~e1++‹ˆøqÖb?>qâD³fÍøª‘ˆ\]]§NŸŸ¿oß>ÖÇ`̉^¼bŒŒQ'~ fÆ₫× €‰3₫?á...ééé\¥Èă‹rqqQ_?==ˆ¨ÍÇ]h|̣ä ëâcÎôC<›* Guâs’À"ŒŒ0jÆ_8úùù)•ÊS§NñKT*Udd¤£££———úúM4177OJJR©TâåÜó Í5c}@²áí­ÿ}‡´áiuuâ>ÑÛ»®ÎÓy>nOíYŸĐ!ă/Í̀̀Ö­[Ç=×HD¡¡¡iii£F²|ư…/^$''sĂÖ¬­­{ơêuÿ₫ưµk×̣3„'%%mذ¡Zµj¾¾¾¬@6DsèííÈ,̃ŒmH†b½+ñ\<“i2ës:däƒcˆÈƠƠuö́Ù!!!Æ ëÙ³çưû÷£££[µj5ỉ$~ÈÈÈàà`ww÷ÑW_}5zôè 6„‡‡·lÙ2===..®°°pÁ‚o¼ñëÓ ‡}¦§³>jĂÁ¤pl@ X7èñ_q$¢>ø`ÅnnnáááOŸ> Úºu«úäÿœu6rơæ›̀vưáa#'»gO:µaÆ‹/̣—B---ûöí;cÆ Œh//ºxQo{ßÇ\^CP¯¯^­óƯư›₫ÍÇư©?ë£Ư’Kᘗ—ÊÅnnnëÖ­»té̉… .]º´qăFî­-J¥rûöí¬3‘®]…¸øû™@rsu¾‹gôŒơQ€₫ÈåÇÇ?₫œˆjÔ¨±uëV₫-̉VVV}ûömÓ¦¿¿vvv\\ëL  zœ‘§´÷̀(L\®86hĐ€›X±U«VuÔ₫N¨]»v›6mˆÈV?ÿü£§ö£~¬tNF…ă¼yó5j”>cÆŒ¿ÿ₫›_₫øñăO?ưôñăÇ®®®Ÿ|̣ ë4 8ggứG<‰£Ÿ룖7ñø˜ăÇu¸£+t…m w„ŒŸ\q$¢/¾øÂƠƠơÁƒ'Nœˆ̣đđpvvNOOOJJÊÏÏ'¢úơë/Y²¤ÄVëׯg8€iụ̂K8±(>s†||t´ñ#”e¿1ˆˆæ̀¡¹s‹âƒéwtµ#ñ\<Ëi9ëă“Qáx́Ø1>V*•7nÜ(±Bll,ë@ø¶èÁƒº+ïßg}¤†I§c–Ä…£;áÉJă'£[Ơ`êÖb=¬‰23uØøi:Íúø@¯dtÅqêÔ©¬S€ªIHĐĂN4`}˜¦JF…ằ™3Y§2%¾O=iël Aÿ₫tô¨₫vWêU½?ܪ€*óđĐơÄ÷À1â³tù²NvQH…Âî½`_q5jƠ©SgăÆ\\¡ï³öèÖ­¢øÙ3]Œy;²>^C@³fÅR»vÚß…xd GÁ¸p¼zơ*Ơ¯_ŸÀđĐêƠEñüùŦêÖ’đpÖÇhh5â+h₫|íïâßôo>Fá`"p«ªL<÷³g¬³’22t̉l& ¶-É’ơQ€>0¾â¸xñb"²±±ác0l:‘§F Ö¯=¤‡¬S}c\8;¶Ô UV–N›ÇÈé\])5•u`\p«ä.2RˆQ8J'>WJ¥wÔ•º²>VĐÍăÈÉÏÏ¿sçÎưû÷•eüæÆ ÖGg˜,DW´>fI<‰£y±>VĐ]qܺu+›››»¸¸( ÖI€4o¼!ÄèdÚ@¨‚¿₫̉rƒÁú˜€÷ïß'"ssó??¿˜uÀ@;§£†[·f}h¦MF·ª›6mJDC‡EƠœÇ…ØÅ…u6†¦n]ïÂBN @×dT8vîÜ™ˆ?Î:ĐHưúºhUüp̃_°>FC3}ºk}| g4f}” ?2*?₫øă¦M›¦¤¤ˆvƒ!SP ­VÅ…#æâ©,Y:NÇ…]à-Ơ¦„ñ-†O>ùDüÑÙÙùîƯ»K—.Ư¹sgăÆÍ̀J©kׯ_Ï6g(]@…†Å̉›oj¥U¿ÂĐȉ§E:xf̀ĐN³â!Ơ(L ăÂñرc¥.¿sçÎƯVñ÷âŸ~̉Váø̣%ëă2Gh­©ÿ̉ùØ‘YèŒnU€a«VMˆăâ´̃<¦ç’蟪7†ˆñÇ©S§²> ©©Zoo©ÖŒee±NŒăÂq&ÿ251ÂûQ8jhÈúï«̃LéÚPÖÇz…[Ơ =>>Úmoöl!Fá¨ñy[±B ^¥«Bă`bdW8̃½{wûöíiiiDôôéÓyóæùùù1bÆ x5€Üuè Ä·oW½½/„¸aCÖGg˜úơb­$¢¶mÛQZZÚơë׉ÈÎήK—.DT¿~}"ÊÉÉa&”ËÁA[-‰ïu‡„°>.C,Äÿhoêî¡4”ơ‘€¾É¨p´µµ%¢ÔÔT"ŒŒän[÷îƯÛÜÜœˆ233‰ÈÉɉuP.íÍ#.ů3„Ê÷I==Oç…f1€é‘QáØ°aC":sæ̀ÆüñGn¡ŸŸ=xđàĉDäââÂ:M(×!B\µ·#ct¶ˆ§×¬âYŒAá`‚dT86Œˆ^¾|¹fÍääd"ªV­Z¯^½222üưư¹™{ö́É:M(—øêÖœ9Ui)=ơ±£}ûª´ùJZÉÇ ¨ë£}“QáØV<—Q`` R©äæè±²²zûí·Y§ åcÉÎf hYáAs“Æø]ƠÅR±°øơ×_7nÜưêƠ«=z̀˜1ƒÿÖÙÙyưúơuÄSÙ€̀Ư¹£•f|}Yˆá37§×“ähNF…#U«Vmæ̀™3gÎ/´³³Û¿¿§§§™™Œ®€N]¿.ÄxKuƠĐh³Á¦Ô”ơ12*¿ûî;.9rdCÑ[i«U«Ö¢E ÖÙ€d^^tñbÛX½ZˆQ8V¸pܳ‡5i$„ÇN12À4ɨp {ôèơéÓG\8€±±â¿₫¢úơ5hCür¼æÍY‘áëØQˆ4,Ñ1>®KuY0 £›¿£F₰ΪàÛo…XÓÙ_^¿: ´C\8j<#x.ù4Ÿơ12*§M›6bÄ"Ú´iÓăÇY§êÚUˆ1£ühü¸pÓ$£[ƠÜêºuë̃¾}{À€-Z´pttT(%V[¿~=ëL@²*˜JA>̉SÖ)c2*ÉÍÍgTY•ç€ñôd}ÆẪ23Y'NF·ªÀxT«V•­ĂĂ…¸øô\ ¹ñă…øùó*5Ơ—ú²>`CFW§NÊ:Đ’€€ª¼ÛN|sñhK@­][`FF…£§§'•ú£J¥‰‰!¢¦M›²N¤)U~c5hƯéÓ•XY<‰cuªÎ:w`FF…c›6mˆ(::zÆŒ§_ÿJKII‰6mW8¶lÙ’uPy5j°N^K¡Ö)€,Èh:)S¦„‡‡§¥¥EDDDDDp ?øà~;;;¼–À eei°FÆè‚«+½' ̉dtÅÑÙÙyåÊ•NNN¥~kggâêêÊ:MĐ¡ÈH!®Wu6ƨ~}!Ö`đz„^0i2*‰¨k×®Gưè£ZµjU£F "²±±iÙ²åĉÿüóϾ}û²N*CüvdiÄ÷´.d¿1úüs!–øÁ]ºËÇS ·}LŒnUslmmƒƒƒƒƒƒ‰(;;ÛV<£–€:r¤(¾|™Úµ«p q)ắ̀:c$~ààA6¬âMÄ#c0‰#€‰“×GR©|đàÁµk×V*•_|ñE||<ë4@WÄo†Â\<ºÓ­›†Ö¤n ÆBF…ăöíÛ ˆ¨qăÆk×®½té̉… ._¾¼~ưzî&u~~₫Ö­[5k|Ï=^^^>>>óçÏÏÈȨp“+W®L›6Í×××ÛÛ;((èüùó¬Ï€Ï₫Rñ#w(ugÈ!¾s§bd ȨpŒ‹‹#"kkë-[¶ 8ĐÚÚˆ¬¬¬úơë·mÛ6"ºpá‚-¯^½zÁ‚wîÜñöö¶µµ ›~üx:u¼¼¼.^¼8nܸă•yß./_¾,Ư „¸woÖ™/qŸ̀™SÁÊ+i¥°! G“'£ÂÑÊʈZ·n]OmÚßÚµk·mÛ–ˆ̀ÍÍ+Ûlbbbhh¨‹‹ËáÇCCC#""Æ—°bŲ6É̀̀œ;w®……ŶmÛvíÚºcÇjƠª-\¸°°°ơy0(̃̃BQÁ‹§OYgkÄÓ"egW°r* ï™éGưXçŒÉ¨pộ̣"¢»wïæå啸ª  àîƯ»¤Ñ»ªwï̃]XX8kÖ¬:uêpKæÍ›gooèĐ¡²ªÀ°°°¬¬¬>ú¨cÇÜ’¶mÛ4(--íÊ•+¬Ï€Ayÿ}!®hö—œÖÙ~Ͳˆçâ©KuYç ŒÉ¨pœ={v£F̉ÓÓgΜùÏ?ÿđË?~üèÑ#33³‰'V¶ÙØØX33³>}úđK̀ÍÍ{ơê•^ÖP›¨¨(…B1|øpñÂåË—'&&¶“0ƒ1Äw $Nr’H‰¬Sa<ă'Ÿ|"₫hooODÇrwwwvvNKKKJJâÍØÚÚ₫üóÏüU@)T*ƠíÛ·œœJ¼ÛĂĂƒˆRRR:uꤾƠƠ«WëÖ­{áÂ…‹/>{ö¬yóæưúơă» ¥¦J\qđ`Ö©;;;ÊÊb Æ…ă±cÇJ]^PPpăÆ ³²²ÊZ¿,999J¥̉ÁÁ¡Är®B}ZÚUyyyÏŸ?oÖ¬Ù¢E‹v́ØÁ/oذá5kZ·n-e¿%–>|X÷§ÊôđáCÖ)˜.ñÄưÉÉÉ|\¢S®\©NäÊÅff/’“³NܘƠ¬Ù0+«è÷¿¸SHưËë₫«®ª|/YJă uø Æœ¿¿?ëäBvoÑ.nè47"[Œ{vff¦ú&ÏŸ?'¢Û·o?ỵ$$$¤OŸ>/_¾üí·ßÖ¯_?sæ̀H¹î˜˜ˆ›;²ƒ71Ó½;=Ë…%zAüQ<×Öºu6£¿t($„‚‚â»wƯüü}Ë÷Ë#zÄ/ Vàơ],áä³¥₫׺ú"Á¸pœ:uªNÛwppP(9jÜgggÓëë%pƒ»‰hÙ²e}ûöåâiÓ¦¥¦¦†……6–u¦DüüÎÁƒ´jU髉 ÇÔƒuÖÀŒFU눋‹KzzzVñçÀ¹gz\\\JƯ¤N:––– …B¼»CÍ Ó€JÏE°d ël ¤[·Êüj/íeÈ‹¼qŒ‰‰Y·nƯ­[·²ÊïwưúơJµéçç—˜˜xêÔ©€×÷fT*Udd¤££#7s¤:__ß-[¶Üºu‹|Íáæîĩ¼9ë“`È̉Ó+\÷©dKFWcbbÆw₫üùŒŒ eÙ*Ûl`` ™™Ùºuë²_¿!!444--mÔ¨Q–––Ü’/^$''óĂÖFŒAD ,à‡]_¹rå§Ÿ~²··ïß¿?ëó`„Äo¿It§mÛJ¬l&§¿,€!]qü₫ûïU*•Ö›uuu={vHHȰaĂzö́yÿ₫ưèèèV­ZM4‰_'22288ØƯƯưÀDÔ¢E‹O?ưtƠªU₫₫₫:uÊÉɉU(K—.­U«ëó`€́í©´I xqÆ`èE@%$ÅÿüCuË}) FÆGF…#?Ö}ôèÑüèæªûàƒj×®½ÿ₫đđđzơêÍ5‹›‘§,S¦LqvṽºuëÙ³gưüü¦OŸîîîÎú$¦€úïËù₫ûï…xĐ ÖÙ†€ú曢xƠ*Z¾¼ä ¿ÑoÂÊ(€ˆdU8ÚØØdffº¸¸,Y²Ä̀LË·E†:tèĐ²¾FÆ`.àɨp477'"{{ûŸ~úÉÂBF‰€Đ×_Å̉ĉü7‘‘¬s3Uơë ñÁƒÅ^$..̉@Ö™€\ÈèVulj¨^½z¨ŒP÷îBüŸÿ°ÎJºx±ØÇ_éWÖ€ɨpœ1c†££ă­[·"qưÀ¸•1m#¦p•%a¸5”BF×öV¬XQ·nƯŒŒŒÉ“'·nƯÚÅÅ¥ÔéxÖ¯_Ï:S¨üüRÏ:1ÓóÆtçë$ÀpȨpŒˆˆàă«W¯^½z•uF UTPPbYx¸` †̃ĐÚµEñóçTSmâ¾Ô—u #¸3úRZa(RÂQÿJ ¬æ\#avG ©1]qœ:u*ë@—́́„xÏêÔ‰ˆ~₫YX†9¸ôoÀ!^¶ŒÆ%"ú†¾á¶¡6¬s‘Qá83ÿ·Ú¶­(¾|™+_¾d¼öàAQB)üÂ₫ÔŸu^ #2½U˜˜±sçÎ́́́‚‚‚̀̀LÖ@•‰&ư&¼t^~22‚(b È”Œ®8rÂÂÂÖ­[—Ê}́̃½»¯¯ïûï¿?}úôRÇY€ááß"ó·7ë” "̣ºâ¸lÙ²ùóçóU#/''gưúơ‹/f hÓÙ³BŒ‘1¬øù•ùUªĂ:;×®]Û¼y3s¯äđWẃØË:M¨ñ§K—„o©fEüA‰iĐScÖÙ€¼È¨pÜ´i“J¥233[¸pa\\¿Ü̃̃~íÚµVVVD´eËÖi@¼ÿ>=.‹ç­·Xçfª.âƒéDüǹ4—uv /2*oܸADƒ ²¶¶5pàÀ̃½{ÑÍ›7Y§ U º!]ăÄ ñ́ßÀ‡‡8@Ç­ó‡ĐÖÙ€¼È¨pLOO'"77·R¿uww'¢´2^q †Aô<ơŸ²ÎJ:}ºØÇêTuF /2*===‰¨Ô§U*ULL 5mÚ”u 6G°NJ‘j‘ZơFÀXɨplÓ¦ EGGϘ1ăôéÓÜ”””¨¨¨iÓ¦q…cË–-Y§ Ú¡xơYgcÚêÖeÍă8eÊ”đđđ´´´ˆˆˆˆˆná|À¯`gg‡×HêÍǘ‹‡­€úé§’ ;SgÖy€́È裳³óÊ•+œœJưÖÎÎ.$$ÄƠƠ•uP5¯ß|„j…#[ÂùorOXHè(IF…#uíÚơèÑ£}ôQ«V­jÔ¨AD666-[¶œ8qâŸ₫Ù·o_Ö @•½.RÖ̉ ~™³3ë¬L›P8†óï pu2ºUͱµµ &¢́́l[[[Ö€VơêÅưÿ+ŒØ•jƠ^G5Ÿó ;RGÖy€́Èëc ¨ŒPûö¬3€² :Ä:5ÆWŸ={VÙM¿² &K0Œ Ç.]ºTv“ÄÄD¶9@Ơ¥’0Đ #cä kW>Ú ëŒ@d}«Œ“¹ùQêÏjĐ€u>@dS¼Pt"' £†ÂôîĂÅsñ̀˜Q…¦@K¾ư–¨ÏI₫ăRZÊ:##¹ŒªV(o¼ñFûöíÛ¶m[³fMÖé€. íÇ: (ÆË‹hÈ₫#æâ€RÉ¥pT©T·oß¾}ûö̃½{›5kÖ¡C‡öíÛ{yy5ỉ„uj m9dÎ: Ppq«JŸp »üÚ½{÷ˆ¨°°đÖ­[·nƯÚ¹s'988´oß+"Û¶mËÍ †ÍU£,5¿É:;…J¥bC‘̀̀̀„„¾̀̀̀,±‚¹¹¹»»ûï¿ÿÎ:Ó xzzbè·Ü$''»¹¹±Î EQ0˜Âª³Nˆˆ¤àcÉå¯ ü“%“ư»^.·ª‰È̃̃¾gÏ={öä>̃¿ỵ̈åË—.]º|ụ̀Í›7 ”JåÍ›ø1€Á‹‹â:H„ÂQf®´¡6¬sY’ï¨ê5kÚÚÚÚÚÚÖ¨QẲ̉’u: 5…Gé¸ÂØ{L…gÈ’Œ®8&%%ÅÇÇ_ºtéâÅ‹÷ïßW_ceŒÀO? qcºOgÎë¤LƯ Z!|8°̣ơíË:'Æ…cVVW&^¼x1!!áÅ‹%V°²²jÓ¦×kl€ª{đ øç P82w—î N÷¸íÁ:!%Æ…cçÎƠGçÔ­[×ËË«C‡^^^-Z´°°ÑeQĐ¾ƒiæLÖI˜ºt@üñÖ-Ö €,1®Éøª‘›œ»¬X¯^=…BADÙÙÙ±±±%6éÖ­Ûœ@[Ó}"¢£GY'ô^±N €\.æñ€ïÙ³§ü5Msô;€ÑxùRˆ12F å;h˜Ă/Đ«… …¸-%°NÔÜ*z¼1jP8€^¥§ ñúu:@DC1‡5³¸ÿW{P€ơ­êT½0 K½;}́ơëÇ:5ÓuPǜÀÁ€¢ÿ?H~È:3Æ…£»»;ë3zơøqiKDáÈP±Âñaƒ¢…xÔàV5ÈÀ† ¬30iq§¾0/uZ ?(€ ;»BáC€ÂôçæM!:ơët ¤¦Ô´_¿ÖY€|¡pư?6çë›CíÚ±Îè ïz  __¡pŒfÈ GĐqáèîOÂç¿ÿf‰Œ)Q8b| ”€ÂôçĉâŸ7â•+Ygg¢B(„̉Àºu•üGŒY€¹¹¹¹¹¹D¤T*““““““YŸĐ—É“…øÎÖÙ˜¨ûÜĂKóô)ëä@fƯ»woß¾ưöíÛ‰èÑ£G₫₫₫₫₫₫¬Ï 蜳³Ú"Üe$̉«̃˜Æ€¿zơˆ=Ú¤I“çÏŸs Ï;WÎ&Ưºuc›3TƯ!j‹̣óY'Ẽx× tŒ ÇZµj=~üøÂ… .\àN˜0¡œMÙæ Y¼Xˆ…Q1TPÀ:5 "̣%_. µk‹>zD..¬3Ù`|«ºwï̃¬Ïè‰øeƒÂû=®Oơ¹ iSa…“'Y§r¸pœ;wîÛo¿Ư¨Q£5jX[[s k”‹ơ ‰btpxÍ%,Å´z'‹çsúœ fέ€GO@„ñ­ê5k.Z´ˆ‹SSS}}}‰èâÅ‹¬O hßưRï§r}ú¡C‡Ú¶m«qË{ö́ ộ̣̣ññ™?~FeÀOMMíØ±ăl¼% @wÄ/9p€u6&á’¾rJ ët@d4#ÇÊÊê“O>ùä“Oˆ(;;[+ï§^½zơ¦M›lll¼½½ïß¿–””´uëV)×/U*Ơܹs³³³YŸc豄•Îe&”N^WKĐJƠ˜˜˜êâârøđáĐĐĐˆˆˆqăÆ%$$¬X±BÊæ›7o‰‰a}& ˜ø5¢cưÎÔ”:2†Ó¥ ëä@fd]8jÅîƯ» gÍU§Nnɼyó́íí:ÄÍ Y¤¤¤Ơ«W7õœơA0ñăqåÍÅăêÊ:SUâeƒÅ¾}“œ̀:Qă/cccÍ̀̀úôéĂ/177ïƠ«Wzzz|||9̀™3ÇÑÑq̃¼y¬À€‰ Ç̃½Ë^O\¤°ÎÚȤ“|,±pÄø £/U*ƠíÛ·œœœÏǽƠ0¥Ü罿ÿ₫û7n|óÍ7vvv¬À€íß/m=q‘"íIĐØrZÎÇå:ñúơ¬“ƯàíÊÉÉQ*•%–ÛÛÛÑÓ§OËÚđ̉¥K?₫øcPPP÷îƯ¯]»VÙưroÁ;|ø0ë“ả>|È:Ó•ŸïÆÇÉ¢û%:Ŭys~ä̀óË—ÓpgT—’$‘eQœ•œ•EYüWjXºïæÍbƯú„ß`̀ùûû³NA.Œ¼p̀ÍÍ%"›’~sĂn233ËÚjΜ9 6ü׿₫¥Ù~Y:”äææVơF JôBYR3*ª&úK—nÓm>Vï…²úˆÂÉgKư¯uơ+D&B¦…cbbâ½{÷222† beeơâÅ îae988(œœœ˹éuÊj3$$äáÇ;v́À|ăZ4x°äUSSY' Elm Ó‘Ov…cXXغuëR_ÿµÑ½{w;;;__ß÷ßúôé …¢r‡gaaoo¯~e1++‹ˆøqÖb111;v́˜:uj»víXŸ ƒ'Äå ©FZQ«̣W ]»Xg ²!¯Á1Ë–-›?~ªÚņœœœơë×/^¼Xƒ6]\\̉ÓÓ¹J‘Ç=©ăâ⢾~RRmذÁóµ‘#GÑüáéé9Düb4¨ˆøK={V´v½z¬ó5 ·è»Q7@Å·ăV¯f:°&£ÂñÚµk›7oæbsss~9•qDZ±±•mÖÏÏO©T:u_¢R©"##½¼¼Ô×oܸq@q=zô "WW×€€€^½z±>O†D|—³M›Ö6Mˆoß®hmĐĐỸÍ3›*x™ề™Bü×_¬SÖdT8nÚ´I¥R™™™-\¸0NtË̃̃~íÚµVVVD´eË–Ê6hff¶nƯ:₫µ¡¡¡iii£F²´,UøâÅ‹äädnØZ=V÷é§ŸQ§NV­Z5gÎÖç ÀTîßz˜6P/’pn{QÿOe†>7nÜ ¢Áƒ••2pàÀ̃½{ÑÍ›7+Û¬««ë́Ù³ï̃½;lذ/¾øb„ «W¯nƠªƠ¤I“øu"##ưưư?úè#ÖçÀ´‰,F‘¢3â±R*ÿ ŒŒ Çôôt*{Æwww"J¿ơV²>ø`ÅnnnáááOŸ> Úºu«úä ;Wrƒ£GY§l´r)—u `¨d4ªÚÓÓóâÅ‹¥>ŨR©bbbˆ¨iÓ¦5>tèĐ¡C‡–ơíàÁƒ—=SH«V­0/#€^¾â5Yg²²*Ö•`ÊdtűM›6D=cƌӧOs SRR¢¢¢¦M›Æ-[¶d&H%¾Û"mflÍ”ó²A1ñø˜ÇY' Lɨpœ2e³³3EDD|øá‡ÜÂ>ø`̉¤IÇ#";;»©S§²N¤RgÿÆd:v.đ±ÄÂc–€'£ÂÑÙÙyåÊ•Nâ!|"vvv!!!®®®¬Ó©4)2ÄEʱc¬À‰GÆH,Åp¢p0q2*‰¨k×®Gưè£ZµjU£F "²±±iÙ²åĉÿüóϾ}û²N*A“Ûâ©R—/g}Fh=­çăFÔ¨²›ïÛÇú€) áØÚÚQvv¶­­-ëŒ@4â{÷Xgc„Đ“ªl^XÈú€)ÙœÄÄÄ{÷îedd 2ÄÊÊêÅ‹öxdÀ`iøÆ¥¤$Ö‰C33”Œ@$ĂÂ1,,lƯºuü못wïnggçëëû₫ûïOŸ>ư Èœx²hŒx‘¡ ßR-@ÿûëŒ@äơŒă²eËæÏŸÏW¼œœœơë×/^¼˜u‚ •øơœ•+Åï­zLÂc§GÆp† âŸf}ÀŒ Çk×®m̃¼™‹ÍÍÍùåüUÆ;vÄVîÅ·À̀ë—õjU™-Å/™ùçÖÇaTN̉I>nFͤoØ¥‹ăÑSS&£ÂqÓ¦M*•Ề̀láÂ…qqqür{{ûµk×ZYYÑ–-[X§ ’œ8¡é–sç 1fÑ*ñ\<3i¦ô ñqàȨp¼qă <8((ÈÚÚZüƠÀ{÷îMD7ÅM€Qễ]ˆQ¤h•¸pÔX|<ëĂvdT8¦§§‘›[éÏk»»»QZZë4 rjƠªÂưNߨ¤S:ëÀ°É¨pôôô$¢RŸbT©TÜ»ª›6mÊ:M¨‡*lœŸÏ:}(biÉ:mÚ´!¢èèè3fœ>}[˜’’5mÚ4®plÙ²%ë4 b‡ ñ×_W~{ ÙÍfd|É·²›|ü±‹G>€I‘Qá8eÊggg"ˆˆøđĂ¹…|đÁ¤I“;FDvvvS§Ne&TLüh¢&“8bâG¸F×ø¸Rsñm"Ú˜,ÎÎÎ+W®trr*ơ[;;»WWWÖi@ÅÄ……Må·)ÑѬÆHˆGÆhP8 j …#€©’QáHD]»v=zôèG}ÔªU«5j‘MË–-'NœøçŸöíÛ—u‚ IrrƠ¶³g³>#ñ5  4§æUijûvÖŒÈîA"[[Ûààààà`"ÊÎζµµeèø̃‹¬³1™”©­¦T*֌Ȩpüî»ï¸`äÈ‘ 6$"T†®cÇ*7qñ"냀"2*ĂÂÂ=zDD}úôá G0D))BŒQ.2T‡êh¶aß¾tü8ë́€)=ă8jÔ(.xđàë\@sÛ¶ ±æ…c³J¼I*Eƒ‘1œ!C„øÜ9Ö‡,Ȩpœ6mÚˆ#ˆhÓ¦M?fhH\Rtî¬i+â'U?g}LO<¤ºiø2ŸV­„8*ơ! 2ºU=cÆ "ª[·îíÛ· Đ¢E GGG…BQbµơë׳ÎÊ£¹Z–/&€9xÆe}X†M\8.¡%5RbF¹sYèŒ Gn–oNnnn||<ëŒ@ÚrÛ¿¿£p¬2qáhEVUođÔ)Ö‡,ÈèV5+-Ô'D„ù¦µàáÙqĐ]qÄ댌–ÊÈ`}(PÄÁ=c°#£Âqæ̀™¬S€ªßÁ|÷]ÖـΤñx%"¢‘#é矋b•ÔB#‡[Ơ Mâ»ÊâÙ[4áçÇúhŒÄ=ºÇÇÏÅS´¹hk8Cơ=}ÏÇ©Jo¬^]ˆư•6nd}l _†z«:))é½÷̃ËÎÎfèŒø_†²ÎÆ€%R¢.ż́&HFW'Oœ’’rèĐ!"ªU«V=êƠ«—––ưđáC"ể¥KÛ¶mŸ@›>Ơv‹sæqx8ëă3H)”ÂÇÁ\ơ bŒ052*½½½‰(??ܸqkÖ¬¹páƒ._¾úî»ïæææQûöí‰hñâÅ+W®$¢† ²Î/^h»È7]eâIkQ-í6~ø0ëĂư’Ñà˜9sæÄÅÅedd<₫|ăÆƠæ³°°7n]¼x‘[2bÄÖY€.‰çùGᨑtƒu `†ˆÚ´iăçç7ỉ$¼u@>âℸfMÖÙ€êT½êpœœ¯_0Ṃ*‰¨zơê&L˜0aeggÛØØ(ë,Y²„uP’øNrHˆöÚíÚ•¢£Yœ¡J£4>I3µỚW_ѸqEñ‰äëËú8@_dt«Z,111""âÀ/^¼(((È̀̀dT@\86n¬½vÅăcî̃e}”F<2F+“85…1K¦Jv…cXX˜¯¯ï°aĂf̀˜ñÅ_<}ú4;;»OŸ>k×®åçâ‰ÑM»(Rª@\8ö¢^ÚjÖÉI´ ô €)‘Wá¸lÙ²ùó秦¦–X““³~ưúÅ‹³NôÎËKˆ¿ûu6f/íƠơ.ñd} G2*¯]»¶yóf.677ç—óÏ8îØ±#66–uPFtÖô;¬ÎÀ( ¯Ûm’Qá¸iÓ&•Jeff¶páÂ8ÑøL{{ûµk×ro¯̃²e ë4 /_ ñ!¬³ƯkƯuÀ‚Œ Ç7nÑàÁƒƒ‚‚¬­­Å_ 8°wï̃Dt7EdIü [€ÖÆ`¼fgÇúø GÆ5(jïñcÖ‡ú"£Â1==ˆÜÜÜJưÖƯƯˆ̉̉̉*Ơ&èÇ¿ÿ-ÄÚŸư×05²¶ñ±N Gqï€q“QáèééID¥>ŨR©bbbˆ¨iÓ¦¬Ó€RèvÊ,ñücÇX«Á¸KẤE]¨‹vïÙSˆ1a€éQáØ¦M"1cÆéÓ§¹…)))QQQÓ¦Mă Ç–-[²NJ¡Û›•Ÿ}&ĘưE2ñ\<¨ƒw„>0 ùL˜––öæ›o–s3ÚÎÎî÷ßç_<([‰‰‰¬³€b’““Ëz ´Bü‚'‰¿T*×)üÜƯéÖ-Ö‡k$ô¤₫ª—̃/t:h¿ÁdÈdÿ®—ÑGggç•+W:‰'–±³³ ‘Ơ`âzim’é2$%±>D(¢ö:X0~̣zWu×®]=úă?:u*999''ÇÆÆ¦qăÆƯ»wŸ2eFVÈ̉µkBlkË:Pc¡›_ơuêĐ£G¬ ôK^…#ÙÚÚQvv¶-₫½Ă‡…xùrỨ£];º|™ơ’\ÊåăÉ4Y»X´ˆ>₫¸(%ooÖÇ º'£[ƠêP5ñ؈V­t³ñ́/ÿüĂúˆ €xdŒÖçâ)jo0=2ºâ˜››—đäÉîZ£³³sÛ¶m;tè`ccĂ:;(Ó‰ºßG@}ưuQ|đ }ø!냖;qá8˜´>µ&QÆB|à-ZÄú˜@÷dQ8æååíØ±cÓ¦MOŸ>UÿÖÚÚzøđá3gÎtttd)0̉½»/\ˆÂ±B[i«>w'zM,3ö·ª/]ºÔ¿ÿ¯¿₫ºÔª‘ˆrssẃØ1xđàK—.±NÊ£§Ü¥§³>PPH…¬S#ĸp|úôé¤I“₫=±diiéêêÚ²eKWWWKKKñ“'OÎÈÈ`›0”cèP½́&/ơB̀-`jÛ¶mËÊÊââ₫ưûoÛ¶íÊ•+'NœØ·o߉'®^½úßÿ₫wàÀÜ ™™™[·êơæ TH<¤:@'c0^³Å£5§7ơÖ]ăâÏÉa}¨ {Œ G₫Ơ‚£FZ·n]çÎŧ”íØ±ăÚµkÇŒSb}‰mÛ„X·…£n[7*çé<ëhHuQă¢¶·la}Ø {Œ ÇpÁôéÓËYmæ̀™\pÿ₫}¶ @ çÎ ±nç?¿ :ơqËÚ):ÅÇÍ©¹îväï/ÄçÏk̃ Æ…ăóçωÈÉÉ©^½z嬿́́\»vm"ÊÎÎf›0”œ¬¯=-[&Ę6°\â¹x†’~˜"ñ«êQ¤”ë$ÔÿNÓ̉X6èûéxÀ8t́¨Ç]¼ÈúpL‘,F)¾zơêœø9©̉äææJk ôGüX[·n¬³55©¦®wѾ=a]Ó!‹Â1--m„ ¬³€J_ø{ï=Ưï¯Y3º}›ơA’Q4J×»  Çk×tö²rܪ͉5́ÜY÷ûÏ₫̣ü9룗©p çcÎÅS´ Ñđè)€ÑCáÓw¡€"Eñj=ÍE³ư OŒă[Ơ`}@s*•~÷׿¿û-ËúÈÑ6æd·¦ç¬Đ¢¨(Ö:Ƹptwwg}À0éoIóœpt·ª@ Fé| †Œ Ö E\\Xgúb*…ă={½¼¼|||æÏŸŸQÑ_9¹¹¹›7o2dHûöí{ö́ùá‡9s†ơAÈ‹øƠñx´ u&=ŒW"*̃ûú~zôË$ ÇƠ«W/X°àÎ;̃̃̃¶¶¶aaa“'O.gbÈ‚‚‚ &|óÍ7?îÖ­[³fÍΟ?ÿÁ¬_¿ơ¡Èˆx$„₫ G??ÖÇ-k÷é>ëadLÑ0f Àdᘘ˜êâârøđáĐĐĐˆˆˆqăÆ%$$¬X±¢¬Mvï̃}é̉¥;FFFnܸñ—_~Ù·oŸƒƒĂúơëoܸÁú€äbÍ!®SG_{m̉Dˆ÷ïg}dg.ÍåăÔA?;8P”À\ÍÛù3₫Âq÷îƯ………³fͪóúo¶yóæÙÛÛ:t¨°°°ÔM>LDŸ₫9ÿmww÷>úH©Tâ†5ïåK{3Gˆõd}dG<2f ÑÏNmlD `d€Q3₫Â166Ö̀̀¬OŸ>üssó^½z¥§§ÇÇÇ—ºIrr²M«â/@à€§¤¤°> Óæá!ĸ-ªF<û7ø `ÜdñÊAƯQ©T·oßvrrrrr/÷đđ ¢”””N:©oơĂ?XX”<3×®]#¢† ²>&ÙO­Wâá9 {F^8æää(•J‡Ëííí‰èéÓ§¥nƠ²eËK¢££CCC«W¯>|øp)ûơôô,±„»ư ¬<|øu Æ&%Å‚¨èßQ=zd&'?­l w›(NÆl%¼>;5T5’ïirr4ë—öí]/]ªÎÅè­Ăo0æüưưY§ F^8rC§mÄà‘­­-effVØ‚R©üơ×_—/_®T*W®\é́́,e¿‰‰‰¬Jrss«z#À?îÛ²¥½››½hØ)ææ¤TV©PKQKă“£Á†Åoê [´ç”-ơ¿ÖƠ¯™#ÆÑÁÁA¡Päää”XM¯¯;–ăüùóC‡]ºt©³³óO?ư4xđ`Ö âÇ ƒƒơ»ï „¸Œ!n¦)’"ùø+úJŸ»₫ö[!Æ£§F̀È G {{{ơ+‹YYYDT§́Ḍ̣̣–.]:~üøÔÔÔéÓ§:t¨{÷î¬@FX˜6° I8z›Ä‘ÓA4óúÀˆyáHD...ééé\¥ÈăÁq)ă=Y………ÿú׿¶nƯêççwäÈ‘iÓ¦ñọ́‡å¬+(Ë .kQ-Vià‰n#fü…£ŸŸŸR©ªˆ\]]gÏ2lذ={̃¿?::ºU«V“&Mâ׉ŒŒ vww?pàÀ“'O‰‰Ñ¼'`°¦NbưE<¬È럠 (@µj±Î .Ÿ̃îz‚Â4Á~dL /_²Î4iÂ:Đ ƠW_ q¬³á`Ú@‘ÖÔu DD]ºqZël@«P8€T ñ;ï°Î†3dë »A7øxcÑ„ Bḷo06(@*ñc„66¬³áˆo™Ÿ?Ï:Ä#c˜ÏÅĂñ÷¥gº' Ur2ë Ô‰¯8d‘".[RKÖ騥g}`̀P8€!«__ˆøu6 œ¤“¬S(q02( ̉jÔ`A©?f€‘Cá’¤¤ñgŸ±ÎÔ8“3ë}ú°Ît…#H"~XM^“8¾ñë dA&#c’årư:ël@{P8€$â±sgÖÙˆ‰‹”çÏYg£W‡èpäZ8b| €1Aá’8À:ƒ²4o.Äÿùëlôj.Íåă₫ÔŸu:‚-„øë¯Ygڃ ÜÇ ±‰ â}NÂVr`Né=ch G¨++Ö”ĂÄn‹̃£{¬SÓ‚Â*G^#cJÈÈ`©]›u ( b6±¬ GSƠ‰:±N¡$üœ%P1ñ$]º°ÎF]­Z¬3` …„^±!™¼;\ î“đpÖÙ€– p€‰‡T·”Ưû‰>ÿ\ˆ¯\a ¡W¾¥oY§S̉’%Blb3P±«WYgP>“œ6đ GêM̃¬Ó)ÉÚZ”ª©ô €ñCá†ÏĂCˆM¦H2wÿ>ë @KP8@%T«Æ:ƒ >Í:£…Â* âfútÖÙ€k²®z#ºà-»ûçPU( â{¿̣c¥n]Ö03„†°N¡tâŸÜ­0( âÂÑ×—u6e)……¬³Ñ¹HdZΛä˜%#‡Â*°kë ¤)_|Á:›CsøX¶W;‰f%_¼˜u6  ( *ë ¤8PˆŸ₫€>`TăÇ qr2ël  P8@é₫ü“u1êiÅo©6ˆÙ¿9â«ÀF×'¦…#ñ@£+RÄ…£ºp¡êm3( ¬3Đ˜xs£đ„đÎ>` …#TÀÁuS*YgE,,XgÚ€ÂJqäˆó ël*K¡`Îơ¦̃¬S¨œ)S„8'‡u6 )P„Øđ&á3¼Œ%¹A7„C4„·T‹ơ˜%‚ÂJ!₫«ƯÖ–u6•%.RbbXg£5â‘1W8$: …#”âî]ÖTE÷îB>uvº%¾¯k¨sñpúöeÖ¤P è\P8€$(@ G…#H¢P©T¬s06¬SƯJLLd(@ܪIP8€$(@ G…#H‚Â$Aá’ pIP8€$(@ G…#H‚Â$Aá¨5{ö́ ộ̣̣ññ™?~FFëŒLKnnîæÍ›‡ ̉¾}û={~øá‡gΜQ_ ƯÄJjjjÇgÏ­₫:Eÿ®\¹2mÚ4___ooï   óçÏ«¯ƒ~ѧ¼¼¼üqäÈ‘^^^}ûö9sfRR’újè=¸{÷®§§çåË—KưVJw7™/Z´ˆuÆ`ơêƠË—/ÏÎÎöööÎÍÍ=wî\LL̀Đ¡C---Y§f Æ÷Ûo¿)•ÊÎ;ÛÙÙÅÄÄ́Û·Ï̀̀¬sçÎüjè&VT*Ơ'Ÿ|’œœ́éé9`ÀñWèư;~üøÄ‰ï̃½Û´iÓ&MÄÄÄ„……µjƠÊÍÍ_ư¢OJ¥rܸqaaa–––̃̃̃–––QQQ»víêܹsưúơùƠĐ)ú±víÚ+W®Ö­[·ÄWRºÀø»IUvóæÍæÍ›÷́ÙóÑ£GÜ’¯¾úÊĂĂăË/¿d©øơ×_=<<̃~û휜nÉ­[·:wîÜ¢E‹ëׯsKĐM ưüóÏŸ}ö™x9:Eÿ={Ö©S§víÚ]¸p[rụ̀åÖ­[wï̃]©TrKĐ/zÆư›9sf~~>·ä́Ù³-Z´0`¿:E×233cccÿóŸÿp¿¬.]ºTb)]` Ư„[ƠZ°{÷îÂÂÂY³fƠ©S‡[2õ<{{ûC‡²ÎÎ$>|˜ˆ>ÿüskkkn‰»»ûG}¤T*ùÖè&V’’’V¯^Ư¼ysơ¯Đ)ú–••ơÑGúØ‘[̉¶mÛAƒ¥¥¥]¹r…[‚~ѳøøx"?~¼……·¤[·n-Z´¸wï̃Ó§O¹%è]:tè»ï¾»sçβV̉¦ĐM(µ 66Ö̀̀¬OŸ>üssó^½z¥§§s¿@×’““mllZµj%^èîîND)))ÜGtsæ̀qttœ7oú·èư‹R(Ç/\¾|ybbb»ví¸è=«W¯ñ5"©TªgÏ™™™ñ¥$:E×–.]ºaÆ 6tï̃½Ô¤t)t ǪR©T·oßvrrrrr/÷đđ QƠ:ơĂ?¨ÿ3ñÚµkDÔ°aCB7±óư÷ß߸qă›o¾±³³+ñ:…‰«W¯:::Ö­[÷Â… ?₫øă·ß~û¿ÿư/77—_ư¢C† ±²²Zºté¹sçrssSSS.\øđáĂÀÀ@î:Ezôèáççççç'~®”'¥ L¤›,X'`đrrr”J¥ƒƒC‰åöööTü_ ;-[¶,±$:::44´zơêÜ•t—.]úñǃ‚‚ºwïÎƠñbèưËËË{₫üy³fÍ-Z´cÇ~yÆ ׬YÓºukB¿°àéé¹mÛ¶ &L˜0_4₫|.F§0'¥ L¤›pűª¸©ÛØØ”XnkkKD™™™¬49J¥rëÖ­'ǸÉÉY¶l™³³3¡›XÈÍÍ3gNÆ ÿơ¯•µ¡SôëùóçDtûöíđđđóçÏGFFNŸ>ư¯¿₫9s&×#èưËÊÊZ¶lÙ‹/Zµj5v́Ø₫ưû[[[ïß¿ÿøñăÜ èæ¤t‰t®8V•ƒƒƒB¡ÈÉÉ)±<;;›^ÿ;ôæüùó‹/¾sçN½zơ¾₫úk₫Qt“₫…„„<|øpÇüˆ¥Đ)úgeeÅË–-ëÛ·/O›6-555,,́àÁƒ£GF¿èßœ9sâââæÍ›÷₫ûïsKRSSÇüÇ4mÚœ”.0‘nÂǪ²°°°··Wÿ—DVVñăª@×̣̣̣–.]:~üøÔÔÔéÓ§:tHü€3ºIÏbbbv́Ø1eÊ~¼…:t₫ÙØØXYYY[[ûúú—÷ë׈ñ¼Iè½{üøñ‰'5kÆWDäêê:uêÔüüü}ûö:E¤t‰t G-pqqIOOç~2xÉÉÉÜW¬³3 ………ÿú׿¶nƯêççwäÈ‘iÓ¦©_åB7é÷̉‹ 6x¾6räH"úă?<==‡ ­†NÑ¿:uêXZZ* ñBîÏKAA÷ư¢OéééDÔ¤I“Ë›6mJDO<á>¢S˜“̉¦ĐM(µÀÏÏO©T:u_¢R©"##½¼¼Xgg¶mÛväÈ‘w̃ygưúơeư«Ư¤O7(®GDäêêĐ«W/n5t₫ùúúfeeƯºuK¼›(„Ÿkư¢OM4177OJJR©Tâ剉‰DÔ¬Y3î#:…9)]`ƯÄzrcđ×_5õÜßßÿùóçÜ’M›6yxx,_¾œuj&¡°°°_¿~;v̀ÍÍ-g5t[W¯^Us :Eÿ®_¿îáá˜Î-IHHđ̣̣̣ööNKKă– _ôlÊ”)kÖ¬á_̃sëÖ­®]»¶nƯúöíÛÜt̃|₫ù祾9FJ˜B7)TÅÿ‰ùùçŸCBBêׯ߳gÏû÷ïGGG·lỤ̀çŸV–Z÷øñă={Z[[¿ñÆêß1"((ˆ‹ÑM ]»vmäÈ‘Ă† ûöÛoÅËÑ)ú÷Ă?¬ZµỄ̃¾S§N999±±± …âÛo¿4h¿úEŸ̉̉̉Fư÷ß7ỉ¤eË–éééqqq……… ,x÷ƯwùƠĐ)ú±`Á‚={ö́̃½[ưm)]`ôƯd¾hÑ"Ö9//¯&MưÚµkü·óçÏçJ|ï½÷Ä[8p€[̃®];>ụ̀›Đ.`BÆÇOŸ>‹‹c’Cttô›o¾¹uëÖ‹/æä䤤¤9rdÔ¨QË–-ăV4hÄÇÇ¿xñ‚ßvÓ«W/kkk)Mh—ë$™3gW-ṇ̃óó+Ûˆ···¥¥%·aBBB=ô|ÙÙÙÁÁÁÜÈî®]»z{{'''‡‡‡₫̣Ë/îîî£FêÖ­›]VVVAAAtt´ŸŸ·-_88PbSz>:0z(À0<~ü¸ê(Úµk§¦¦Ñ“'Oô?₫ø#Wê 8píÚµÜB//¯%K–ѺuëFeaaÑ¿ÿ°°0"â Ç”””¿₫ú‹ˆªU«Ö§O‰MéÿÀ¸áV5˜.ÈÎÎÖÿ̃O:ÅcÆŒá5ÊÜÜœˆRSSIt·:** øË=zô°µµ•̃€á#†Í›7wëÖM¼$55Ơ××·²í<{öŒ ¸̣Kº;w~ñÅâ%-Z´Ø¿¥INNæ‚?ü°ÔîƯ»çééÉß­NMM½{÷nÓ¦MKܧ–̃TeÏ@9pÅL ‡ÚÙÙYÏ»ÎÎÎÎÉÉ)ŒŒ "âîVsK¢¢¢T*Ơùóç¹å}ûö­TSZ„Ê¿\‰8IDAT+`Bâââø!5mÛ¶Ơó̃mmmmll¸̉?ÿüsÆ Ơ×áç*÷÷÷çs}÷Ư[†Ä@-vï̃Ư½{÷sçÎMœ8q„ çÏŸï̃½ûîƯ»‰hđàÁ%%%Gö çÏŸÏÊʶ:t¨iÓ¦ááá¼/lGU(**ñ¼ùéÓ§W¬X±|ụ̀„„„fÍÍ;·¨¨hĐ ADtđàAa縸¸:èơú¸¸8"ÊÉÉ9}úô!CtV7yÔÀwRóöæ%RSSW®\é]¿··÷œ9s¢££Ï=Û©S§; ‰cvvöùóç¿øâ‹™3g>|xäÈ‘G)++2dÄlÎƯ»¼#°Drr2………±…^ŒÉÉÉ:u…l§01Ư«́3'TUs7;%ăú»YÏÛ·›øø˜O徆̉Åcz„5¿ÑÄSùÿư>ÿüñ₫iiäïÏå₫¿ÿËß_{Ù*oÏøñ\b¯–+¹~I_ ɹrÇ*û8 / ÂÆxGăø\ó¦Đ¢ ²*ÿ¯ĐgФă_‰.đ Ÿu‡)_±£IOÇx‡ ¶dÓ7¸Ê>lWáB¢wŸy†*¯#8J/¹^=Çé‡z˜J¶̉(e•æÍ‰c|<¯ÄñêUcùÙg-¬ä…¨¨ˆKøUA#¬Ïù(Û°‰ăÛ–VrX‰#«æÏG¹_f?HNæ2˜@;"#å~9¢¢xG@´„–ÊCi¨ơÆS<·‹ùYJØ7å"·K1èÅ;¨ ‰#€v°+ØÆóËQÊyxX~¬GvtOêi}…Ù”Íû¬Ă¾)œ>_˜2ȨGmRAâ8̉́é+ŒØÆÓ‹œ·ØÂæTûä/¶Íçw>!° é³x̃ ¨Gmº{—ËiÙ•¬i5d§[9wË¥HÖ%QG:ë+‘LˆDơpzSØïC*h•SHÀ lC'Ûjh®1cª®SIWéªơ•Q/UuƳâM©€SZö³ĐˆOP$µøä“O’’’į7 /gg¾çgÇäHƠOQOƯ­)Y²f©{LYªfº|>—¢í1_uGMá=¨„Ṃ¤Jb5>@œ¢˜dí"—ÑÈlæÍ;‰µ̉ẽÈmáÂ…:î×_åujV“&Mú÷ïÿƯwßIx–øøxN·}ûv ỸuºgÏÊß%¨æqĐ”ÈHâñ'Ç@ùnïßçxADDnäfÍál‹c<ŇR¨̉°‚)[ỵFDYJ‡J0aBóæÍ‰¨¬¬́æÍ›{÷î5jTLL̀믿Î;´ ́íííÙ%@58h Ûâxå +|₫̉R̃w@£i´5‡·¥¶†r%¼@/(}l̃ëc]UQDû””4cÆŒîƯ»~LKK [¸p¡ÚÇC‡ñª†GƠÂHù́3̃ÑXÅë4}·È8>\ÂNÿ¦s¸ ;‰ªf$óÅżC¨üưư»téróæÍ‡̣¥veee¥6ùåUSĐâ ):Ë\Ê謂&,Œå?;O”téR1ñHwR¤«ª-SNàÙc²}a!9:Z|øªUÜ"'¢Ù³­:üĉ ,HHH°³³ _°`AçΉh̀˜1»wïÎÎÎvss#¢íÛ·O˜0¡C‡‰‰‰Âo¿ưö²eË̀ꘕ•êêêZóÙ‰( `ĈÏ?ÿü+¯¼BDgÏ%¢¸¸¸?₫8>>¾iÓ¦C‡5j[ùùóçÿö·¿:uª   22r̃¼yưúơ«¡6ƒ¾}û̃¿ÿôéÓ†=Û´ióÿ÷ÙÙÙ~~~Ï>û́âÅ‹ƯË¿}ÖpGÍâ:ÙúQ:]ºđLÙÙ¿%LóyF–J¦¬xâ˜É”Û[·–ùœ9FnÂÄq÷îƯcÆŒiÚ´éĉu:Ư7ß|Ó½{÷o¾ùæÙgŸ++«Q£FDtèĐ¡¦M›†‡‡‹9‘^¯¿}ûvLLLBBBLLL­gvHOO8p §§ç€ˆèÛo¿7n\£F&Nœhgg·eË–~øÁpưû÷>Ü××wüøñvvvß}÷ƯÀ·lÙ2a„*k«ÁÖ­[7uêÔ6mÚüøăëׯ/..₫üóÏÅœ$¦©óÁÖ¤¤¤đAMˆÿ×ĂĂ² ¬¹Ÿ†“¿öµ×ñơׯÚΓívUăYư³å'—à× /…Ç/Ub₫+amÓ”¾Xæä[32jƯ¿†_¶D<ÿ[ƒ ÑÑ£G«|µ°°0  U«Vwï̃¶Ü½{×ßß?00°°°đÆDôöÛo /uèĐ¡C‡Dôí·ßêơúû÷ïÛÙÙM™2¥æSW6kÖ,1g×ëơ­Zµ"¢… –––êơú‚‚__ß7nûgddøùùѶmÛ ƒ‚‚"""̣óó…W zê©ÀÀÀ’’’ʵ [FŒ!”ûôénØNDß|óđcYYY‡7o.Ä\óYD²àwư[>•›«đ Ó̉Œeë[Ù”Ÿ‘Gªec Ë*}Uê(im·h³'́`]‹£F%$$¤¦¦Î™3ÇÛÛ[Øâíí=gΜ”””³gÏ6kÖ¬cÇ$¢́́́óçÏGGG»ºº>|˜ˆ9RVV6dÈO1a„·ËÍ5«{÷î«W¯~î¹çJJJj>»°Å××÷ư÷ß·³³¢MKK›;wn³fÍ ¯Îơx©ÈÓ§O'''Ï›7ÏÅÅEØâää4sæ̀”””„̣đlm5 =úñ 6N‘——'̣, -<ª±öï7–ë×·¶¶fq¼øx'WüÏî^¦\¿¬̀ªôz¥ƒ—Drr2™,9ѱcGá¥N: |ø·ß~kÙ²eË–-ûöí;₫üû÷ï:t¨GDäăă³eËC O=ơT '}ă7–,Y×·oßÏND 40¼$$&ûRºzơêÑ’%K:°Cúˆˆ(44´rm5s®f, ˜³€´8h¸/èr`Ó;ëGU³8Nj®# ®¤DWb(o¥­i¢r`CËÆ¤̣€»   ":wî\ï̃½ …AÓ!!!DÔ½{wƒ8q¢W¯^DÔ§OŸ²²²ÿ₫÷¿§OŸ₫ôÓO…CÜÜÜưƯNH œœj=» ¡Q3>>¾OŸ>†gΜa¯ÅƯƯ}àÀ†W/^¼xîÜ9ñù¢È;&÷Y€…>ZóÊ+¼Î¬ơvÁ*I2¤zRî$Cù!);û@Y’Ñá~†¬ÈÈÈ–-[®X±";;[Ørï̃½åË—ûûû €ûơë·wï̃„„!q|̣É'ƯƯƯÿ₫÷¿‹éàX¥uëÖ ơÔzöÊÑ._¾üæÍÇí̃wï̃]U>RxxxHHȲeËî—¯ •››;xđàèèèúÖ÷t)§̀Y€…G­a{;G•ĐÈçî]̃×.IÇ–%- ei‡ƯÔÍæ¤¹#”¡èÔAëׯßSqùN;;»E‹999­X±büøñ‘‘‘ăÆÓëơÛ·oÏÈÈØ¹s§“ÓăwwđàÁÂểBâhooß³gϽ{÷¶hÑ¢]»vfº°°0>>>..®}ûö“'O®W¯^­gg9::.]ºtܸqăÇwttܾ}ûỰ_+W®|öÙgĂÂÂÆW\\üư÷ß§§§oÛ¶Mµ•9 °8h »xL|¼’‰£ä¼½)3Óúj̀öưa(K8‰£ ^áÑÈ’Ÿ-è¿åå"¢z^ ̀ú*Ôí믿6Ùâàà°hÑ""5jT\\ÜG}´qăF"ˆˆØ¹s§a n"&qlܸ±áñqß¾}÷îƯ+²¹‘=µ]@@À›o¾ùÉ'Ÿk=»‰‘#GÚ¼ysvv¶§§ç–-[Æ+¼:hĐ cÇ}đÁ[¶l),, ûüóÏk²Ñ\Êœ tz=S±¤¤$̃QØ”ÔÔÔ€€̃Q¨‰¡ƒá̀™´zµ¹G[|? §uv¦G$¸Aƒ(6öqYÉ_Eóh̃RZ*”ă)̃ú%SSS…²=Ù—P‰uơ™ƒí¢)É=ü/Ñđ̣̣oDOYS—…—2…è}ŸRü²U•ŒŒŒFUÙ6©~|–ếÇ}´ŒS¯ĂæÍ¥©ÇúÉ -ăHƵ́$\¨ZPªühdi±o‚OƯÙÇă¼ïXÀÏÏO£Y#˜‰#€–qJ–¦ö©ûo¿)¿̉Ư•!Ơ¯svp̀ïÊ…Ï~”Ç)wZ0G-+,T́TW®ËRµúøË.(v)²tC´'̃=ñ嘋çœráÛĐ´B¶ ‰#ˆÂ6nFJô‡½Gªë—[&I?$gY2”äx\øl#09 G j̉Dùs²ë¾Ê1’[ëëʲ£³‹H©u–ÿ¨¦Ùâ$¡6‰#€IƠâg¹[¹t×t!©ªbGåf䱡绘;@8hÛÇP©il’·₫²2e®£Wr•ª*>‰ặ H“_@58h›8*ƠRg“S¾>Ob×ó­•/ùÊÊ%ị̂TËơ©7ïAFP$Ä>ª^¹’w4VñS|eäËtÙP–|GÁ6Ú¦ĐÅÈ” ²wå¦B—b ñ¾6‰#€ùûË®’=lÉS̉Ù™ĂĂ¿Â$’¯7(( ….F¦Û3å+×b!$j†Ä@ăT"íÈv\ef¥dŸ#·£vJœRsº1eE>_)LYăƒ|lGS|i× dkSæRlsÙÉF‡Q#¦¬HâȾ%hqP3$§È •s̀ "̣%Ê4Ê7rå zB‰ ¨’|Ít¤Ù́[¡Ä ¹Y¸p¡®¢&Môïßÿ»ï¾“đ,ñññ:nûöí0räH¡Ü³gψÛ~CÀl¼ ˆ5–½¼¤¬Ù×8Y¡Äñ=©æH¼F×”¸†Ệd«ù²ơUÔ.Öú*4e„ Í›7'¢²²²›7oîƯ»wÔ¨Q111¯¿₫:ïĐ*°····Ç0w¨‰#€6µhAééíúucù/‘ë,6°x̀NÚ)”s)׃<ä=_SËûâ­sƯú*4eÆŒƯ»w7ü˜––¶páBµ%‡ä¾4ª´©¸Xɳ)Ó˜¨àÊÈDÔ€H[¡t†̣ô…́`CËÆdñ€/ÿ.]ºÜ¼yóáǼc©]YYYii)ï(€´8hÓôéô·¿=.³³¬gă² Ü$Ÿ‹çUzơ]zW(—’üYÙÚö×R6 =¤–É:Âñ́=©§¹‡dee…††º–Ï®uâĉ $$$ØÙÙ…‡‡/X° sù#FŒx₫ùç_yå":{ö,ÅÅÅ}üñÇñññM›6:tè¨Q£ØÊÏŸ?ÿ·¿ưíÔ©S‘‘‘óæÍëׯ_ µôíÛ÷₫ưû§OŸ6́Ù¦M›ÿû¿ÿËÎÎöóó{öÙg/^́îî^ëYÀ– qĐ&“A%̀c/9(3QÂ$ŸưÛ‹ŒƯ?•»-k6Å'q¬/Q=½¨‡èËéÍ5½^ûö혘˜„„„˜˜aăîƯ»ÇŒÓ´iÓ‰'êtºo¾ù¦{÷îß|óͳÏ>+́>pà@OOÏÑ·ß~;nܸFMœ8ÑÎÎnË–-?üđƒáû÷ï>|¸¯¯ïøñăí́́¾ûî»nÙ²e„ UÖVƒ¬[·nêÔ©mÚ´ùñÇׯ__\\üù矋9 Ø=H-88˜w¶&%%…wêsó¦èñW­2ëP î§áTrüÎ ”±rgơg —²M¿Mªj ·ÔPy°^₫ßz=•ÿWr˘ÊïÊ~)†Sơ,ß"æSZĂ/[ªđ™Uú¿5ļ`Á‚*ÿÏ5KØ¡°°0  U«Vwï>¾ïwï̃ơ÷÷ ,,,Ôëơ­Zµ"¢… –––êơú‚‚__ß7nûgddøùùѶmÛ ƒ‚‚"""̣óó…W zê©ÀÀÀ’’’ʵ [FŒ!”ûôénØNDß|óđcYYY‡7o.Ä\óYÔÏ‚?Üuöo=ú8hSӦƲ‚ƒJ4‘¾Niç÷©Ù*Ze<¯œ3^Q`Å•\9+g–4̃WS¬ &¼]nÖ¬YƯ»w_½zơsÏ=WRR’:gÎoooagooï9s椤¤#ûúú¾ÿ₫ûvvvD”––6wîÜfÍ^5k–P>}útrṛ¼yó\\Oơéää4sæ̀”””„̣ßlm5 =z´PÖétyyy"Ï6ª´OÁˆl¾*•ÈHÚùx,2åæ’‡œc‘]˜™²[SkϤulâO$ÛPzªøH\ª¹îĐ#¶É¨j"zçw–,Y2`À" c_íØ±#%''wêÔ‰ˆBBB ỹ•+Wˆ(ªâ×/Ăä‹—/_&¢ç{î¹ç3‰áúơë•k«Ypp0û£á(1g›Ä@ûΟ—µzvña䯟ư“÷ë¯4x°Œ×b›ËÆ4¡N7¦ü»¼á³ß{ÆHTgcj,oĐR{ă7–,Y×·o_"̉ét́«ÂdÅås)4hĐÀđ’h́oHéêƠ«GDK–,éĐ¡ƒÉCCC+×V3çjá‰9 Ø $P ¶ASÇÊÆ̣Å‹̣&̣-#p"§BR|$‘ÜÏúåưbRá-©³Y†:99ѹsçz÷îmx511‘ˆBBB*غuk"ïÓ§aă™3g„‚P›»»ûÀ ¯^¼xñܹsâóÅZ)sP ôq€Z°‰c¤ }Đ`ê“û©{ÉZÿX+ïTIîÄ1Ũêm±ØlëÖ­#¢'Ÿ|222²eË–+V¬ÈÎÎ^ºwị̈̃åËưưư«\ư/22200pụ̀å7õ¶Ü½{wƠªÇ}yĂĂĂCBB–-[vÿ₫}aKnnîàÁƒ£££ë×—j»Bg•@‹#€fµnMW¯*p¶w»¿¿rç̉¢(ÚB[„̣]º+ăSvº=GÉÁ' ­Åúơë÷́Ù#” ăăăăââÚ·o?ỵäzơê­X±büøñ‘‘‘ăÆÓëơÛ·oÏÈÈØ¹s§““S媗.]:nܸˆˆˆñăÇ;::nß¾ưîƯ»Â«+W®|öÙgĂÂÂÆW\\üư÷ß§§§oÛ¶Mµ•9 ¨GÍŒT&qTröï¤$ëëŇ|䨖©Oñƒh\À¾)Oå[g[µ¾₫úkCÙÎÎ. àÍ7ßüä“O„΂£F‹‹ûè£6nÜHD;wî4L^ÙÈ‘#<øÑGm̃¼9;;ÛÓÓsË–-cÇ>nü4hбcÇ>øàƒ-[¶†……}₫ùçµNÙh.eÎj ÓëÅÎS "…„„$)öׯnHMM à…úüóŸôîăuJè₫}̣ôyœ¹÷“ív/Ó/ NñøDå«6§æé$Ùb߆[úº•+YD‹æÓ|¹®¤ÓơP¦;δkÊû¦Î#æS_¶•edd4jԨʶI¨Ÿ¥:ûñCGÍbûÚä€Rc—|‰^’ă®äj(Ë;ÇƠú*j£xCfC¥Ohƒüüü5‚¬8h;ÂyÅ ̃ÑX¥M%ÎÂÎÅ#ë́ß‚èë+©ábdÇ„R䋉Æ¹Ô H4«!Ó@ăæfy=¢µh!WÍáá „_¡ Pı„Jd¬½Xîđ‰Ø)ù2ä?]Y6@Ó8ØEUË1 Kc¹|<¨ôØÄ±É–ÛŒ§˜²lŸ/P' q° ÉÉ2U\P`,Ë·¨4[³|9°m.ă+[ÍLY¶7ņF‡Ô H &r/S¹f­'á®ÀYŒ”y¾+Ûcßí',®”‚Äjk,7o.×YØƠ%´>@\̃“:8>Päªdëăx@‘đ@*H´,Tö¥}¯_7–;vTâl)q¼A7d9Û₫÷ï ¶̀Ë€Ä8hÛQʧqlª*“–ÔR¾ÊÈ8‹̃:Z'Ë9ØÄQăC‘Bâ e³fËwîÈq†óç­¯Cud}<™&ʘH‡Íæeë?@DÔÙú*À¦ qĐ2,#Z>åÊ‘r6Ó9ƒ¡,×â1½Ơ snªÜ©ÀrH´Œœ í¹fä›$R đ²1¹Ç3Ê„_ñ9x¼§Â\<€Ä@Ëܺµ¼—"ß\?‚å´Üx.¥²”[tK™É…½O2|1a»èj¼¯¦X .Ôét¿₫úkå—  ÓéJK¯¨̃³gψˆ1uŒ;ÖÜXM4éß¿ÿwß}'á•ÆÇÇëtºíÛ·[pl@@ÀÈ‘#ͽ  ë«U9qôñ‘7|¶Åñúuj)ơđ72®ÊØ„È{16ƒư{O4Fâê™rc̃ת6öööööọ̈Ơ?a„æÍ›QYYÙÍ›7÷îƯ;jÔ¨˜˜˜×_÷¥+zÀ\Hl… £‘srŒåáĂå Ÿmqfä‘ûg]É%ỶW©ñ÷Y^}ûöeûö?~|Đ A^^^;vüÛß₫£ÓéÎ=kØá×_Ü××÷•W^ÉÏÏÿ́³ÏêƠ«Ç8tèĐÉ“'÷ïß÷îƯ111eeeÿú׿ÄT®×ëoß¾“#lܽ{÷˜1c6m:qâDN÷Í7ßtï̃ư›o¾yöÙg…̉ÓÓèéé9`À"úöÛoÇרQ£‰'ÚÙÙmÙ²å‡~0œbÿ₫ưBüăÇ·³³ûî»ï¸eË– &TY[ 8°nƯº©S§¶iÓæÇ\¿~}qqñçŸ.æ, =H-88˜w¶&%%…w*öê«z¢ÇÿGüư 2·n«Î%Çé uéƒ$¯Üä–ÖŸ6œn»~»Ä'[¡×SùïH£LƠgN'5ª¾n1Ÿ̉~Ù×ÿVoÁ‚5ÿQ.))ö́Ó§Oxx¸^¯/-- ̀ÊÊ^ºxñ¢89sF¯×·jƠˆvï̃-¼ZRR̉¶m[sc˜5k–°Caaa@@@«V­î̃½+l¹{÷®¿¿```aa¡áŒ .,--Ơëơ₫₫₫¾¾¾7nÜöÏÈÈđóó#¢mÛ¶EDDäçç ¯<ơÔSÂÅÔ&l1b„É}0́ùÍ7ß?–••uèĐ¡yóæB̀5ŸẠ̊Ï’t‡Ø´8h\Tư¿ÿ÷¸œN-ZHXwr2ï«Ó¦p 7”(a“²öƠLY¡ÈQDGä?KcÑ̀Ú±cÇơª†¸>}úâÅ‹«W¯ọ̣̈¶´mÛv̀˜1ÿùÏ û/¿foo¾ÿ~ñ1ÅÇǯ^½úîƯ»›6mJHHHMM]¹r¥···°ƒ··÷œ9s¢££Ï=Û©S'"̣ơơ}ÿư÷í́́ˆ(!!!--mÉ’%Í5ö÷ơơ5kÖ{ï½'ÄŸœœüŸÿüÇÅÅExƠÉÉiæ̀™Ï=÷\BBBåÚj8zôh¡¬Óé"""„¦M1gI qĐ8“Åc$MV¯Ú%™lÊ6”§̉T%/Jú9À• _¡ÄÑ_ÙkâÎdD³à̀™3U&W®\!¢;²Û·oÏ₫̀₫h˜¿æÚµk­™)X¿úê«_|±º̃yç%K– 0ÀÁÁˆLº $'' IXHHˆ!Ï"Œª8€ÎĐ1ṇ̃åËDôÜsÏ=Wi®„ëׯW®­f&Wj8J̀Y@H4ưe½|9Á; ËEF̉1æ|!NËÆ~&©»çË0ä¼&l7ʽDCd9‰ôoÉ&™nEU}2™ÚĐÙ¹êï>>>[¶l1üøÔSOƠp¢7̃xcÉ’%qqq}ûö%"NWùŒÅÅç™jĐ á%!Ñ4Ùß̉ OƠ—,Ỷ¡C“3†††V®­fƠ]©˜³€$8hû÷ĂƯ]¦“(ó‹7,L®Ä‘möS8qÔ“^ÉÓImçʶ¸–*°£Ă¥äó‚L·ƒƒ6mÚÑ… z÷îmØxႨé¥ÜÜÜ₫y‘'RC''§   ":wî{ÆÄÄD" ©| Đ¨ß§OĂÆ3gΡ6ww÷^½xñâ¹sçÄ狵Ræ,@˜À¦È6YîI]ºËW¯JY3›8z’§c3ØÇ•’~¾Ø¹x°Pu ÂĂĂưưưW­Z•››+l¹zơê;$?ѺuëˆèÉ'ŸŒŒŒlÙ²å+²³W¸wị̈̃åËưưư«\ư/22200pụ̀å7õ¶Ü½{wƠªU†øCBB–-[vÿ₫}aKnnîàÁƒ£££ë³‹¦Z}—8 ZlÊíÛVv籬LâÈ%>^ÊƠ±•\6FàFny”'ï9‚­¯ÂL’̃E6 EâX''§+VŒ;6**j́ر=Ú¼ysTTÔ¯¿₫jbơë×ïÙ³G(ÆÇÇÇÅŵoß~̣äÉơêƠ[±bÅøñă###ǧ×ë·oß‘‘±sçN'§*&·wtt\ºté¸qă"""Æïèè¸}ûö»wï ¯:88¬\¹̣ÙgŸ 7n\qqñ÷ߟ¾mÛ6 ×Tæ,@H :ló¥Ü³ Ø̃ÿññ4~¼d5_%I0Eˆ¤È8“÷Êg[’¶8²•a¡ê9rß¾} ,X»vm»víV¬XqóæÍ_ưµ¡Ó«~ươ׆²]@@À›o¾ùÉ'ŸG÷ÑGmܸ‘ˆ"""vîÜÙ¹sç"û́É“'y_ @mdH•™‹G¾s-£e†2—Ä1Ỵ̈•?©”Ø{&ÑTWª©TÎöǤ¤¤ 6øøøüôÓO6lˆÏöÇ;v”••Í™3§I“&–÷̃{ÏÓÓóÇ,++«̣„„"zñÅ 3<ơÔSmÛ¶ưă?îƯ»Çû‚j”“#I5́Ș#” ŸMă$?[ùec¨‘ŒµwàrMDÇ¥©†Í?Ÿát)`ÛOOû`ZZj­ûKêñBs§NéSSÿ®>Q7Ç2Ũ̉®-èqÚóçvEí¬|Ø®]»:dee=zôûï¿ïÚµ«Èå̉ëæú•²ÂZƠµè̃ÊG1÷ªÖ}.^4cg™è¤=uEÉw-•kDÆ¿4·ƯzÆú¾|‹¾Ïø’’‹ºùÛ;%¿‡ƠUˆơ ¤?o•ÿ¬Wn!ª#lN>w:X;tâÎ̃W$ƒ*Q̣tdü]!ÍơLY᥀£ˆö({FP%ïăèàààééY¹e177—ˆ ă¬YwîÜùå—_Z·nmȉÈÏÏoúôéÅÅÅß}÷ïk¨ ;ÿ¡Æç÷ö–²¶ëd₫½Á뢤™œă7}¶K¥DƯaü® ,`ă‰#ùøødee ™¢Đ•ÁÇǧ̣₫YYYDÔªU+“íBCăƯ»wy_@U‚ƒå•+%¬ØYñyĂĂ¥¬Íظ̀₫-8A'$¨…c¯?öÎm”²bK@rµpáBN÷믿V~iÀ€:®´´Tø±gÏbê ;v,ï+ƒºÂöÇ~ưú•––9rİE¯×>|¸aÆU₫›lƠª•½½}rr²^¯g· ưZky`¨+*u굆’ËÆ¤ÄÍ&\ª¶áL¹ĐÚÊ2˜2–©½½½½½=ï(LÙ~â8v́X;;»5kÖư‰hÆ ™™™£Gvtt¶<|ø055UÄçâẩ«W¯´´´Ơ«WfONN^·n]½zơúöíËû‚j#é46ÊÏÅÓ©“”—Âv.´³™ßxÊ_G ¦lơSw¶$Ơ9tèĐ©S§xG`ÊÆÇ‘ŸŸß¼yó/^<|øđ={¦¥¥;v¬]»vS§§X;|øptttPPĐ={ˆè“O>3f̀ºuëöîƯ••_VVö₫ûï?ñÄ–‡ Œkgi¹Â,$¬|âÈ1>̃Ú&Oi:ZÊü2*´¯I„oË©ƠÙ<û– @[låûw¦L™²té̉€€€½{÷̃»wỏ¤I›6mª<¹£··÷̃½{_ưuWW×C‡Ư¸q£wï̃;v́x₫ùçy_ €ØÑ5Ê?ªf;[?Îçñ.×Ăq¾Ítg­­€Í<ëq½5ëÛ·/ÛŸêøñăƒ ̣̣̣êØ±ăß₫ö·˜˜Nwö¬ñÍøơ×_́ííƯ¬Y³7̃xăÁƒ¼¯l“í·8 † 6lذê^2dÈ!CØ-ơëן;wîܹsy Z“&RM¢³oŸ±lơÄ>VÑúâ1Qµ§|›b*v$GËëb)ßâZTá(ï4gß¾}Ç÷ơơ}å•Ẉóó?û́³zơ*¤Ü‰‰‰C‡mỐèèøôÓOÏ5 #jÂ>™*+#;Ë;¢¨g"Ẹ̀ñià2ùÊ+iå6Úfy]lă+—GƠ¤́ê¶l„ Í›77Ù¸cÇëׯW̃ùôéÓ/^\½zµ5QÛ¶mÇŒóŸÿüǰOpp°5‘½½}xxø₫ưûy_%Ø&u%óçÏßµk—ÉÆâââØØØưû÷øá‡&Là#€ZÍK†ÉáèÉ'-®©â´§6‚Ë\úè£ÀÀÀÎ;ó@•ØÑÈÖ%Ü5kF₫i}5”LɆ2ÇÙ¿Öïæ̃Ư3’I¹KP¥|oÉ_”¸# )**ª¼Ñ$5tV~¦~¨«Ô’8mذA(¼ơÖ[=zôpqq)((øí·ß–,Y’’’RZZºeË$Uó÷7–%zØ\Ír’&qTɲ1‚³VFæ¾j{ÿˆzKP¥|À¶Ô¿¯M›6DtáÂ…̃½7ưÂ… ¼ă‚:J-ÓñܹsG˜; ~ưú›6m0`€‹‹ 9;;?ưôÓ›6mrss#¢xơô½P3‰₫¥(?OåóZ±NÉrZn(w ®ăĂm›8Zñù«¦J¨Nxx¸¿¿ÿªU« kç^½zuǼă‚:J-‰cóæÍ…‰ÛµkפI“W7nÜ¡C"̉G¨…DÓØ4ǹ'|“§îs—äyªÚđù°S¶"qd§ŒjÉéR´ÅÉÉiÅ×®]‹?~ttt×®]£¢¢ˆHhaP’ZG"êÙ³'¥¤¤TîÏQ\\|íÚ5"ÂsjQôµÎR­s̀´/#G̣ ŸM¶¼¾ËÆ(@â;Y_…ƠNX~(û–ØRODY9rß¾}¾¾¾k×®=~üø+„1Ô 6äÔ9jéăHDï½÷̃Ù³g¯_¿>kÖ¬?üĐ××WØ~çÎ?₫øÎ;~~~o¾ù&ï0lßecåÿú‰ˆ’’,¯'‡rø\£ˆ¬¯¤5<ß½jù¡Üùđơá‡~øá‡U¾d2Î/¿ü"‹‹Û´ig|Î?}úôúơë ‰cjjªIU›7oæ}¡`³T”8~øá‡~~~ׯ_ÿå—_ââ₃ƒ½½½³²²’““‹‹‹‰¨Y³fü±ÉQk×®å8€j´hAééVÖÁ>®8ÅZ_<æMzs>ÍÊy”çFơ·a³g5$Và߬5öööưû÷7¤’999ß}÷ƯĐ¡CTôGê}æ8`(—––^ºtÉd‡“'Ọ@Ư"#­OƠ6-1Q‚J<ȃWü&‹Çô¶l42›=sj–Jï4ÇÎÎnæ̀™üñ˜1cF}ëÖ­ÿûßyyyX¸PQG°Û7° À²:´̃ÂW%sñ°[̃ç’=®½…uH  ¿S×m ,X½zơ•+W^}ơƠ… 6jÔè—_~éÚƠ,,¥¢ÇéÓ§ó@ăØ>‰ññTii 1,M8UMú†¢y“·¡œ`q¿/x…_QÑeÉ*ă»œ´¶3gÎä€ÇÙ³gó@ăL¦±±(qT‰À@JI±ª†sd₫&©b\å-̉­Ùm•H¢¯Ë˙ĤĖèÁûjÀxT `C65–W­²²²Jª**<ÜÚØæ=îËÆ.[Ü^§’ƠĂÙ»ø¹µ•i¼¯&@ŹÅqôèÑDÔ¤I“ơë× åZ™¬g U³zf`^sñ¢¢èÛo—ssÉĂüÁ-ló^0©`|¸ °ú#Á&ΪÈåÀLœÇóçÏQ³fÍ e†Eÿ Ø‰Ă£¸₫aïÄLs@}ú˜]ƒfÿ–§ƠĂcâ±èî²!qĐ"<ª#5̀₫-`ÓVËfROâØFÂÑÈêɶ,çĂ¾%¡¼¯,À¹ÅqáÂ…Däêêj(Ǵ\<|[½¼ŒeËÇB*äyŒH´¼w£ ơ$©–d‹s=Ô-œÇ &TY =ñ]»fñѱ±Æ²¿?ïk)§ơ©%£(ê?ô¡œEY¨‘ydz Ck|²¤ă¼+©h:@T”5‰cZïø«bÍrƠDäC>|ă7™ü/ôó¿È”5>‘ŸäyoHHïk¨[T—8_»v---­´´´Ê† Â;FËË3–ÓÓ©E ³ÖzÛ^•¸ÏÅBÆäf9-7;qdŸÔñ½"¢G¼c(—dåWº$555 €w` T”8êơú7.[¶¬¨¨¦58Ô$:öî}\NN67qdGUkZ)¿yF̣1Đ—| e÷ #“ÅQË ""Hô¥Ơ4ä}`ª₫öÛoÿñÔœ5@-LѲ¶m-?V…³ ,ë­ª·‘MÂÿ´¼½%`µ8nÚ´ÉP¶··÷ññÑé°–)€™2M9–F&"2·¥RQQt钅Dzù™ªÇT F#«et8ÙøˆYX –Đ(%iiiDdoo¿xñâ~ưúƠ¯_ŸwDgEâÈwGC [¶<.ß½K›q́JZi(· dÁ6ƒư`Ä 3ăĐLYE¹<˜CEª‰($$dذaÈ$œlÖî̀W³²4™XóÔƯ•\y‡/¾ËÆê1e3ß”Lù ̃×–QQâØ¹sg"zđàƠ5€%ØÊ#xGS±ƠóĐ!óMPWÇ@ §p jéÆû2Lœ0ow¬7`T”8¾ñÆééélgGPŒz–¸¹Ëf6ªN>å[xdSVÁ›RÁmóvWW.áÜÇñÍ7ßdôööNIIY´hѶmÛüưưí́ªÈk×®]Ë7fµ ¥‹-8mqlÚ”÷UT›Í¡9ÓiºP¾A7SsÑWΔUĐñÔ€ˆ{âxàÀ*·_»ví«_ÔiQQÖ'jóÇØ’Ẓ¨̉â1f$l3JZí‰J-9®˜wà`==ªi°™ïÜÜùó¼#—JæâaĂ0¯ÿ%›Í«"VM₫ }:ï;`sØA%ññ4x0–I™†rôË#[Âùek̃à_ó½²(³‡Å˜@‹€vqNgÏÍûØ“il´œ8†‡Ó™3fu™.Ê3i&ï‹0e^âhé ±]-SˆÍ®@ĂŸH€:_ül; êºuTĐº5ïK(nÉQª]6Fp‹nñÁ:́ưù*aÊäP§©.qLIIÙ²eKff&Ư»wï½÷̃ëׯßÈ‘#×­[‡e¬̀æ`ÉS5,#`OoÜ{Û‰° 5á}6'‚);=H…ƒ|À*Zrˆ₫óŸÿ|̣É'¥¥¥]ºtñöö9sæ©S§„—.^¼øûï¿oÚ´ X˜áúu‘;æäËj˜ÄQĐ©“±œ@ÍÅE6ïY°RɱØÅê\7Qô8V NSQ‹ăåË—?úè£̉̉ÇÓ<$&&²FÁ‰'víÚÅ;LÛÄÎÅ£G“q>"]  ¼¯êZ¬̀—T“ÍW úMa3LuæÀ †Ç/¾øB¯×Q÷îƯ6lxđàAa{Ç?úè#'''"úöÛoy‡ `›Ô¶lŒÀ‘yjîrƠjcIoËGW£,±;ª±̀§¢Äñ̉¥KDöå—_z{{ÇÅÅ Û£££ÇÿôÓOQ²Ö×PFD„¹Ǵßo,7lÈ;₫ª¨y~r1ØÄñ‰[ààS¶hÎmơ8Í;„Ç7nQlj(33óâÅ‹DäááÑ¥K"jÖ¬åç«pj ơ1¿Í05•ẁµ¹yÓ́C‚(ˆwÔF&‹Çˆ:æSÆûXơ­¯4IE‰£››eddÑáÇ…ÇÖ½{÷¶··'¢œœ"̣̣̣â&€<|h,?.æ›lÍ·¶[¡¤Â)ÜP^A+Dæ—>¼/€%z05Ø%-Z´ ¢_ưuưúơŸ₫¹°±_¿~Dtưúơ_~ù…ˆ||Tơ»@­æ̀1–oi{Ö@s'ºO÷ eNâ(p#7Qû©öéüK–êÏ;v°†ÇáÇQAAÁÊ•+SSS‰¨^½z½zơÊÎÎ4h0³cÏ=y‡  ́£j÷ 4÷©»Êgÿˆ]®ú"ï@«Ẵ×Ëæª¢F`0ŸDZcÇ Ù-®®®¥¥¥Â=ÎÎÎ'Nä&€ØÛËf&¡¡¼ƒ¯ÈܹØÄQUªY÷èï¬Ă&">_ùƠ £¢ À¾₫úëơë×;v¬°°°G³fÍ2¼êíí½víÚ&M°€™̀œÆF=sñT'%…k[y-­5”P̃áÛ(öÛE<Ñóµ́₫o¦¬²Ï˜GE‰#Ơ«Woö́Ù³gÏf7zxx|ÿư÷!!!vv*jĐ }ïÜ1–Ơöí̀ä©{­‰c=ªÇ;äj¹‘[åYr¤ïĐk â‹ »`Ññ€5T”8®ZµJ(Œ5J(#¨W¯^Û¶myG`ËØ§ÙÏ>Ë;ÂĂå_~¡±ckÙÿ*]årµ")2â,9²7ïĐkpªö]ØÜ²ïxÀ*JwíÚuûöm"êÓ§›8€ÜÔ¹lLeWƠ›b^s#Û RÅo =¬}mφ₫=Z(\¿~w,Ú×µ«ø}ÙÇú*ÛYăÄi.Í5”/Ö:d½X•̣Kµ£ĂÀ\*Jg̀˜1räH"‰‰¹Ăv¹ ˜Ór¨•„́9c‘ÛS{̃ñ2oñöù® [U¹.%ÈMEª…1ÔM›6½zơê_₫̣—¶mÛ6lØP§Ó™́¶víZKj¨kØÄñêUjƯº†}m²•_…“8¶%cwíJx^¨io6±ôàzeQDxÇSQâxà€ñ—Đ£G̀œC*`ç?Œ¯9qT977Ê×9đ3” ©wà5©½Åñ{̃!Ö,̉’ÄQ½#̃@=ª)……Ëÿ&₫©{:¥Ê3hïÀkRûâ1Å¢êá†}SÎ=hï¨ÀJ*jqœ>}:ïlÔÿû´x±˜#"x‡Z•°0:|XÔX6FđP̀hd5cÇUD_V»cv5€©(q4™÷$£×‹ÜQsñtêd,_¸@íÚU»'ÛŒçB.¼·iO0åï4ûH^•Ÿ/0ƒJU'%%ÅÆÆnÛ¶-//¯¤¤$''‡wDZ–]Ă‹éÆ§»Hk^{ÇÃQ#³éÀ;èZƠøÔƯ†¦ơ%»víêÛ·ïđáĂgÍơá‡̃»w///¯OŸ>«W¯Ö‹n5ñØT,R•ØCBª¶2¶£:Ỵ]•Ù|5¾)lVéÉ;R°’ºÇO?ưt₫üù&Ûóóó×®]»páB̃h»»˜½´²lLåhµH́$A7™²*³ù jÇ£öF`0‡Ç .|ơƠWBÙ̃̃̃°Ư0•ăÖ­[O<É;Lí×~øóÏÆ2ó/O¥´2WyuØÄñ4®v?vEkÏasw !%111z½̃ÎÎîƒ>ˆg₫8xzz®^½ÚÙÙ™ˆ6nÜÈ;Lí×~˜’Â;Ns_·ªÙ4JE+Ǽ₫úë{÷îÍ̀̀Œ6N™2Űƒ‡‡–%°ˆilÔ<BƠyäÚ`(Û©é[±UÔ|Í™r5‰c SVñç ÄRÑï$ooïeË–yyyUùª‡‡ÇâÅ‹ưüüx‡  MùùUn¾zƠXnªâA²lâX]ă©t¼ĂÅ̀ù=ö„ụ̂TÍöoLG̃1€ơT”8Q×®]÷ïß?mÚ´víÚƠ¯_Ÿˆ\]]CCC_}ơƠŸ₫ùé§Ÿæ €­a“°aĂxGS½V­ŒåÇ«̃çƯá¦(æ=F×ʯ½j¦¤d“|7̃1€ơTô¨ZàææMDyyynnøU`j\«“}‚Æ;Zq®\áuĐC¹˜ÉÑt?˜²újÖDăóµ€)uµ8”––^¿~ưÂ… ׯ_/--å€f PóëZ\ˆ¥Ö˜Ô;ó!Ñ\k¼–*3+ö±¯Æ;₫É;–êZ¯^½ºbÅÇ?^ưÔÑÑñé§Ÿ®nG¨VTíÛWĂëZ\ú¹¬¶y§U>^%t¥®¦{ÄWØ[Ơü‰̉xÇ RW‹ă¶mÛ†~àÀCÖHDÅÅű±±C‡Ưµkï´†~\U’˜Í;B9.ZƯÏw›Q3C¹êG 5‹ÎkU¿ :ˆ¢¢ÄñäÉ“ü1û`ÚƯƯƯP.--ưđĂ´Ø<À‘É46ZÖ¬YM¯î§ư†²†æG¬:qÜov=ܰ)úĂvtæ)HBE‰ă–-[JJJˆÈßßơêƠgΜ9uêÔÙ³g×®]+<¤...̃´i“e•ïܹśرƯ»wŸ?~¶ˆf–sçÎ͘1£oß¾:u4ỉñăÇyß!ó±>ˆ\\\6nÜ8pà@"rvvîß¿ÿæÍ›]]]‰èÔ©SÔ¼bÅ÷ßÿÚµk:urssÛµk×k¯½öèÑ£9xđàĉ<ؤI“ˆˆˆÓ§OO<ùàÁƒ¼o€6o®áE5Ï₫-èÈLXyåm¶é®VEV û±Ynúbj5;€v©(qtvv&¢öíÛûúú¼Ô¸qă;‘½½Ùưd’’’6lØàăăóÓO?mذ!66ṿäɉ‰‰K—.­îœœœwß}×ÁÁaóæÍÛ·oß°aĂÖ­[ëƠ«÷Á”ƠÚ-@µjü²¤₫ısgcùÂÓWÄ,–¬9ê¾Û˜)W+ Ú—j…ởÂư´̉ Aƒx‡ ª[9FZÂĐiaD6KX;'§g[< ¢«W¯̃½{wñâÅ}úô)((øæ›oÖ®];{ö́={öˆiwLJJªu0 Ö ²\ÏT₫+À×—œ©ü~¦1k~hîWpêĂåZ̀:©;g?ºé{“ͽ˜i…¨ÉëM”¿³•¯^ĂM°àMÑÜgRåp?­QùÏzå¢:‚sâ8}º¼Ó­5hĐ@§Óåçç›lÏËË£̣vGÂàn"úôÓOŸ~úi¡Â2Đnnn’guƯÈ‘•·Åkü{•‰cc̉Èøp"vîFă¨pv.t<­NơU€ú¨(E{饗®]»¶iÓ&9:;Ô]́ ’̣iMµ¾ÜsƠªl‹ Ơ8*œÍæ5Ô5&Œw =ª÷Ưw-Z´hÑ¢Ï>û¬I“&&3) „ñ+`“A%Dd3ßÎôd¼ MâÈ®:hlqÔh3p$ÑÙj_lÈ;:Ç+W®¬_¿^(çææÖ0•#˜‡mqLH -/YÛ¶-]ºTaË×ôµ¡̀&‘bLçe¢ˆ₫]^Î ̣«đ¢Î́ê@½Tô¨:&&Æ0o"H©!ÓèS©ocóæ¼Ă3Gd¥&Å|2.Fÿ½Æ;@K¤²£‘µ¨ÆÅc^åHHE-§N ]»v4h„Óñ€Ñ·ß̉ßÿÎnĐẾß‚°0úº¼…ñÊ ®°lL+jÅ;À:‰Íæ— «đàZSŸ/¨…G{{{"̣ôôüâ‹/T€M)*"¢f̃Cm%;Ë©©\a¡jÛÑ„wf©Ç”=ˆ*6;j¦Û)ˆ ¢GƠQQQDäë달@ńóêHMưa¯¼ê vÇÔ±úëäœÅâ‰*N+ÔwD !%³fÍjذá•+W>̀;ÇÎÅ£­GvÉ'á*4: †*OTVá5­Ê ̉́èp¨•Úö–.]Ú´iÓ́́́×^{­}ûö>>>UNdzvíZ̃‘hPh(]¼hø‰mqlÚ”wl–̉úæQơị̈ÑÈ”áÏŒFÖT3peg Z*Jccc åóçÏŸ?wD6$*Má₫ø£ÂödÏ;"ó°³NÆS¼ßa&qô圹́‰J?[^¨U€Œ˜̉öYY))¼ă‘ÁPÊ;ó˜.s…y­+ïà̀¿¨ TÔâ8}út̃!Ø.f̀™û₫Cô$QH…†²†ÖÔcF#¯§ơ&|È;"+T³4µfûA@ƠT”8Î=›w¶ëå—iÆŒÇe;m?j§3g—Ù!ƠKYä íÑDSËË©Då‹i¼¯&˜Réߤ¤¤ØØØmÛ¶ååå•””äääđ@ăê×7˜ÄO<Á;0óUXy›É¶4´PuẻŸ¼C°“´—&T¹lZ»víZ³fMFF†đc·nƯ<<<úöíụ̂Ë/Ïœ9³ÊqÖ`–zL⨭¹x 1ùåặÑü*O‰}µ7¢Ä†D‹ñ·e ~¾ &êJ?ưôÓÿûß•·ççç¯]»ö̃½{ ,à#€æƯüÓø¨A£‰£ÁwÎÛx‡c{²/eG# ZđË:+Be 7@UTô¨úÂ… _}ơ•P–Z·nƯẓäĨah^2ÊÍ›óÆ|́£êb»Ë+Rª¯ûóË:n鯲Æs`0¥¢Ä1&&F¯×ÛÙÙ}đÁñ̀ľ«W¯vvv&¢7̣@ó˜deđ`̃јÏÑ‘w̉1 èqyäbÜ:wXÖ‰oÏ;ÇK—.Ñ!C&Mäââ¾4pàÀ̃½{ÑåË—y‡  Yåÿ¬â™g ̣ªn˧|¡Ï<€×øóƯÓÖ×*¥¢Ä1++‹ˆª|5((ˆˆ233y‡  YÏ?/ü‚Ö“ª´¦Ö¼C°Älz< Ydó¦h°ă)Q}뫵SQâBDUöbÔëơ'Nœ ¢ÀÀ@̃ahVyßÀ+̀;éitGCÇ ->¼Ă²Œ&ß0Ç:ѱcÇfÍuôèQaczzz\\ÜŒ3„Ä144ÔSÔiZA]Çëà4¸o¼8§-Z5ª̉h|TAEÓñ¼₫úë{÷îÍ̀̀Œ6N™2Űƒ‡‡–%°œ %QQtü8Ñ«ÿϰ…]¾O‹ÚŸ×₫ˆ’JŸ¯b̃€äTÔâèíí½lÙ2//¯*_ơđđX¼x±ŸŸï04‹™åJ ƯüÇOƯíÊ [^¤yUçEå3=ñEÀö¨¨Å‘ˆºvíºÿ₫Ï?ÿüÈ‘#©©©ùùù®®®₫₫₫Ưºu{ươ×=<M,¯Ts‹ăưû÷Í=¤Aƒ|cĐ0GÇ„băví¶8Ú’(J¼ŸÈ₫¬iñjÆ9q̣́ø“’’’øÆ  aQQñÇŒØëcÆfˆ¤ÈÄøDögM»¨ÙW †ªU€Ä¢¢~£n¼ƒ39óÁrQƠ+®—ñgM÷qÄ –¶‰#@]y[«Ë’Ôdă‚åÚRÛ¤ăÏ5Ï©lZFUëtº'x"<<¼cÇîîî¼Ă°Q¶ôËç¶¡ˆecÔâ±hƒëZ€zG½^ơêƠ«W¯~ûí·­[·ŒŒ ˆˆhƠªïĐlÈØ±¼#LûăÏ——µ8%ñA"sÅÈû„¹5lçÄq×®]gËưñÇDTVVvåÊ•+W®lÛ¶ˆ4h.$‘;v¬Îü‰p¿ªé₫tî}Œ“8Fj}D‰­Èîd,G%u²¼*P'ΉcûöíÛ·oÿüóÏQNNNbb¢!̀ÉÉ!¢û÷ï:tèĐ¡CDdoo´{÷ñ7 ÀDư®éı¨½qÙ˜?.¹´mË; 0–£~Gâ`ƒỘ¨ˆ<=={ö́Ù³gOáÇ´´´³gÏ9sǽÙ³—/_.)))--½|ù2ï04́øqc9²đw¢xGd¹3Íÿk(ÇÇ“m$Ú]hGíxGa¹L9̣¿D³xRSï¨jwww77777·úơë;::̣Àܺe,P*ïp¬Rª+5”¬¨HM®·¼Î;«°‹}yæ È@E-eeeÉÉÉ gΜ9}útZZZå}0VÀñ̀ÚÎh?ïp$säï¬aN±cÓ`̃Y®ÂÚáż£pNsss…4ñôéÓ‰‰‰>4ÙÁÙÙ¹C‡å6Äô²–cG{*µ¼"•¹t‰wÖ`Kă£âOÓéà“…®ñäÆ9qܹ́³^¯7ÙØ´iÓˆˆˆÈÈȈˆˆ¶mÛ:8¨¨Y@Ólæ‘nñQ•¾rj “ÍÇGÅ'P‚vG°yœs2CÖ(L.4+úúúêt:"ÊËË;ỵ¤É!O=ơߘ´‹íăHDtáµÓđPŒÇ´>{6“8>ryOñ¯Đ+¼c¨Zó €ïܹ³æ=“’’x `+48^'fI¼¶gÿ¦ÍÀñ; jT‡sDDTJdÏ;”zGU€́âµ£¬£uÆh|Å©Èúä k5hơóƠBâPu¥cDNا%Û&đGJ%TÂ; ±ư f¯""$6ˆó£ê={öđ¾uQ”đ'ưèQ̃X¨B³\™mßNăÇó«nc³Ä(á‡UDođ $Å9q â}ê«WåH?­Ü0/wLÖ_T”¶èØè#…ÏW}̃1€Ô𨠮`çâ‰̉øCÄ;tÇd‹fŸº3— ñÄ‘ư.â\@DD§yÇRCâPW°©UåŒW§%̀ Y†Ä±X›‹®hô³ q¨+´ZƠ¬ĐIÛWWqöị̈m¼˜¼ q¨+Nœàê ÿ_ªÑ‹†ÄÑ6f䛄Ġ®xđ ª­Z_…pă‹¼#°NU h´ÅÑ@§·¾P)$uÛªU¼#0[2%Êv§mjÙÁVÚÊ;,«D%3?Üå HsâøèÑ£G•””Qiiijjjjj*ï{`ăê×/càÙØ¹®_¨ºª¼ê=â–U"]˜.ó$Å9q́Ö­[xxø–-[ˆèöíÛƒ 4hï{`ă:t(2₫ ÁA%lÀ¾:ÊEE–Ô’`F‡STæí}¾ &œ'/,,$¢ưû÷·jƠêAy¬ßÿ½†Czê)¾1h]ûö…t¼ü öqd[£˜'Ơññ¤á_μ°N…Ù¿ÙÅõ÷ù€pN5jtçÎS§N:uʰñ¥—^ªá¤¤¤Z«»wËíÛ3Msü ưb(G2Oªµ8FQ+jơưÁ; -¯p) ´8ØΪ{÷îÍûÔ ¹¹Ær«Vœ_Ú@OÆQ»~~Æíl3 a àœ8º»»/X°@(gddôíÛ—ˆNŸÆú¦3£Á'Ô•yûcr²¥ñÂ6‘FUhI=Kg{“–È`Ö€:BEó8:;;÷ïß¿ÿ₫¼°A¦qßxĂXÖ́häH̉ø\g]@¨băiù2 (ö¡t´đl6ÄÀ†¨(qܰaĂÍ›7‰¨aÆsçÎưöÛoươ×ï¾ûîí·ßnĐ edd|₫ùç¼Ăж¨ÊƯÏå”*w₫ 3–¿ø‚w|–ñä€u*,SùÖS¨›ú8&&&‘‹‹Ë¦M›‚ƒÉóöö íÓ§ÏØ±c=z„™z,À6)jøÁ.U•8vîl,ku–¡̣l>„B’H{‹c±MÖ*¿\w| µ8^¹r…ˆ:wîlÈ ‚‚‚ºuëFXoÀ"lâ¥ñÈT`²¥Q£ª¯TK¢ ÿ¯É·§–gÑ×xÇ̉QQâ((­¦Å ¬¬Œˆ05€ØÑ/•K¶CKă|™r¤áÿ ÂY”Å;D±4t×ÀJ*JCBBˆèäÉ“çÎ3yéÂ… ¿ÿ₫;ñ@{ªN§4̃öؘW̃¨¥g—)ÿÿ(æuÍ4ŸæZ_h„Ljˆ"*,,|饗V­ZưúơøøøU«V½øâ‹†}À,U'loG FfèÓ¤ĂL¹ü1›8jwđÇ:X_¨ÇL:ơ¿ÿưïơë×ọ̣́Ö­[·nƯ:“Z´hñÚk¯YT7@VVVƠV“9À{kied¢ ôiRU «¸“»¡¬ÅıÂèđH¢s–Vj¥¢G—åË—7kÖ¬ÊWưüü–/_îââÂ;L[Áöq\¾œw4¢°¹Û8çäÄ;2‹.¦f»i7ïÍV¡÷;ë.2H[¡¢Ä‘ˆ:tè°wï̃Y³fúØÑƯƯˆÜƯƯ;v́8sæ̀ü±cÇ×¼sçαcÇFDDtï̃}₫üùÙÙÙâÍÈȈ7oïÛ`-v½b{ kd=O6qdÇ‘ŒĂ;2 Ọ̈z1óÑlÇh¦|wd =ª8;;¿ùæ›o¾ù&åååI²>ơ+bbb\]];uê”––¶k×®äääM›6‰i¿Ôëơï¾ûn^^ï jÇĂhdv¼H+jÅ^××_?.gf’·7ï@ëvtx…Ï—Éâ1Cy RPW‹£ I²Æ¤¤¤ 6øøøüôÓO6lˆÿüóI“&uëÖíÂ… æWX‡ơÓO?ñ¾văÚ+,÷ûï͈ê åÔÔTbîg‹¼<Ă¯á%µ+ŸA¨iIÓÔôÔ*_»y“õ˜ûuu÷¦ÇCx̉›¤—¤–^ÊuÏ-…Ư>d—¯ö¯÷ȼN&w>€ª}©VøW/-ÜO+ 4ˆwjaă‰ă£GˆÈƠƠôY0́&''§º£̃yç-Z¼ơÖ[–7IK ŸiC€-.¬¬ vÜ‹á6>.̀Ksç>̃âÑÈ:×đ‘ạ̀i1ï¤iÆb‹î-ØW̃¢·æÓ|¡|Ăç›{©ŸéMx’ ½R-xSđ¯^Z¸ŸÖ¨üg½r Q¡̉ï²III±±±Û¶mËËË+))©.Ă«Uƒ t:]~~¾Évaz¡Ư±²Å‹߸qăŸÿü'æ§©ÑÈ…̀̀‡ëhªúç»ơÊ›‡Ik‹Ç4­¼Iăƒ± 2Ơµ8îÚµkÍ5ÂƯºuóđđèÛ·ïË/¿=,,Œ÷Í™Iâ8p ï€jRƯ²1‚đp:s†wˆæ\Œ ê@XE–ȾKiD₫¼C«©«ÅñÓO??¾!k4ÈÏÏ_»víÂ… -¨ÓÇÇ'++KÈ „̃6>>>•÷ONN&¢uëÖ…”5jưđĂ!!!Ï<ó ï›`!GÇJ›Ø^ªoq\ÁLü̉‚Z˜¼ªơ™†ªô'ưÉ;„Z0“„̉ƒÊ/³‰£Ú?_ Z/\¸đƠW_ e{{û̉̉R¡lheܺuëĐ¡C;uêdVµưúơKJJ:räÈĐ¡.Đëơ‡nذaDDDåưưưư { rrr=êççÑ´iS1'P¡‘#k|Yơ‰£'Ư©<ÙaT}ùåặŸR5‹̃ƒÄÎ0å*º„›,3w¸`5%111z½̃ÎÎî¯ưëèÑ£ĂĂĂ…í«W¯~çw 6nÜhnâ8vؘ́˜˜5kÖôîƯ[³aÆ̀̀̀W_}Ơ±¼æáÇwîÜqttl̃¼y=zôèÁÖpáÂ…£G>ùä“K–,á}“̀ĂvÓ¨¥M.-Ô­ǽRöë×Ó'ŸđW¤Ul³#»2*3»*Ø·¤ÏÛ·hÑ"̃á€ƠTô¨ú̉¥KD4dÈI“&™ŒJ8p`ï̃½‰è²ù £ùùùÍ›7/%%eøđá~øáK/½´bÅvíÚM:Ơ°ÏáÇ 4mÚ4̃÷@b́lØQOrÎƠđj—.Ʋƒ¾×&ªÊmy«Ø>˜-j̃Ơ¼ê R*J³²²¨úù‚‚‚ˆ(33Ó‚§L™²té̉€€€½{÷̃»wỏ¤I›6mª<¹#€íaŸ?k=q¬ÛƒSíOƯ1åª5”8q§ị̈¤ ¢/æ!!!§OŸ>ỵdå—ôzư‰'ˆ(00Đ²Ê‡ 6lذê^2dÈ!Cª{µ]»v˜—4M¡6¬jˆ:}w˜2^µ±ÍtU¥ˆ‘L:™J©jÊÑÖ>:Pµ8vèĐˆ;6kÖ¬£G ÓÓÓăââf̀˜!$¡¡¡¼ĂĐ’ÚnÖ`;äôDÍ;ܼÉ;ıymmªµ5#O0.€mQQ‹ă믿¾wï̃̀̀̀ØØØØØXaă”)S ;xxxLŸ>w˜ZråJm{°Cf̉Ó©E‹Úà \“â˜rs‚UhqŒ§øÑ4wÄVˆ":Ê;Z½½½—-[æååUå«‹/öóóă&€ma[koŸä&—ŒS±Î U11æô|ÑÊâ1ƠÎí­½m¨‰G"êÚµë₫ưû§M›Ö®]»úơë‘««khh諯¾úóÏ??ưôÓ¼°9åó^-[Æ;jƠ¼lŒÀÙ™w”"7cßt€w¸¢T;×SS₫‰w”`5Ơ}Cwss‹&¢¼¼ø ù­ïéé¹zơjggg"Ú¸q#ï04ƒM<<ªßOë­‘U9~œwƠa›BW»;è$©ô óẼ€̣T”8^ºt‰ˆ† 2ỉ$— « 8°wï̃Dtụ̀ẽah†ØÇµ̣Ô ¡$jù¨Ü\1{ñPÛ²1Ọ4”“)™wĐÖA×t¢¢Ä1++‹ˆª^•5((ˆˆ233y‡  iiâö›3ÇX¾z•wÔµˆ$1Ă|TŒMT»×³ô,s„jŸ»‹Ów %!!!DTe/F½^/¬U¨q’Z£úÅcî̉]c°5v₫suåk­̀¿ÁêOƒj~Yă©>°T”8vèĐˆ;6kÖ¬£G/n7cÆ !q ơ” ̀ÀœQå 6sª¹ÅQÔ¬C|™ÿØ9AơóF‰ù,ïXÀ:*Çñơ×_ß»woffflllll¬°qÊ”)†<<<¦OŸÎ;Lí©Øg¸Fªlq\NË å¶Ô¶†=£¢èÈ̃áJí=àBR™r-£¥Ùl>(Œ@»TÔâèíí½lÙ2/¯ª×„đđđX¼x±ŸŸï0´çùçEïªÊGw2®…ؘ×°'ûÔử%̃qÛ´kL9ºæ]ÙyÎƠøÅ̀ ¢Ä‘ˆºvíºÿ₫iÓ¦µk×®~ưúDäêêúꫯ₫üóÏO?ư4ï4#=ƯX6ănv6ïÀ« ¾“_x¸±¼zµÈƒ8iWËënäÆ;ƽlŒ3ªhœU ÜÜÜ¢£££££‰(//ÏÍMƠ¿:T‹}æ¬ơ‰ÓHäøpjß̃X6ă=µ½)]¨ËÏô3ï(«Åæ̣â+ä7XGE‰ăªU«„¨Q£Z´hADÈ,Æ>s®=qts£<[[ÖCOƯo3åÚ£(J+‰£yÇ ÖQQâ¸k×®Û·oQŸ>}„Ä,ƦM̀Ơˆ¢Ă‡y‡,ăP sï²ăÇÏ̉Ù0• *¹f} A*êă8zôh¡pưúũ±hyĂ£50 ‘™³«qAqËÆ”¿nÜCư3̣Ô¢)ï@"*Jg̀˜1räH"‰‰¹sçïp´íÖ-söff_TïÄù”Ï;ë°SƠÖ³53Yưs€×B_L v*zT=kÖ,"jÚ´éƠ«Wỵ̈—¿´mÛ¶aÆ:é*§k×®å)€ÍaÇøxRÓLû×ÉøbÍ©u//ºwwĐƠ¹láqjnql/f§(¢½ååR¢ZûN€Z©(qrv6Ô³··ûí·[´h‘ŸŸ¿fÍ"ª_¿₫;ï¼CD₫ù'ï¨TÍÍMô®ƲjGË–1{"eܶêè3t†÷TÁŒF`vWµ|¾Àl*Jÿưw"jÖ¬™iT:ÎÏψÎ=+lqww'¢lKÈÔ!–u,SÍ46+h…¡Ü‘:“;#¹Ë64aÊjùbfSQâØ©S'"*..€dL¦±éÚ•o8ç鼡<—æul«VôÇ|Ă¯è¢ơU¨nñ˜næE´­¼œMÔ÷€ùÔƠâøé§ŸÎŸ??£R/«üüüµk×.\¸w€Z̉¨‘™°ƒcV­â¾…ËÆxGoâ¾u\¢K¼/£³‡́Û3å/xGQQâxáÂ…¯¾úJ(ÛÛÁZ·nƯẓäĨah†UsñÔ¯Ï;ü l!bÖ±o¾i,?|ÈûJlÛGÑ́Ïצ¬–©BÀ<*Jcbbôz½Ư|Ïtï÷ôô\½zµ°zơÆy‡  V%åË{rdM—>ơ.cáèpµ`ï¥Ù]=™²ºº€X*J/]ºDDC† ™4i’‹‹ û̉À{÷îMD—/_æ&€ª±cZ"5>ÁÄ‘½vu%ægóæ¶¶ÊÍ÷:XS‘ª̃ME‰cVVTùjPPeff̣@ƠØ®‰Z_6¦€ ,>–]Ç^]ÄÍS¢,]ØO’uM¼ÆûJÀ"*JCBBˆ¨Ê^Œz½₫ĉDÈ;LUc»&Vó-¬F–£vü[Ï1eóo0;0(‹²ø^ º&Ôq*J;tè@DÇ›5kÖÑ£G…éééqqq3f̀ÇĐĐP̃a¨µ­kªl¥lL­9ü÷±Èlæ:À́£ÙÇ}´ï¥ạ̈==đ¦¢y_ươ½{÷fffÆÆÆÆÆÆ §L1Ăóđđ˜>}:ï0TÍÚÖµ\&1xđ€ÜƯy_‘-döÑlÇ4Jă}1Öq&+: *jqôöö^¶l™——W•¯zxx,^¼Øg*)µ̣Qâ[o˪騪N~–°îFú’¯¡¬Åc<-;l<ï¸À:*J‰¨k×®û÷ïŸ6mZ»víêׯOD®®®¡¡¡¯¾úêÏ?ÿüôÓOóÀÖ©f6C²,q QÏXdén¤z±°˜}'oñ¾0ŸU ÜÜÜ¢£££££‰(//ÏÍÍwDdaë<»Ú ×Ä‘Í,{TEII¯€Q(YM)”Âûb³°˜=,h(ïË3©«ÅѲF‹Yû̀8?ª^I+ åVÔÊ‚ØÆSLä%‰o™²…=Ù¯jyêfPQ‹ă£Gâăăï̃½+´5z{{ẃØ122̉ƠƠ•wtÀ.ĐY»æ!›8&$Đ_₫ÂñjÊ5á€u0å™–Uá̀”ỢỒ Ä±¨¨hëÖ­111÷îƯ«üª‹‹Ëˆ#fÏƯ°aC̃‘¨ÛD¨Êyù¹«Ó vñ˜eËÔ‘8Zú¦´¦ÖWé*ïè+4[_Ữ׿ăÿ¨ú̀™3 øûßÿ^eÖHD=Úºuë!CΜ9Ă;XUc;%j=q,£2+k`§â9­{–N+Ô“ẓ»#‰Ÿ-c2q âœ8̃»woêÔ©·n×9::úùù…††úùù9::²{¾öÚkÙÙÙ|P36q´|êª6mx_‡ôxóa[N-ÍæÙáA”¡†K€º‰ó£êÍ›7ç–O8<`À€É“'wêÔI§Óvˆß¸q£0xNNΦM›fÏÍ7fƠ’f4KTß̃&Ssë+ùă~À欖&́„D ”àG|f´•fên‘Kø Î-†¥G½fÍÎ;³Y#EEE­^½zܸq&û@egÏJQ Û7P£‘mjÙ˜–ÖÁ&ê™Üâ‹íâœ8^¿~](̀œYÓ=C+cZÆ—ÛP?“ÑÈ<23>¨0–Wƒ~— zTÏPVCâhƠ_¨ă8'< "///__ßvóöönܸ1åååñ Àö©`ñ67Ks-®',ŒKø—¸>5,cƠu¶ÅMZĂ9q,--%"—Z÷V ,•`RcÛ`ÅÁ́ÄûëÖq‰ŸÍ¬Y¨úÑ#.áËëOú“ËyÙ~‰V=mfßÇp¹°ÿéx@r’ÍÅẰl $¶ÅÑ—|-®‡J÷'ŸtËv°ÏV=mÄ”íy_˜I€₫₫{-ư€ÙdÓ€t0]#¥êF–ÊåZ¤êÆÇ̃‡øxjÖŒËƠ”kaƠÑvdgưÜ–ÖbZ!""b@̣ï® æQE☙™ù̉K/ñ@ÛliÙ˜stN’zLÆù Îơª¬{S¢(ê$ä>›ăùËQ)hU؈åËe­'RaŸ´óçĂ®‡e]3°5}=%±EJị̈½&0GÁiiÔȺºT1Yb|ÇKLù «jbç³L%]Đ[ˆû£ê={°Ê=€4¤œr1*J¢ÉÄ­ơ„•ÙăæMÀf«ư¬ª‰mqÜK{ߤ7¾)W{q–jPçÄ1((ˆ÷°R.ÈN˜ú矕ØÔ²1>’Ư ^3̣HƉ#€VáQ5Tm,+¾xL.åÊÖẃsàûíX›Çwñ Ö‰cø`•º’8îܹśرƯ»wŸ?~vvvÍû?zô諯¾zæ™gÂĂĂ{ö́ùÊ+¯üú민/@)\a³"ë[%›™È2R/#à»xŒƒtØ*®p¼0[HW¬Xñ₫ûï_»v­S§Nnnn»vízíµ×j˜²¤¤ä¥—^úÇ?₫qçΧzªuëÖÇŸ2eÊÚµky_ @íÚ´±º ®£‘¥Z6æq ¶8À<“2>#û`Y‚;Êfó˜‘@Sl?qLJJÚ°aƒÏO?ư´aĂ†ØØØÉ“''&&.]º´ºCv́Øqæ̀™¨¨¨Ă‡¯_¿₫ßÿ₫÷wß}× Aƒµk×^ºtÉœ“pP mï1ÅUFŸÊ^äeeml☒¢đ¥Ø¯˜² ¿v`ÊüW̃3Ø~â¸cDz²²9sæ4ỉDØ̣̃{ïyzz₫øăeeU/ĂđÓO?Ñ_ÿúWĂ"ÚAAAÓ¦M+--ÅkP§L¦jæLI«ÎÈPøZœÈIÂÚLᦵu¸TXæYQELy´U£Å@Sl?q} [́íí{ơê••••PMSJjjª««k»víØÂđôôt̃P[Z6椽̃""Œevt¥Iñ¦S0¯đÙ́®©´UâuM` OơzưƠ«W½¼¼¼¼*<đ ¦ê³Àưë_Û¶m3ÙxáÂ"jѺåfäÁ¶¥I3„óhdY¸»+{¾¦,Å›̉‡!ó.‘#IDATú({F2>O–r~H ₫m`åçç—––6hĐÀd»§§'Ư»w¯Ê£BCCM¶;vlÆ NNN#FŒs̃“-Âăo°̀7x‡ vG4!rÊ™™©™5s?ưÚµs*Ÿ<5UÙuJŒE‰Nư¸Æ“'ËRSÓä¹Ê[ệ»KỌ́æ¹[Ín=Jµví•n-¨ñặ(–lvôZ0¾+’¼)TK…øW/-ÜO+ 4ˆwjaă‰£0tÚƠƠƠd»››åääÔZCiié×_ưÏ₫³´´tÙ²ẽ̃̃bΛ””Äû̉mMów *cgÿs¯jß§[7Ăâ1¼n~[j+í©ïß·“ïZª¨ùc±é¦ÔĐÚS ¢AoÓÛBùNó;ư©¿L×bö•ZÀÓØ"[]…øW/-ÜOkT₫³^¹…¨°ñGƠ 4Đétùùù&Ûọ̣́¨¼Ư±Ç6lØ¢E‹¼½½¿øâ‹!C†đ¾ €ªIß&Èö”¼vËEY?ǵó]«³F"jGÆ×|痀Ɨ¨³lÿ\±ø¥]6F'MĂ¥º< ‹]¡U²†Bv¢‹5] XËöDZcÇÚÙÙ­Y³&¯ü¯Ç† 233GíX¾®ÚÇSSS…Agz½~Ë–-îîîï¾û.ïØ̀&Ë$zåfLả\Ig̀sçËXûÉlÛ¦d­·aÊơx_!ˆfă£ª‰ÈÏÏõ¼y‹/>|xÏ=Ó̉̉;Ö®]»©S§ö9|øptttPPĐ={î̃½{ưúu—矾rm#Gœ4iïk¨€gC–DzÙÙÖ×!’O`MiÛV±«)×Îú*k@ îÓ}…Ăg{SỂ5«h‡í'D4eÊ”Æÿư÷{÷îơơơ4ỉœ9s„y*Ú=zt₫üùʯbˆ ¨ÛQëËÆ¤‘ôó,²³&$‡¯~̉½)Qơ3ư¬pøl.ïiq-"OêV'G"6lذaĂª{uÈ!†©v"##1 #h˲eƲ”‰£››íuTnœûÅSºfàHT>qüNî*|A`9Ûïă`ó<<Œe)W ÔzëeU”›Yˆ]Đ´µdµ²†)Q™K)Væ4 H4O®V4nÓØ…S¸Ơ*ׄʾ)}%«•M÷Đ¥.F>ÖWJCâ y·nÉSoA±|ñ¢ÂeSËÆÔ—¬ÖÖLëeeđ¾Hë”ñ̀‡Äª1k–±¬HßÀd.mâèåe}f’ÿ†)¿xL{i«›Æ”K¾°GÛá(ÙzpDDÔ¦±¬HâÈÎÅ)ébƺ_—ư Ê/#q#0[VhGÛ!ăhE•ȱl̀ăÚ4₫Ü»JET¤ÀYØ~ßE6›Gâ HlÇDzU­H‹c ÅÊ’NÆ&gÎ(p)¶#†)KÛ¢M-˜2æĐ$Úvơª±ó¡¼Ö0e‡ï{2e´8¨G­:}ÚX~ë-̃ÑX§˜8‹̉‹Çô–±î ’;|'¦œe`†©"g6ßúÊỤ̀ŒFF‡C¨ ‰#€V)ñ°U `{fcjl}%b\º$O½l3œ·]u0^ÆÁĂ­Bâ UJ ï°ƒJ<÷T²>ßUû¦È5:œ¨â¤E2%ÊéÀ; ‰#€V±KºÈKÁA%X6F$Of4²Ü‰£‡Ü£ñ/ u G¨ ›8ÊĐÎÉæ=ET$륄ÈÙ HDtJæú«"wâh/÷°_”X@,‡Ä@óص]dÁ®K#CâÈ.÷&½)ë¥DÊƯ¸ÅcååJ‘µ₫Wä¾, H4Oѹx¾ùF̣*Ù³VÔJÖđọ́Œå?₫ơTÚv)Ë₫$¹S₫Œ÷•@8hRóDWöV´êN,%ÇvDGËÉÉrÉ[±k’ÛWSö/& ˜²LÓ$€D8h;FEë³'(8c ră|äS:RGù*gsù`Ù/¥€ú qĐ$[Z6¦ŒÊ;—3BX̃ùŒäo–u:·üí¯€(H4iƠ*cYöÁ1DÔ¦ ï+–ô‰ă˜²üÙ<;çeeH[ùo²‡„Ä@“ê×Wö|´jú’×”"ùXä‡L¹ÅµˆÅ¶8*ù¸_:̃€8H4é́YeÏÇÀùóO™N̉…º({URc›0åo¢e[wÓñoíÅ€& qŒå $¬¸ e,c'r2”ïĐ™Î¢ĐÚáùÊœ¬…ÄDxùecỶ¾́\<Ê,TƯA¾•‘ù–oJ#…rù9L9M™S€%8h[@€"§qw7–%Ɔ휧L‹£ŒƯ5•nêO’²ÿ€)+”8bñ@â mæâ‘­ÅÑ—|Ÿ½c7o*pBíaß`…:²có°mH´‡Mwrs?}jª„•m£m ‡Ïó‘k*G{…®ÅNßá̀\OÔT™+aGU£Å@Å8hÏ•+Æ̣[oñÆ:T đ•Xª–pF½ơUXÀ™ËYÀ¨ˆÇèđƒ5Aâ 1l¢£ô£j)çËV IG»̀ïRe³ùH©UÙ₫­ü ́ GY·ÎXvwWöÜZoá¬$‰£ûvæPö&±-’´àS4|Đ$ăèÈïܲµp¶V¸c ƒí3j¹2¦ÜÁâZ,!Óâ1|x̣jƒÄ@cRSù›mq£V={JY›ă;Iû¨C.m,ÖKRE.&8hUX×Ó[½x ;‰£̣-¶8·Đ+kÈaÊîsÊzç‘8¨G­â¶lŒ@̉GWrµ¢&K°wï̉%…O®^Ü–‹Nç,¯dƒÄ@KNŸ6–>äƠ£‘ùä`[%Zy›ˆˆxd; ¨TU­`Êú82Đâ NH´„]/:Ụ́zÔ „J8=4ÔX–rñ˜q®EÂưnL9€Ă¥¡Å@8h Ïecơl°èË/­;₫SæÑu²µ’ª*U,CDDºBï  H´„}¨Ê'…ë̉…÷=^i©udz –<Ç4ÀPN¤DkªºÂ!|Đ$Z"åCUËÈĐÎNá|¯)ÏÊé9(±­Åc”>̀…Ä@K22xGÀ*¹|Y*5>ûw…ç»ơ9œŸ]°Qó‰#P7$`6q´¢ưó:]7”•Ÿư[àå%QEjJƠ$ê¦j}–a¿DèyƠBâX­;w;6""¢{÷îóçÏÏÎÎæ€ H4ù 1”ə˥HöÔưºơUHFªÇ^À&jÊÈ@€Ä±j+V¬xÿư÷¯]»Ö©S'77·]»v½öÚk=âÀc;ó€¬ÿÍo&Ód.áÛäâ1ETdñ±́èđY¼.€Íæ‘8¨Ç*$%%mذÁÇÇç§Ÿ~Ú°aClĺäÉ“—.]Ê;4€Ç8/#8|ØâCÙÄѸ„ÿ€YŸoË.!¨ ïÑáDDäÏ”Wr»P$UرcGYYÙœ9s4y<Àï½÷̃óôôüñÇËÊÊxGuWjª±¬ơÖ2©ºâYcáBcùÜ9)jä—Í·¡6ÖW¢Ä‘Å}(T‚ı 'O´³³ëÓ§a‹½½}¯^½²²²¤\› ÀùdÍ5\IJÂ à»ø™jŒ13µ*E±̣~æçKq1Ƴ<ÿ½”GqÁ0T1øw)Ñă¾4¤¨NÇïmѳ7¿L%Ày I”DI¼Cà-¦̣óóKKK4h`²ƯÓÓ“ˆîƯ³đ«<ˆ;0–wP-$¦„¡Ó®®®&ÛƯÜ܈(''‡w€²jOÔăé?}ïSûR{̃7ª†GƠ¦4h Óẹ́+=ŒËËË£̣vÇ5¿Qr«©éô¤×‘]•ÙUø_a»^÷¸ «ôœ«̣KƠUÂî_%ö%ăxTOåªxÅó¸PFz«ïO‰HGTFdWñ…íº̣BåªØ—j®„Ư¿J¥̀k–TZJú<̉Ù“^W^‡́ôntåw¢J•ï£É»eWVaOôºC=R™Ư­₫h~£9éôÆÿ”‡£·ÓëẾŒÿ^.¯I§¯æ c_a+₫ĂîYeUUÄS©Iâ©\IíñTsQ«̉ë¨J,‹§†Jj‰Gø8«!̃N¯³ 2>Ăçv+jNuGS•[sss‰È0κơûµ+Nª£]d’€n̉Áư”œjn© uö—x_QêÁT‡ü…’Œj>¢¶c`H¿ºÙͪ«àăă“••%d©©©ÂK¼£à‰cúơëWZZzäÈĂ½^øđᆠFDDđ€$U;v¬Ư5k„~D´aÆ̀̀̀Ñ£G;::̣€ô ©‚ŸŸß¼yó/^<|øđ={¦¥¥;v¬]»vS§Nå7H«6eÊ”Æÿư÷{÷îơơơ4ỉœ9s„yê&$Ơ6lذaĂxG èă¢ qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ GĐ€AƒñÁ¦à~J·Tr¸¥̉Âư© qQ8€(H@$ GE§×ëyÇ`kBBBx‡̣JJJâH@<ªQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@$ G‰#ˆ‚ÄDqà€íعsç;®^½Z¿~ữ½{Ï›7¯aƼƒ̉Œ1cÆœ;wÎd£··÷¯¿₫ÊnÁM®YJJÊàÁƒẃØVùU1wwØD ·Z³¢f.|ụ̀å†-»ví ?~¼Y·«.ÜRôq”À;ÊÊÊæ̀™Ó¤IaË{ï½çééùă?–••ñN®_¿ND&_‹Mà&×`ذaÏ?ÿü¶mÛªÛÀƯĂfƠzKñ¡5ËO?ưDDưë_ .AAAÓ¦M+--5<6ŧTÚû‰¨Y~ÿưw—7̃xðeÔ¨QM›6½páBii©øÛUn)G œ†-ööö½zơÊÊÊJHHथ¥‘¿¿ ûà&×`Ñ¢EëÖ­[·n]·nƯªÜÀƯĂfƠzKñ¡5Kjjª««k»víØAAAD”.üˆO©xbî'>¢fiĐ ÁÓO?í́́̀ntrr******~ÄGT€>Ö̉ëơW¯^ợ̣̣̣̣b·Qzzú“O>É;Fµ~ÁƯ¼yṣäÉ—.]ª_¿~hhè´iÓ Ăp“kÖ£G¡đË/¿T~ÙƯĂ6Qó-%|hÍô¯ưËÁÁôÏÍ… ˆ¨E‹„O©™j½Ÿ„¨™¶lÙb²åäɓׯ_uñ5@‹£µ̣óóKKKMº‘§§'Ư»ww€ |E^µjƠ;wzê)ooï_~ùeâĉ;v́vÀM¶†˜»‡;l.|hÍ*üí48v́؆ œœœFŒAø”©ÖûIøˆZêôéÓï¿ÿ₫óÏ?ÿâ‹/¶lÙrñâÅÂv|D Đâh­G‘«««Év777"ÊÉÉá ܼyÓÅÅeîܹ“'O¶üöÛoÓ¦Mûûßÿ̃£G???Üdkˆ¹{¸ĂæÂ‡Öb¥¥¥_ươ?ÿùÏ̉̉̉eË–y{{>¥V¨̣~>¢–JJJúæ›oôz=µk×®^½zÂv|D Đâh­ ètºüü|“íyyyT₫=jöƠW_9sÆđÛˆºuëö /¥–©î~>¢–0aÂ¥K—=úî»ïÆÆÆNœ8Q¸!øˆ q´–ƒƒƒ§§gåo¹¹¹DdWæêܹ3]¹r…p“­#æîáKÚ-Z´èÅ_̀ÈȘ9sæ?₫È<§Ô\5ßÏêà#*†N§kܸñ”)SÆëÖ­ØØXÂG”ÄQ>>>YYYÂ'Ă 55Ux‰wtj§×ëKKK+ÏS`ooODîîî¸ÉÖs÷p‡ÅÇÖ\eeeo½ơÖ¦M›úơë·oß¾3fT ŸRñj½Ÿøˆ%99ùÿ₫ïÿ~üñG“í¸ơÛ·o ?â#*@â(~ưú•––9rİE¯×>|¸aƼ£S»´´´ĐĐĐ_|ÑdûéÓ§‰($$Dø7Ùbîî°xøĐkóæÍûöí{î¹çÖ®][]» >¥âƠz?ñ5‹‡‡Ç·ß~»k×.“íÂ\˜Âøˆ 8J`́رvvvkÖ¬ú1ц 233GíèèÈ;:µkƠªUTTÔ‰'vîÜiØxúôé/¿ü̉ÏÏoàÀÂÜdkˆ¹{¸ĂâáCk½^¿eËww÷wß}·†Ưđ)ÌưÄGÔ,>>>!!!G=xđ aăåË—¿₫úk77·N:‰¿]uá–ê„¡C`¥/¿ürñâÅÍ5ëÙ³gZZÚ±cÇBCC¿ụ̈ËÊẶ¡²Ë—/¿̣Ê+™™™íÚµ üóÏ?Ïœ9S¿~ưµk×víÚƠ°nr­̃ÿư;wîØ±Ă0U›˜»‡;\Yu·ZñîܹӳgO—'x¢̣«#Gœ4i’øÛ…[*̣~â#j–ÄÄÄç{®¸¸8""¢yóæwîÜ9uêưóŸÿ|æ™g̀º]6Kí,XÀ;[ѪU«Û·o=zÔÁÁađàÁ‹/öđđà—6x{{6,;;ûÊ•+çÏŸwrrêӧϪU«Ú¶mË\«ƒ^¼xq́رM›65yÌƯĂ®¬º[­xIII»ví*))¹S•6mÚFuàS*áưÄGÔ,>>>C‡½wï^ZZZbb¢N§ëÚµẹ̈åËŸzê)so—ÍßR´8€(èă¢ qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ8€(H@Ơ’““CÊư₫ûï"÷4 í̉¥ËرcW­Zuï̃=‹+·><å­ZµJ́Í7ßä Ø$`ËJKKïß¿Ÿ˜˜¸nƯº9s†wD†Äl··w³fÍ5kæååeؘ››;{ö́¢¢"̃ÑhG°AK—.=xđàÁƒÿư÷C‡=ZØ~ëÖ­­[·̣@«8€óơơưûßÿ>`Àáǘ˜˜Gñ &33sÑ¢E&Lˆˆˆèß¿ÿ̀™3/\¸`xu₫üùB¯Ä^x=jÏ=Âö°°0Cđ5W $P'L>K Ç{öÙg7mÚtúôéüüüôôô}ûö=úÓO?v€¼¼¼èèè̀̀L"êÚµë̀™3Ÿyæ;;;½^ÿïÿ{×®]DôÔSOyxxQIIɱcÇ ÇǬ @H NĐét7Êwï̃U>€Ï?ÿ\˜hàÀ7nœ1cƲeË₫ú׿ ¯®Y³†ˆ Ôăââ„BzzúŸ₫IDơêƠëӧȪä€Äê …¼¼<åÏ~äÈ¡0nÜ8ĂÆÑ£GÛÛÛQFFFRR1O« ‰£¡¹±Gnnn⫝̸ïrÿ₫}¡ ¤_âmÛ¶íĂ?d·´mÛöûï¿7«’ÔÔT¡đÊ+¯T¹Ăü"<­ÎÍÍÍÈÈHII 4yN-¾*eî*Ô)hq€ºÂđ„ÚÛÛ[áSçåååçç×¼Ovv6UzZ­×ë?.lúé§Íª @rhq€:!>>¾¸¸X(ẃØQá³»¹¹¹ºº ¥¿ụ̈Ë-ZT̃Ç0Wù Aƒ„.GéÖ­[VV1ăf̀ª @ZH Nظq£Ppqq‰ŒŒ4ëØ#FôïߟƯâà`ö/Oÿ‹/QiiiË–- Ûsrrôz=9;; [ºuë&<­>qâÄÁƒ…ƒ ² *iáQ5ظ̀̀̀>ø 66VøqĈ®®®fƠà́́́]‘aœxƯºu Û·ỏ;"íܹs—.]úöík˜¸Ñđ´º¨¨èË/¿$"{{û~ưúYP€´ĐâñÎ;ïÓ_›Xºt©ÉÓgĂùùù́ä;^^^³g϶²rËÂ{ươ×ẃØ‘››{àÀÉ“'wîÜ999ùđáĂÂ>/¿ü²§§§áĂÓꜜ"êܹsÆ ¯U€„8€fܹs§Êíböôôô\¿~=›YV¹eáyxx,^¼øƯwßAŸ8q°ĂĉgΜÉbxZ-ühO-0«* !q[fooïæææïïߣGÉ“'W—5*ăé§Ÿ̃½{÷ºuë.^¼˜’’âííƯ¦M›_|±S§N&{ O«…FG;;;Ă8k ªÎĐ? ¢ qQ8€(H@$ G‰#ˆ‚ÄDA⢠qQ₫?5x D:1\IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/dsigmf_101.png000066400000000000000000001454221463010412100222540ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\çđO‚ ‹âUTµî-Z÷^uoÜ£®:~jƠÖQgTë¬[»¬{¡¶Z÷F\¨8êÀ ¸€ü₫̃!@Ï%|̃/_í÷.ÏƯ=ẉÍƯ34Z­DDDDDI±]""""²L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(¢+`ƒ¼¼¼DWˆˆˆRVpp°è*ÀÄ1E¤Í&5ọ̣́⛢6|SÔ‰ï‹ ñMQ¡4{“ˆª‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L‰ˆˆˆÈ(L)Mؽ{·è*>¾)êÄ÷E…ø¦z0q$""""£0q$""""£0q$""""£0q$""""£0q$""""£0q$""""£0q$""""£0q$""""£8ˆ®¥6///ÑU R—àà`ÑU°L‰ˆ̉"~LIøUÊx|TMDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDDDDFaâHDD¤:eÊ”Ñh4¦eË–¢ëbÅú÷ﯻŒỵä]ÁÄ‘ˆˆH+¶nƯº¡C‡ê_½zƠ¯_¿¼yó:;;רQăĉ møñăGM\Y³fM¨üŋ۵k—={vggçråÊÍ;7**JzƠøăZøĐ¡C¾¾¾Ù²eû́³ÏªU«ö믿&R8&&fáÂ…¥J•rvv.Z´è̀™3?~ü˜äq{ôè±nƯºJ•*‰xm“ƒè ‘:ủů_¿.W®Ü½{÷Ú´iăáá±uëÖ :t¨L™2ñ7 ‰®R¥JÁ‚¥•ÎÎÎrûöíZµjEGG·lÙ2õ¼û÷ï>|ø‘#GtiœIÇ5©đÎ;7n\°`ÁÎ;;::nƯºµU«V?ưô“ŸŸ_üÂ111Í5Û¹sg‹-6lø÷ß=:88xʼn·B… *TرcÇưû÷E¿Ÿ¶BK–V¤HÑU }·oß]̉Ç7E ëư3•:Çzÿ₫}tt´¨3-]ºt­Zµ¤Å‰'Xµj•nñÖ­[nnn¾¾¾·ư믿́߿ߘ5õÜÎÎîäÉ“̉={ؽ{·©Ç5©°Oö́Ù_¾|©[ Ï›7oîܹ ^¹r%€€€iÍW_}àúơëÆ·}ûö íYÇŒßëư%J&&–—f˜ÔŒ9 ñMÈê₫LåÏŸèĐ¡?₫ø£³³³]‰%Fư₫ư{©Àœ9sJ–,™)S&ww÷ *¬[·NoÛS§NùøøøøøS̃ßßĈ2dH—.î~ƠÇÇŒS´hÑ̀™3תUëÊ•+ºÂ‘‘‘S¦L)Z´¨££c̃¼y{ơêơèÑ#‹œ²^âèåå•#G˜˜iŸŸŸƯÇăo;₫|wîÜ1æ@º3R®9{ö,€‰'z\ă ¿{÷Î̃̃̃ÏÏO¹Rw{5222₫«T©’?₫„̣ø$ËÄÑ‚ø¨ˆˆ>yđ@äÑ5ä̀™Đ‹[¶lyđàA£FJ•*uâĉ3f?~üđáĂf̉¤I“'O®]»v›6m̃¿ÿ믿vîÜÙÅÅ¥iÓ¦ºmCCCëׯïêêZ·n]I–_·n½½ư¸qăæ̀™Ó¦M›/¾ø"**ªoß¾7nÜX²dIÇÏŸ?ÀÏÏoÆ _~ùeëÖ­/_¾¼jƠªË—/'̃°Ï ¯_¿¾~ưz‡4´²víÚË—/?qâDü̃37õ̀!Cæ̀™·lỤ̀üùsooï *¤OŸ>₫£¢¢X®\9åÊ»wïÈ!ƒIÇ5©°½½ư… <<<”5¹té’£££^%ß¿úôévíÚEEE>}ụ́åË ¨R¥“““‡’‰‰#}’;·È£;8@ÑƯAσ¾ûî»o¾ùF·8jÔ¨Y³fmÚ´©}ûök×®-R¤È={t/yxx́̃½[J·mÛ6ỵäñăÇÛÙÙH²|xxø… - ÀÁÁaÔ¨Q§NJ—.€‹/;v́Í›7vvv›6mêÖ­›îA*??¿ßÿưÑ£G9rä°à…yüø±V«ơôôT®̀–-€§OŸÆ/óæM;;»Ï?ÿüÅ‹º5Å[»vmÙ²eă]r‡ï¿ÿ^¹æùóçßÿ½½½}›6mL:®I…¼½½uñ5kñ¼ù×_=zôhưúơñOçÑ£G>|Đh4ƠªU;uê”nẽ¼yׯ__µjUS/%{U‘đđđøú믥ʼn':;;õ¼ÀÉ“'Ï=«Ë„……ˆŒŒ” çÈ‘CÊ)_¡B]ÖÀ××@‡tY#€:uêèÊÛÙÙi4¿ÿ₫[w‹Ạ̀åËŸ>}?kŒú=aI»®n...Ê•®®®Råơܼy3&&f̣äÉ>|úôé+|øĐºuë/^˜}\2ï8‘đööV>lurṛ̣̣ºuëww÷₫ùgß¾}×®]»qăÆ•+W”£Éđ̣̣’²FcÊ+¡ệÅøk8::Λ7ï믿.P €··w•*U4hиqăø…#""Z´h‘Đ©iµÚÄÏ]wô7õ(W¾~ư@–,Yâ—?|øpÆŒ¥—zö́ùîƯ»nƯºµW¯^qï̃½Aƒưù矅 ̃¿íÚµM=®©•”ܸq#22̣øñă~~~•*U ̉Ư/”dΜ@¡B…6nܨ»¶75kV—.]¶nƯÚ¨Q#óKæaâHDDŸXºqimÔŒáààñ₫ưûV­Zíܹ³|ụ̀ơêƠkÖ¬YåÊ•¿øâ eI777)6¦¼ñغuë;v:thçÎ^^^zON]]]“̀áééigg§÷àơÙ³gråÊ¿|ÎxMEëƠ«àÊ•+÷¿aƾ}û:;;/[¶¬gÏ̉½X“kj%•2eÊT§NéÓ§·oß₫·ß~ëÓ§̃T­ZU™‘W­Z@PPP=̀>.™‰cnß¾Ư°aĂÍ›7—*UJt]ˆˆRXÅ¢k «W¯~üøQºÛ÷öíÛ   Zµj;vlçÎóæÍ2dˆTX©åvóæÍ"EøùùùùùÅÄÄ,^¼xđàÁK—.Ơ £Ü¿nˆƒ7oø/~ôèQåÊ#Gh4©¥ äîƯ»;v́¨]»v±bŤ•º;pÿùçŸ]ºtùꫯ–.]ª÷ÀפăTø¯¿₫jѢźuëÚµk'­tww‡¡û¯NNN |øđ¡r¥.S̀;·IÇ¥äcÇ$¬]»VtˆˆOŸ>;w®´8uêÔׯ_·lÙR7°³2IÚºukDDDBwøL-ŸˆàààJ•*Í=[·hggW«V-(eKtªb̀±z÷î}çÎ;vèŸåÊ•+Q¢ÄôéÓoß¾]¢D‰ààà]»veÉ’¥C‡z%“ù¨@÷îƯ₫ùçN: 8ĐÍÍmƠªU‘‘‘“'OÖ½:cÆŒéÓ§ÿư÷ưúơË–-ÛäÉ“G]¸pᆠº¹¹íÙ³çܹsß}÷]ñâÅơvtíÚµbÅÅŸ¯¥U«VM›6Mü¸fW̉ĂĂcܸq“'O._¾|ưúơ5;}ûN<9tèPŸø{0`À–-[êÖ­Û©S§Ü¹sïÚµëôéÓ£F̉= 4©’”\¢’T©5jQ8₫¼ñÛ¦ÙAAƠŒcM«ß¬îÏT₫üù[´hX³fMWW×¢E‹1âƯ»wºW«T©ấ́\¨P!??¿§OŸ._¾æÏÿ±@Ư?»Ă›7×ÚÛ§̀%$R©'OlÚ´)W®\̉½ 2ƠéÓ§oƯº%ĐˆD^mĐ èSQ &)"m̃¾V9y*ƒM›°m¶m]•d÷úu†‹3\¼(­ñ1"N‰Œ‘>=† Ă—_‚Ÿ©i@Æ óçÏ/º©íêƠ«íÛ·oÑ¢G³­X±bé̉¥r'5fâŸñ?Öăß!J#˜8Yƒ={0v,Î]Ơx÷ï̃ạdèuœ̀ƒ¡S'Ás.“¥-^¼XtRÛ¹sçDWÁ,Y²dÉ’%¢kaS˜8©Ơ‡6 æ}^fϬYѨ̣æE<È›yóÂƯ]ü={†§OuÿX³Æ©dIÜ¿/ÿûđ!¹‡¸cÆ`̀˜ØÅL™Đ±#z÷F… ‚ψÈ&0q$RŸW¯P²$î(óđ@›6hƯ_~)º̉FHŸ9sâÓdhO*V4ªưÀ;ؼáá8sgÎàñc‰å˱|ýbË–3†I$‘Ù˜8©É©SI¤5  uk̀%º¢©(~Œeø¥Ç±́?cú?ưú+¤ñ\ À¢E¢ÏˆÈÊpÊA"uøåh4 f₫₫xóZ-nßNé¬ñÑ# ‚̃½Q©œ¡Ñ˜ÿ¯X1t́ˆY³°?®_Oºzz¢S'¬\‰ĐPhµ±ÿ₫ư₫₫ǿ³$¶]¼8¶–¤èơ$"²%¼ăH¤ 3°~ñbôG~ûë×cÛ6́Úeù_»†k×°aƒ₫ú’%Ѥ ʖ͘"=Ư+T@… ˜??vñÂ,[†DZÇ/Yûj›6ز%*DDd;xÇ‘H¨‡¡ÑÈ÷ï‡V›rYăʕț 2e‚Ÿ_d‰¸t ß6mrH÷&ûơĂ… )s°R¥°xq́ÍÈĐĐÄî/nƯ ¥K#::U/‘ơà”ƒ–—f§!R3•În7z4fÎŒ³ÆƠ—.!O”8ÚÍ›èƯ‡›³mºtǿ3T¯L™)œœbƒ“'Q¬=“{K?{†'O’UÏ2eđƯwHñÑvù½záưû üû¯ w£áŸ)"%N9h<>ª&$cFư¬%žÅ}ó ¦O7ªd̃¼±½´«T±ØÑ_¿ÆÚµ¸w;v5m͹shØ06î×Ó¦!K–¸(:¡S'X¿½záƯ;ư+Àwßá›oRàđDDV‰ª‰RƯơëĐhâdíÚ¥DÖøï¿ǿ3h4‰e¥JáÛoå%wïbölKf\\0p f̀À•+̣=B‹á¥J%±í̉¥±§P¶,Rê»}ÇxûZ-Æ7đêØ±ĐhđüyÊ›ˆÈÊ0q$J]Û·Co¢ª₫ÁÆ–=ÈO?A£A¥J†gg̀›À? \†́Ù1gÎÓóçc«qó&FŒ€³s‚åÏEÑ¢ĐhĐ´)^¿N™:M™­V¯Gé³Ïbo@¥mL‰RÑë×hƯ:έ•+[đÿ }úxÉÓgÎ@«Å›7>\ô¥ˆ«P!̀;âPD†M°äpu…Fƒ:uR¦*-Z@«Å½{È–-Îú“'“¸yKdQeÊ”Ñh4¦eË–¢ëbÅú÷ﯻŒyR¦íxÄÄ‘(¹ºÊq³f–}<ưü94T«fॠ Ơâ¿ÿđÅ¢¯€2eÂܹ±w"„‡‡ábB£—^¾LJäɃǡƠ"C†8ë¿ù ®]}‘(M(V¬Øºuë†~ú"ơêƠ«~ưúåÍ›×ÙÙ¹F'NœHdÛC‡ùúúfË–í³Ï>«V­Ú¯o¥rñâÅvíÚeÏƯÙÙ¹\¹rsçÎ’^5é¸&Nü¸zbbb.\XªT)ggç¢E‹Îœ9óăÇI·GëÖ­«T©Rª¿{¶KK–V¤HÑU }·oß]­ÿmÙ}çÏg÷ºÎÎÚĐPÑg0“̃”K—´>>ÎQú÷Ç)Vу ïÇE_¿dáŸ)ơ+]ºt­Zµ¤ÅW¯^}₫ùçéÓ§ïØ±£¿¿Μ9]]]Ï=kpÛ¿₫ú @Á‚‡ 6v́Ø"Eøé§Ÿ ¾uë–»»»‹‹K·nƯ&L˜P¹re-Z´0ă¸&Nü¸z¢££7n¬»ÿ:zôèjƠªèÙ³§‘Çmß¾}îܹ¹ÚfüF¤Ù_"&–—f˜ÔL|âèá!çeËZpÇëÖÈjrå|ºÆ0ïMÙ»W›5k‚écơê)V]ưƒ•+'îâ%—ơ₫™Jc½ÿ>::ZÔ™ê%'N°jƠ*Ưâ­[·ÜÜÜ|}} nëăă“={ö—/_êĂĂĂóæÍ›PæÔ¼ys;;»“'OJkzö́ `÷îƯ¦פ‰WÏÊ•+Hk¾úê+ׯ_7æ¸L-ˆ‰£å¥Ù&5œ8¶o'á°œ̣å $Oÿư'̣\—̀7ẻ¤ÓÇeËR¬̉™2é̀:YƯŸ©üùó:ôÇtvv¶³³+Q¢Äèѣ߿/˜3gNÉ’%3eÊäîî^¡B…uëÖém{êÔ)cÊûûû1"C† é̉¥«P¡Â;>~ü8f̀˜¢E‹fΜ¹V­ZW®\ÑŒŒœ2eJÑ¢EóæÍÛ«W¯GYä”ơG//¯9rÄÄÄHküüǘ́́>|¨·á»wḯííưüü”+;uê 222₫tg¤\sö́Y'N4鸦Nü¸zªT©’?₫„̣ø$ËÄÑ‚ØÆ‘(…­X§Ó´åÚ5j48u*΃¡ƠÂÓSô)§‰¡Ơbÿ~/ơí ư•GˆÀ̃½qÖh4øûoÑ#MزeËàÁƒkÔ¨1zôè¬Y³Î˜1£nƯºZ­À¤I“†5kÖÑ£G÷ïßÿÍ›7;w₫óÏ?¥mCCCëׯÿæÍ][·$˯[·nơêƠăÆ›}PPnqæ̀™J•*ơáĂƯ]»×¯_‡‡‡ÛÛÛwï̃]ªU¯^½<<< ̃`3•̣ăơë× 6LY`ÿ₫ư–%zƒ}ơêƠ&Løâ‹/²fͺoß>cV¡B{{ûëׯ›t\³+ÿ¸z/…„„èÚµkụ̀å¥́%õ¼Ç3̣¸¼ăhAœ9†(Å¡xqyñôi‹́µxqÅYĂyCӧǹsP³&‰óRé̉@J\"­̣̃̃L8?ư„åË#úJØ2¯¿₫ZZœ8qâ’%K6õܾ}û“'Of̀˜ÑÁ!ö-,, @dd¤T8GăÇ·³‹}È–dù *-ZTûúúèĐ¡CºtétkêÔ©śرÈÈHFó÷ßß½{7_¾|–/_¾|ụ̀ø•ú+á{àÍ›7OüÜuusqqQ®tuu•*Ÿ)S¦Ü¼y@Ưºuu5LÜáÇûôésóæÍ%K–.\øÂ… Æ×́JÆ?®̃«¯^½°fÍ–-[®^½:O<~~~­[· JÎqÉ L‰RŒ2kœ>eË&—G1P¡₫ưWôiªI` |₫9nƯ³^£Áܹ‰ i+W0cÆŒ‰]ÔjQ¿>ö́} l–··wúôé¥E'''//¯[·npwwÿçŸöíÛwíÚµ7n\¹rEoT///)k4¦¼‡b(]¾ GGÇyóæ}ươ× đöö®R¥Jƒ 7n¬¬§NDDD"°µI}³ÑưÍ›7Ê•¯_¿%Ñ9oܸyüøq??¿J•*eÓ ô“{÷î 4èÏ?ÿ,\¸đ₫ưûk×®mêqÍ«¤ÁăêÉœ93€B… mܸQwm7n½}ûö¿ưö[CÓlذ¡oß¾ÎÎÎË–-ëÙ³§t/Ö¤ăQÉ„ϪV­ª̀È«V­ ((¨Gf_2G¢”Ѩ‘‡‡'zY#O'.cF¼{‡ë×ơçwÔhàïùó-w¤́Ù¡ƠÊoÏï¿£}{‹Ï!™j-]ƒ„]½zơăÇ̉Ư¾·oßƠªUëØ±c;wîœ7õ!C¤Â‰Œ#mjùD„……Ư¼y³H‘"~~~~~~111‹/;w®´8uêÔׯ_·lỤ̀₫ưû+&½´uëÖˆˆˆ„îđ™Z>ÁÁÁ•*U={¶nÑÎήV­ZP<Ë–èU'ĘcơîƯûÎ;;v́Đ->ỵdëÖ­uëÖ-P €^É+X¹r¥̣ŒV¯^  r¼ NµZí¨Q£̣äɳvíZƒÙ›ñÇ5©p’ÇƠÓ­[·ƒùÔ„9&&fúôévvvuêÔ1µ’”\¢{çØ 4ÛÓJÍR»WµE{RÛʘÓúRùMÑhôûđnÚdéc(÷̃¿j©¬îÏT₫üùsäÈ‘>}úæÍ›ÿïÿ«[·.€Ê•+GGGß½{×ÉÉ)õ¼ß|óÍÂ… ;uê”#G¬Y³*Thçκm•ó‘˜Z₫üùó–/_.­Ñtóßÿ½ÿ¾D‰ööö:t˜6mZ×®]³fÍ%K‹ülÇŸ9¦T©R...ß|óÍŒ3+–9sæăÇë^>}º››Û’%Kt‹ºûeË–;v́¸qă*T¨`èĐ¡ñråÊÅëÏü‘äqơ_É$«çéÓ§%J”HŸ>}=&L˜P®\9£F2æ¸Zöª¶(&–—f˜Ô,Us”Q£ä́¡NdîL™Tª”z'‘ RŒ¤•+ơsǺu-} å̃‡Oå4Ơư™̉%s5kÖtuu-Z´èˆ#̃½{§{500°J•*ÎÎÎ… ̣óó{úôẹ́å˳fÍZ¿~}m¼DĐỘ‰$Z­644´gÏụ̀åË!C̃¼y;v́(ă“Lz‰£V«}ụ̀eï̃½ .́ááÑ´iSå”z“&M0õ<ƯbLL̀êƠ«+T¨àîî®›«zăÆ̣ûï¿'t_iêÔ©I7>#+ìqơ„……ơíÛ×ÛÛÛÅÅ¥J•*¿ụ̈‹‘ÇƠ2q´(–½,ÍËË+88Xt-(Ô{f¡|®œ¼ß/åªVűc©t©#UßGG¼{g…ÿ *ß¶‚ơ;x«ƒƠư™*P @é̉¥ươWÑI=eÊ”qss;tèèØ‚:;v,444¡füFXƯ/‘¥°#‘E)Z££W¯ä́I™~Ô¨akY£@oßbƠª8k4œ|ă¤:̀%äÉ“'›6m:ÆoÉpúôéM›6é&3$‹`âHd9+Êñ”)fïF¯KîÁƒ¢ÏËFiµÈ[^ @Úuºt˜7O^ÔK‰L×°aĂø=‚m̃Ơ«WÛ·o/ơÚ&3¬X±¢}ûöÇ]ÛÁ6–—fÛ=¨Y*5§³DëÆ¿ÿFµjÉßƠÆQϤI˜´ÜưAå‡Ê¡CغUô¹%G"Køûo©4&¥rÇÅ‹S`§DDb0q$²„óçå¸^=3v°q#ïÜ}Fi’V‹Ï>“-“æơï%äEe[""kĂÄ‘(Ù”64o:ȱ wˆQ¿gÏP¾¼¼h™Üñ̉%9₫ûo´i#ú,‰ˆ̀ÄÄ‘(Ù:v”ăơëÍØ2;Y½Zôé¤y'OÆÇƯ2¹£̣ÛÀ¶m¢O‘ˆÈLL‰’íñc9vs3uë.]ä¸zutí*útظÍÉ‹–É•mÊ•}DDæ`âH”<ëÖɱYs *wpäˆèÓ¡O~ÿȋȕ½¦ÎœAX˜èS$"2G¢äQ̃04}ÁL™ä8 @ô¹P\‹Åi³jÜñđa9öđ}~DD&câH$̀¡CxûV^́Ư[t…(;Q´¨¼˜.]̣vW³&2dW®}~DD¦aâH” ³fɱéă.Ö®-ÇÏŸ‹>J@Pœ́EE¡H‘äíîƯ;9îÙSôÉ‘z•)SF£Ñh4–-[®‹ëß¿¿î2æÉ“Gt]lG¢d5J§L1iÓå¸re¸»‹>J˜2Ù»qơë'owÊáxZµ}r¤^Å[·nƯĐ¡Cu‹¯^½êׯ_̃¼ykÔ¨qâĉD¶½xñb»ví²gÏî́́\®\¹¹sçFEE™WؤăTXR£FÉÊ9ă ‰‰‰Y¸pa©R¥œ‹-:sæ̀?&yÜ=z¬[·®R¥J©̣¥ Z²´"Eˆ®é»}ûv́ÿ¥̃¦6"¥̃”£|Ë °Ü¾DàŸ)ơ+]ºt­Zµ¤ÅW¯^}₫ùçéÓ§ïØ±£¿¿Μ9]]]Ï=kpÛ[·n¹»»»¸¸tëÖm„ •+WĐ¢E 3 ›t\“ KÎ=kgg7ỉ¤DÊDGG7nÜXwÿuôèÑƠªUĐ³gO#Û¾}ûܹs'²3~#̉́/QZưÈJIiö‡IÍR$G6L₫́_´È¤M³e“7ưáÑWG«Kµqó½₫IÆÖ¬‘wäàú'b½¦¢¢¢¢¢¢RçXïß¿u¦z‰ăĉ¬ZµJ·xëÖ-777___ƒÛ6õÜÎÎîäÉ“̉={ؽ{·©…M:®I…?~ü¸gω'fÍ@â‰ăÊ•+Hk¾úê+ׯ_7æ¸L-ˆ‰£å¥Ù&5K‘ÅÜ›F§N ¿ß¤ Ö˜8>x`¹÷N¹£ưûSùD¬îÏT₫üù‡úă?:;;ÛÙÙ•(QbôèÑïß¿— ̀™3§dÉ’™2erww¯P¡Âºuëô¶=uê”1åưưưGŒ‘!C†té̉U¨PaÇ?~3fLÑ¢E3gÎ\«V­+W®è GFFN™2¥hÑ¢yóæíƠ«×£G,rÊz‰£——W9bbb¤5~~~vvv>Œ¿­®’Ê5gÏ0qâDS ›t\“ ÿ÷ßÊ矉'UªTÉŸ?By|’ÇeâhAlăHd–˜9vt4iSåŒvœ“Úºä̀‰3äÅd Đóâ…ù¥è3³[¶l]½zơ¨¨¨₫ù' `ß¾}æ—’ÉAtˆ¬S§NrüË/Æo×¼¹{{#_>Ñ'B&5 k×ậåØÅ2epîœY;rsC… 8y2vqđ`üø£è“ƒ™$ÇLpøˆ ½úàÁƒï¾ûî›o¾Ñ-5jÖ¬Y›6mjß¾ưÚµk‹)²gÏƯK»wïnÚ´©®đ¶mÛ&O<~üx;;;I–¿páBÑ¢E888Œ5*""âÔ©Sé̉¥pñâÅcǽyóÆÎÎnÓ¦MƯºu[ùid%??¿ßÿưÑ£G9rä°à•yüø±V«ơôôT®̀–-€§OŸê_F‡ï¿ÿ^¹æùóçßÿ½½½}›xó¤'^ؤăTØ$=úđáƒF£©V­Ú©S§t+óæÍ»~ưúªU«¦ÜqÉ ̃q$2ËÆrlÊ`ü!ÇṚAÖå̉%9>³g›»£ÿ•ă… EŸ–Úyxx|ươ×̉âĉ7õ àäÉ“gÏƠeÂÂÂDFFJ…säÈ!eÆ”¯P¡BÑOxúúúèĐ¡CºOĂxÖ©SGW̃ÎÎN£Ñüư÷ߺ[t–/_₫ôéÓøYcTTÔï ḲÜuusqqQ®tuu•*ŸˆĂ‡WªTéÔ©S‹-*\¸°I…M:nr*™¸W¯^X³fMîܹ¯^½úæÍ›;v|øđ¡uëÖ/^¼H¹ă’A¼ăHdºä¸`Aă·>\¿øBôYP2hµ̣sê#Đ¥ ²e3kG b×®Øxî\ &ú̀ÔËÛÛ;}úổ¢“““——×­[·¸»»ÿóÏ?ûöí»víÚ7®\¹¢7ôŒ———”5S̃C1¯._Œ¿€££ă¼yó¾₫úë x{{W©R¥Aƒ7VÖS'"""‘Gغî‰ĐưÍ›7Ê•¯_¿%K–„¶ºwï̃ Aƒ₫üóÏÂ… ïß¿¿¶räXă ›t\ó*iŒ̀™3(T¨ĐÆu×¶qăÆ³fÍể¥ËÖ­[5j”BÇ%ƒxÇ‘Ètæ>§;WÏœ}”âààP¼xñ£Ê/+À‘#G4··wụ̈₫ùg—.]¾úê«¥K—ê=Ă5©°IÇ5µ’Æsrr*X°àÇ•+u™bîܹSî¸dï8™H9„„)•”·“vï} BPGtl‚&%Q̉.hâÿË„L>đi‰–­Ñú/ü•üƒZ©¥K‘)“¼Ø·¯Y{¹rE9‘LÂ>}:WñơkêÔ©¯_¿nÙ²åưû÷+VLziëÖ­ ƯÉ3µ|"‚ƒƒ+Uª4ûS+W;;»ZµjAñ,[¢{TcƠ»wï;wî́رC·øäÉ“­[·Ö­[·@z%µZí¨Q£̣äɳvíÚ$³Æ$ \S ›¤[·n}ú÷ß߯_¿   k×®+V̀ÏÏOo'­Zµ’zë$Y8ñă]ISOÀ€[¶l©[·n§Nrçνk×®Ó§O5ªT©RI—,Lô@’6(Í ªf–kÚ¬ U8â÷cíăªÚªˆS5K₫+¯-ÿ6±ÉU¬qpƒvîLöû{ëV*ÿˆXƯŸ©üùó·hÑ"00°fÍ®®®E‹1bÄ»wït¯V©RÅÙÙ¹P¡B~~~OŸ>]¾|yÖ¬Yëׯ/m«Ü›IåÏŸ?`ụ̀å̉©S§øï¿ÿ´ZmhhhÏ=óåË—!C†¼yóv́Ø1((È"§¬7¸V«}ụ̀eï̃½ .́ááÑ´iSå”z“&M0õ<­V›H7í©S§ê؉7>#+©¤Ç1ñÀµZmXXXß¾}½½½]\\ªT©̣Ë/¿y\-·(6yß(>//¯àà`ѵ 8BBB,ö̀B9è³q¿>'O¢bÅØØÙq;ÿ 0 Ăæa^ªÎ Nó1¿zé­·ä›"ZÑ¢~é»vÅêƠ¦ïBùsơâ9R‚Ơư™*P @é̉¥ươWÑI=eÊ”qss;tèèØ‚:;v,444¡füFXƯ/‘¥°#‘)̃¿—ă5ŒÜHÊ\½*¬îk±V×B1‘¬12 ÅĐ«¸ª…Ö˜ïđn–UEƠD?øi É¬º§Û¶G9óÅ5x₫Üô]́ß/ÇlÑODjÅÄ‘È?ü Ç#G³EÜéX‘'€Zk¡Í€ ]ÑƠà«9‘ó0ëÁD̀ÅÜb0¶fdèƒ>ÇpLJ%'`‚7 ç=Ïđ̀>h₫‡ÿ ¸ )́àA9₫́3Ó·¯SGăö¥4ëÉ“'›6m:v́˜èX±Ó§OoÚ´I¡’‰#‘)”‰c“&Æl¡́ ó÷ߪ\åí`÷ôÖgEÖ£8ª…öÔDMKî[|{—µĐ>Äöhk°̀LÑ@S7wƯ`ØÎƒ__”*%/¶kgú.–/—ăjƠDŸº4lذråÊ¢k‘Ú®^½Ú¾}ûÙæÏMDX±bEûöí?.º"¶ƒm-/Ͷ{P3‹5§3½£é[XL/ôú?Ç_?s†!Ug(©ƒ:qĐàKÎp~ˆ‡™‘9U/MQ¾Ư gÎdlŸ’?.ü3E¤Ä6ÆăG"³”,iL)å-¨ R¯v¿á7 4ñ³Æ›¸©…6•³Fp@ íu\ÏÜz/…#Ü.Yå̃™µouùç96g̉qăä¸sgÑgCD¤‰#‘Ñ–,‘ă#ŒÙââE9nß>•ªÙưZBö‘íØ®…¶ ¥R% )ŒÂ¡5˜¹¾À G8zÂ3Ñk˜|•+Çé •=»‰ÛO*Ǧ̀fID”:˜8MÙÀ±k×$‹gË&Ç3g¦R5Đ,Ă2åI˜¤…6~*)Đ̀ÑB»ê¿UzëŸà‰̉#½9;U'äøñc¼xaâöÊ™Đç̀}6DDq0q$2ÚíÛ&úTë,—qYrM!̉B;ÍƯeʪñ¶†ڽث·₫#>j ™é¢+h¾eÔ=K7^·N¿₫Zô©ÅÁÄ‘ÈtF4^Û·O}}S¼FưĐ¯$â4» FđMÜLưkcªº¨«…6₫„×ßà 4!]Asôé{{y‘Ïœ‰Èf0q$2ΦMrlDÇ-äø·ßR¶jz§5Đh¡-‚"©{’¥i¡ư¹¿ ¢` ”];sDEɱɽ\”?lmÚˆ>""G"ă(8dñÈH9vqIÁzé=ŒÁ1ˆIåkc)#0B íp W®¼‚+hÚÀụ́§¦MåXÙp1i_}%ÇÛ¶‰>""™ƒè Y‰Ó§/û¿ÿ-N/k F°uƯh4h6fÏǼ\Èợ*Û°-+²>ÅÓd́8µưñ‡<,ăúơ&>°.WN₫‘û÷ß8]µ-ÄËËKđ""+ÄÀ-/Í ªf\JăÜNL´,RrgeÖè ç7x“RGJI¾)gq¶,Êê­Ü‰ ÑPtƯµt)ú÷ƯÜLéaưàró2{v­̃ø1qZ—.Á’ È º^I»¦Èí'M]"¢d`âH””3gäxàÀÄ˦èsjeÖØ Íâ èK“Úᨅ¶5ZKk>àƒ—x)ºjI¦˜Û„–¯Đ‘ˆT†‰#QRLià-Ç,z/̀ rºá Ïßñ»èë"̀Vl½ƒ;Ê5îpŸÙ¢ë•eŤ:å+p@G"R&DIÙ¸QóçO¤àèÑr~V6O‹Ç²Â¾̣#rvˆ1I34S®…Vm]­•Q¾}kܲÉÄ”)¢Ï€ˆ̉®4‘8Î;wüøñ·nƯ*_¾¼³³ó¶mÛúôéóöíÛ„ÊGGGwëÖí‡~xñâEơêƠsåʵgÏæÍ›Ÿ:•†¦w#ؼYÛµK¨ÔéÓrܤ‰›™¥x7v‹¾ ÖÇ®zÙ¶ÚrÇcÇ䨨›DD*`û‰cppp@@€§§çîƯ»ö́ÙÓµk׋/₫ ́-צM›Î=Û°aĂ}ûö-X°`íÚµ+W®0~üxÑgC©K™8*GE‰kĐ 9^¸0¹Çl…VR\ ¥ê£¾è«`­Ôœ;V­gQ9èS‚”Cƒ®\)ú ˆ(²ưÄqóæÍ111C‡Í–-›n͘1c\]]wíÚcp“³gÏèÖ­›ƒƒƒnMåÊ•‹+vçÎçÏŸ‹>!JESJ9G¾|É:à Üø¿J‹çq^ô%°nZh+£²´¨ªÜQ9zÁ‚Fl œŒHùe…ˆ(Ù~âxêÔ);;»ZµjIḱííkÔ¨¦KăË‘#e¨Ơj_¾|igg'¥’D:ÏÉqÉ’ÉƯ[‘â ¸ úälÁ?ø§-ÚJ‹hT2a£̃àNÊ»ÛI3aºk""K²ñÄQ«Ỡ¼y3K–,YâNåQ¤H¡¡¡·j̉¤IÆŒ§M›vüøñ·oß>|øp„ ÷ïßoÛ¶­‹‹‹ès"ZµJèå­ŸLÖA”÷Æ |DŸ¶ØŒÍC1TZ̀gpÆüƯYÎƠ«rœpZåÜE‡‹®>¥E6~ÿ,222::ÚÍÍMo½««+ẫSṬ̣̣Z»vm÷îƯ»wï.­ܹ́óX£§ọ̣̈̉[³{7»8ˆtÿ₫}S7qÚ³'Û§øI­Z 4CÛ´©€çÍbTc5CNfö́I‰Z¥æûBFâ›"\ƒ DWA-l'J-ÊFg d£GËqrúSgDF)îHYcêk‡vÇ „S5„¬̃°¡_¿nÄ•*Éñ;b+ODi'®®®ñï,¾~ư€ÔÏZéÉ“'‡úüóÏ{ôè!­̀™3ç€>~üøë¯¿‚è“™3å¸kW3wr̃ă½´ø3~}Z¶¬*ª>ÄCåâIœ[%åOQëÖI•V~AB´X%6b£¨Ê(Çß²%Ñ¢mÚÈq2Ç%"2‘í'zö́ùĂ?(P`çÎÏŸ?ïܹó5kâî(ñđđعsgß¾}œœ>|ÿ₫ư5kñ¼¹S§N¢O…R˱c‰¿¾s§÷́iÎàÉ%\’§bªèsN‹¢èe\–; ƒ²ëLjRÎ@˜À=n""ñ4z-ù(ù¼¼¼8£Ú„„„˜6 rüC¿# Bë;2&WI9ọ> `ê3ùMI1p¡4JK‹Zˆù«˜!>|ˆ¯^E±b 5 £>µ3ÆY°êy_HÂ7E…̉́g½Jï8¾ÿ₫æÍ›'Nœ ]JĂôf₫D9CŒYăZ¬•â ȳFU)…Rë±^ZTæô©éüyE•J%ZTÙ{øp!µ%¢´Iu3Ç=ztñâÅçΓn…¦K—®víÚ₫₫₫́ÑL©ä¬bpCO •S שcκBîFûïDŸ0¡:ÜÁ±ˆVTMêßwT̃büøQô!"2D]wÇëççwö́Yåô?îÙ³§iÓ¦7 k·NiKR]ª•ư©Í˜0¦䯲ÍĐLôÙR¬ođMô‘…ÜwT₫è%p³û“₫ưåø·ßR¿ªD”6©(q ضm›rMæ̀™5ŸÅÄÄ|ûí·'O ẳå§·¡vEY¬Q´¨É»W>ư¿‹>[’-Ă²z¨'-¦~îØ¶­Ÿ;—hQåW–>}@D”*Ô’8~øđ! @(P`áÂ…çÏŸ?}úôùóç—,Y¢›µ%::zƯºu¢kJi€²cOJ2ẃ₫p!uëá!ÇQQ¢¯‘‚Æqœ8qbΜ9ïƯ»wèĐ¡#G)RÄĂĂ#,,́Æ?~+W®)Êöe€E‹Ø½€,J™8¦O¯÷â¤I†ă$=ÅSåÓϨ!ú<É(7qósÄ [¥SmpÇ… åQŸ:wF‚ƯÛ´ÁÖ­±ñơë(RDàµ"¢´@ESzyy™±• 'üI³Ó©™ v%:Ù`R3&(2H‰cÚœ`0>k™Em-Ö*Û8¦ZîhÔÛåË(Y26îØ¿ü’üăZËû’¦đMQ¡4ûY¯¢GƠDêâîn©==ÁåíFfÖ¥ ºô‡<Úvª îX]ñc¢lyG‰r¼~=ˆˆR˜UÀ¡IH´/ä8^Ç£G娤ŸVeëÆ#8b–¤‹±ø8ŸÇyƯ¢;Ü_àE²öh„ä¶Í™v‡›ˆ(…¨(q2dˆè*P·i“ÇëR­đdâDcwùO>Bx˜·­Ô9œ“î5¾ÄË&h²;Rôˆé̉WnÈ̀Ÿ<ˆÚµÅ]$"²}|TM¤ ́ăë«÷¢r”xƒ&Hy»ñ(»©²uă_øë'ü”̉G\³F́ůüóí·¢.¥‚ï8¶nƯ@¶lÙ–,Y¢‹“¤7Ÿ5‘%)g¡NXÆŒÆîï1+o7VC5ÑgHÉ¢…VºïØ}¡™'ÿÜØư½Å[)®ª¢O,é®I÷¯âê7øæ{|ŸBÇúưw4ÿ4±y:8’ø€N·n‰¾6DdËø¨è“Y³ä8îPCYN6HD©BEă8ê|üøñÖ­[wï̃6X Q£F¢ëH6êƯ»„^QNKm¸wB<û·*'¬#[̣r!—.®ŒÊ)×Q&_>ܽỵ̈ :uWbâDyíô鯶Ă%"2‘G­V»zơêÙ³gøđ!‘bL)ơ½}kZùQ%Å1Ptơ)¥äDÎ%X"MH¨&…rÇ;wä©«;w6”8v́(¯<™‰#¥=ª̃¾}û÷ߟxÖH” T.={&Çñ7lä§̃ ±PôùP ê‡~QQZ,â¢k”ؽs"¢dRQâ¸F1I‚½½}Μ9s"ºd£”3׫§|ÅÔ™·A£¾ʉ>1JqÊÖAR~m° 9säxØ0C%”_k”_wˆˆ,G£Ơ¦́èµÆ+]ºôÛ·oíííg̀˜Q§NL™2‰®‘™¼¼¼‚ƒƒEׂâ )P @b%öîEưú±ñ¶mhƠJzE£§Ï˜_åÀ~)=:´UKúM±*Ê÷ư)zÀẶ‡HüG10µjÅÆƒáÇÍ;½/¶o ¥ÙÏzƯq,X° //¯¦M›ZoÖHÖjï^9®[×́Ư„"Tô™ÊîPY‘5%á¡ÈEŸ>÷rÍr¼ $ˆ(E¨(q¬P¡€7õˆ®¥IûöÉqæ̀Rx₫¼¼º«}£•ϦOâ¤è³¢ÔS5º£»´˜3Êlß.Ç{âDD©GE‰cÿ₫ư ,ªĺH”J.^4¸Z91 Ÿà‰—GyÑgE©j%V*{¢§e÷_½º38‘r°¨ D_"²A‚‡ă80ÎH%·oß6mÚÆóåËggg ¯]´h‘Ø:Ṣûïr·³µMÑT„™-̀Ȫi¡•î5®ÄÊʨܽ-¸ÿ °{wl¼s'ôG'›8ëÖÅÆáÁÑ׃ˆlàÎ1^qçç0†úÛ¢¦Ù³j–tÓr©ßAxø0₫jÑ3†ƯbLb«íưŸâi6d“-û“đö-¤à3aÔÔÎ\ñØêûbƠø¦¨Pư¬WÑ£j"UPôŒ9{V^=xpÛMÅT)î‚.¢Oƒ„ɬ30CZ´lcGGG9æpD”ú?ª0`€è+@w`Å sçÊ« œ§0¤x ØN7M…Q?à‡§ˆíùÜ6`ƒ¥v>~<¦~ú’̣í·øßÿâ¾Ü¾=6nŒCC‘'è‹AD6EEă8ÚŒ4{ûZÍ’xĐó¿ÿaÊ”Øøñcd‹}ÎhüC¿Ù˜=#t±¼®áè3¶6ÿôMy¯ñ_ü[,¶çD~2ODÅO3Ù Ù³MƯ¹Í¿/Öˆo ¥ÙÏz>ª&;O¶lf́@Êü¿EŸ©‚rPOå´„Égo/ÇQQq_« HO•÷̀‰ˆ,Au‰ăíÛ·×­[÷́Ù3ÏŸ?3fL:uZ¶l¹xñbNcM)åĉøë?—ă¦Mß>Ăg¢Ï‡T!7rÇpiÑ‚Đ‘”ˆÈ̉Ô•8®_¿¾I“&S¦Lyñâ€Áƒÿúë¯÷ïß¿zơêüùó{ơêÅë”jŒoà¨ö™£đ̉l̀V拃‘T+ă4k&Ç₫ïå–¼»ID¤¤¢ÄñÚµkß~ûmtt´nñâÅ‹§OŸV8ỵä¶mÛDW“l««*G_ßÄ6ZƠR<ƒDŸ©K b¤x!̃Æm‹́V™êß1W~Ñ1wÆj""ƒT”8®X±BwC±jƠªîîîÔ­÷ññùöÛo3dÈ`»̣ ‘Å)ºTGDµ…r†â²(+úHÎáœB!‹́Sù·°jƠ¸¯µk'Çóæ‰>{"²)*Jƒ‚‚”*UêçŸöđđ8räˆnư°aĂÚµkW»vm7nÜ]M²9gÎȱbGIÉ’‰m]ơ¥xöˆ>R£̉(ỰLç.pI₫>sæ”ă˜˜„ËƯ¶̀ N""%÷ïßàăăàÙ³gW¯^àââR±bE¹rå)ºdsöî•ăO‰ăÏ?Ëëoàø菱Ưb(!Êö ođf6L%'¾=äxÓ¦¸¯yz>c"²M*J<|ø@`` î±uÍ5ííí¼zơ @–,YDW“lr,üùuÿW6pT~<ëé‡~R< ³DŸ ©rîAåøMfS~½éÚ5îkC‡Êñ¢Oˆl‡Ç9Gs$"ËQQâØ¬Y3ï̃½›7o^HH€ôéÓרQăÅ‹ 4Đ́X½zuÑƠ¤´%sæ_:¹/«7¼E×”¬@7t+y₫öhŸ̀"ÇŸ¾n2dăO ‰ˆ’OE‰cÛ¶mu •kœœœ¢££ucôd̀˜±C‡¢«I¶+}zƯÿ•Ÿ³Ê'~z ³[ I9Ï&l BPrö¦́3Ư§ès#¢4@E‰£ƒƒĂ/¿ü2`À€/¾øÂÛÛ»oß¾cÇ•^ơđđX½zu6³¦ƒ#2ʧ1Fưư ¯¤8r‰®=Y+¸"ÅÅQ<¥Ó·¯âẀß‘‚GéÓ§2dȆ ¶oß>|øp...¿ưöÛÑ£GK—.-º‚ds®^•ăOƒ8*û¸»̃n(†JñTL}dM£øWøJZLæÈ&Èñle_måƯr6s$" Ѩg¿ùóçë‚V­Zé:ÊX)//¯àà`ѵ 8BBB (`à…ùóåÏ׫WQ¬¢ÓBB¿Ê Ễ²d¼ß”´Aù#´«•=¼«„~bùQ'¿/êÄ7E…̉́g½ƒè ȶmÛöøñcµjƠ²êÄ‘¬‰r,bÅw¼ä.] otç¥ØRPZ£…VÊ»¡[rG"¢T£¢GƠ­[·Ö÷îƯ]J3”£0®#g‹!‹Pư™œÑyf)†8Qñ‚b Mpö"²%ƒ jÙ²%€¥K—>ỵDtu(møøQoÅÂ…r\¦Œá@₫ùäG2›̃ØŸă1̃̀ư(vóí·8#YUûûûÈ=ûÍ›7ëƠ«W¬X1wwwFÿ[ø¢E‹D×”̉´i˜&ÅƠPMtuȺ)XOĂ4 w´j …¹s1nœèÓ%"«§¢Äqÿ₫ưRüöíÛ³gÏ®¥%µkˆ‰‘W$4ؼ̣¶ĐQ]o²zë±¾#:êb 4æơµZ¶L~gØ0C·ĂÂDŸ(Ù=ª&JmwîÈqƯºˆ;œr"#8YPtPÚæ ä­ư[ùcŒÂ…EŸÙƯq0`€è*P£́S·.â6kÙ̉ÀĐI7`ƒè q÷¥Ö?á§Y˜å WSw’.]ü&»À°a₫´®_EŸ+Y7ăh3̉́ØNjfx´¶m±ukl¬Ơˆaï8|£qh:¥ưØ_u¥E3~º6n„4'kÏX±âÓ ̉u¹r8u*Éưđ}Q!¾)*”f?ëUú¨:88xÏ=7n zơêỤ÷I¤O9ˆc\½Ŕ/ѵ'›̣%¾,¹K´4uíÛËñÏ?*qú´è³$"«§¢GƠ:Û¶m[¸páÇu‹UªTqqqñơơíÑ£ÇàÁƒăw²&2_Ü/$۷˱r¶6I[´•â-Ø"ºödkÎâ¬tKû7üv7?Çç&íá³Ïä>0oßÂÑàà€¨(Ñ'GD6B]w§OŸ>v́X)k”DFF.Z´ḥäÉ¢+H¶lĐ 96Ø3æ.HqI”]_²AÊŸ±Â0¹_Ë5r\¤È§HùÓ ú‰Èº©(q¼råʪU«t±½½½´^ºË¸aÆSF4Đ!2Y¥J=’WÄ¿µư~“âVh%ºÆd›|àṢt/µPˤÍ5’ăû÷?EÊ1ÿ-ú‰Èº©(q\ºt©V«µ³³›0a™3g¤ơ®®® ,Ș1#€Ơ«W‹®&ÙÇåX93[”Ï©7c³èÚ“ÍRNbˆÀ+¸b̉ærû€ºtiy•̣$‘éT”8hÔ¨QçÎc󾀻_¿~Í5\»vMt5ÉV({ÆÔ­«L#;w6P< r+1{؃(Å\ƒü‡®J˜´í²erÜÇœ!‰ˆ£¢Ä1,, @B#.\À³gÏDW“l…2q¬VméRy©_?ư²ÊiÍP˜ÈH^đªƒ:̉b}Ô7~ÛæÍåxåÊOQŢωˆl„G///[1jµÚ“'O(X° èj’­P₫ (ǪUơË*“Å)˜"ºêdûöC‚u/ö*‡‚JR¦LñV)¿ ­_/úäˆÈ©(q,Y²$€'Nøûû;vL·244ôÈ‘#ƒ ̉%Å‹]M²ÿư—đ‘xÊÖEPÄø •O«c–ễ]^¥ü’DDd"%}ûöơđđ°gÏ^½zéVö́Ù³wï̃û÷ïàââÂi )¥eͪ¿†Ó ’>đ©ểbS45rCe#Ưùóă½|ô¨è3#"+¦¢ÄÑĂĂcö́ÙY²d1øª‹‹ËŒ3ræ̀)ºdsJ•:~\^ßÀq=äG{íÑ̃¨}Y‘âØqwE׈ˆ̉:%*Uª´oß¾~ưúy{{gÊ” €““SñâÅưüü8P»vmÑ$[ñæ×­›HÏN3Hb‚Ǘ;?̣¹ƠâÅr˜Îœ9³GGGOœ8ñ́Ù³¢«I¶FùÔN9Ú€P„JqđC—DR6mT̃€4Aß¾rlhª"¢$©(q\·n]TT€|ụ̀-X°àüùó§OŸ¾pá¢E‹t‚?~ü¸fÍóv¾eË–¶mÛ–)S¦jƠªcÇ}ñâE’›\ºtiĐ A¾¾¾åË—ïܹó¿ <Ü$ë–!çÁæơư…¿¤¸Ú‰®(~|{\M’åÇ“ă%KẫQg3G"2‹Ç3gÎptt\½zuưúơd̀˜ñË/¿\»v­““€Ó§O›±ç¹sç?₫Ö­[åË—wvṽ¶m[Ÿ>}̃¾}›È&́Đ¡ĂÁƒ³eËV¦L™sçÎuíÚơàÁƒ¢/YZ ½̉Ư¥xV‰®(:¢cFd”§czâå§N•ă€¼yååŸ}6Dd•T”8f̀˜@‰%räÈ¡÷RÖ¬Y}||ØÛÛ›ºÛààà€€OOÏƯ»ẃÙ³§k×®/^üá‡ÚäƠ«W£GvppX»ví¦M›6lØ>}ú &ÄÄĈ¾N”lÁ–m Å:Ä-¹˜̣ÓH ·¿ñ~ƒoDW‡ˆ̉%eÊ”pûöí>è½uûöm˜5WơæÍ›cbb†-[6Ư1cƸººîÚµ+¡,pÛ¶m¯_¿îׯ_Ù²euk|||6lǿÙ³K—.‰¾N”lGäÙ8–>i%ÅÊçx[±U•·‰„S̃ht„câ…ưưåø—_€OÓˆˆ̀£¢ÄqäÈ‘yóæ 2dÈÿư'­̣äɰaĂ?~lggçççgênO:eggWKù°··¯Q£FXXXB]m9¢ÑhZ´h¡\9sæ̀àààR¥J‰¾N”lÊÄqw~)V>µVö§^‰•¢kL$ÑRüï” ăSÎUƯ§OܯG›7‹>"²>b?p`œA%\]]wîÜË—/‹-úå—_ê]’Ơ;zT >4\$‘¢kI” -´Rç˜ÎèÜ ŒÙ*2đóCï̃±ËK—⫯DŸ YÁ‰ă₫ưû ® ̉[ùúơë„Ê'$222::ÚÍÍMo½.C}₫üyüM>|øđæÍ›Ï?ÿ|̉¤I6lÖçÉ“g̃¼y%J”0æ¸^^ú“ï̃½;å/'%è₫ưûR\ÀĐfw÷˜»ºx»óvd]ßùuç0>Ÿ"”o ™ªóg×¹¬ÓÅ´®Ư¹–PÉ6m<¶nÚlĈrăîC‡ N¬À÷E…ø¦× AƒäïÄ6NS®ë´®G¶’n ́W¯^ÅßäÍ›7ñ¼ùôéÓ3fÔªUëƯ»w[·n]´hÑ!Cv́Øà}Ç´9¥ÊÅŸéơ_ÈÅ `'‰‘̉úµ.ká"ºê¶‹Óïm-Ö®ClâøAóáqÇ•PÉ`É5k°ơS“Ư-[Ü•½º₫|_TˆoXñ?Öăß!J#' HÑư»¹¹i4ÈHưÇáááøtßQ®s7€éÓ§×®][4èáĂ‡Û¶mû믿ڴi#ö¢‘¥,µ€Oư£”M¿´Đ®Q̉®áZQƠÅ•Q9¡Ÿ[åWƯ{÷€6mäḌåKÄ{ CD”Á‰ă!CRöô\]]ăßY|ưú5©Ÿµ’““SÆŒ5¯¯¯rư—_~¹mÛ¶k×®lŪ˜®Rœ;wl° ˤ•_ăkÑu$J¼|á+ͨ̃m”£(Ơ¯={bă‹ơFøH‰ẳ¥3Fôy‘5QQ¯êâéé¦Ë%º–=7É–-[ºté483èPëºéKj̉ ~ï=₫€@¤b!ÏJ° Û”£<*-\(ǃÖÊ-4°lˆˆL¡®6'O\¸páơë×ợ<¥«W¯´Ï:uê=z´qăÆº5Z­600ĐƯƯ]7rd|¾¾¾«W¯¾~ưº®óµń¢E‹¾H”<±x$åË‹®‘¹₫Â_ûÇ-2|`ưùçr¬T¸sGtơ‰ÈʨèăÉ“'»víúï¿ÿ¾xñ":a¦î¶mÛ¶vvv .Ôµkđ́Ù³Ö­[§K—N·&"""$$Dê¶Ö²eKăÇ—º]_ºtiÅ®®®uëÖ}(y>% O#5pœ‹¹̉Ê ˜ º®DIk„FY 76S S¶ăåœKt­‰ÈZ©(qüñǵZËwJÈ™3çÈ‘#oß¾Ư¬Y³‰'vï̃}îܹ̃̃̃½¥Á̀€ÀÀÀ ôû”>+Vløđá.\hĐ Á€ºwï̃¾}û>L<ù³Ï>}(y>%K¤{öŒ †c¸´̣[|+º®DF C˜ÿÿ3X&ÎÓê¼È çΉ®>Y=ª–úº·iÓ¦qăÆRïæäëÙ³gÖ¬Yûí·;wæÈ‘£sçÎC‡ƠÈ“¾}ûzxx¬Y³æŸ₫qww¯S§ÎàÁƒ .,ú"Q²>­ûÿÔH̃ˆTä;|7cu±Ü^â¥^/¿”ăuW¿X+-,]Ê–Ddlg§¢[¡¦̣̣̣â8j; Ú§>OES0Ư/Á$LŒÉº5ßá»ođèZÛ8ùM!Kæ’đ₫h¦zñî]l¬UFÜO¾/*Ä7E…̉́g½̣3Ư4ĐÎÎÎV5’UƒÜä ]»Ø@Ê0k$«ó¤¸Å/ |Z=SE×—ˆ¬’R´îƯ»;88ܺukÍ5ê¹J6©äÉ$•CY¯tH÷ä¹§k¢¦^^½äxƉ®/Y%µq,]ºôèÑ£§M›6mÚ´ü1[¶lz#)ếرCtMÉj}æé&äáIjƠ€Ù˜-­™†i¢+JdMØ´›uñy„G9#éÍv́@“&¢ëNDÖAE‰ăơë×—,Y¢‹_¿~ÈPDfúÔ¥:ú­…F`„K ˆ¬Îßø»*ªêâœÈ©7¬ă„ ˜̣i¸ŸĐ»7~€+˜8‘‘Tô¨zé̉¥̉¸‰D)"̃èß2ˆ®‘EUA•<È#-Çxå«ß*Ƙ„OmûMt­‰Èj¨èăéOă¤TªT©Aƒ‡(Ö‘#n£ ´B×êK9?5o7’µ»‡{Rëi˜65~0^tM‰Èú¨(q´··àêêºbÅ UŒlÇ¿ÿX¹€Ÿw~j6p$03Fc´.ÖÖ±kW¬YïE½zØ+º²DdMTô¨ºlÙ²räÈÁ¬‘RÔrøIqÓ•Y·Q%ůđj7vK‹q¦‘Võ,ºÊDdT”8úûû»»»_¿~=00Pt]È–=A6åâ:¬“bø‹®‘e„#\¢¡gÎ,—¹O³a-_.º¾DdTtoï‡~È=û‹/úôéS¢D OOOƒĂñ,Z´HtMÉFdÉ}ÑWZ3óEWÈ2œàÔMv vü²¦hú'₫ÔÅ5kBúz //cß>Ñơ%"ë ¢ÄqÏ=R|ụ̀åË—/‹®Ù–đp—PRZ¡ë‰HÑ5#JâO©—̀́ˆ@„œ,\ˆ’Ÿ~aá>Ô]S"²*zTM”²EÜ~~ø ¿I‹=ÑSt‰,lvI±3œuA‰rưøRt‰È¨èă€DWlÚ‘#ˆÛ¥ºHTCi1¢«Hda ĐÀ®¯đJ·83uưf̣çÇ;±e> }z|ÀÊ•èÑCt}‰HíT”82DtȦ9 NÊuOñTía/ºD–÷/¥Ö£1Z—8#Ï̉>ó— ?V¬`âHDIRé£êààà={ölܸ1<<<**êƠ«W¢kDÖKỵ`?öK‹_á+Ñơ#J)̉˜ £0€¾r—0,Ơcú÷ߢ«IDV@u‰ă¶mÛ|}}›5kæïï?qâÄçÏŸ‡‡‡×ªUkÁ‚Z­6ùû§´́*I±Ÿúđ95¥ Ó1]oâæyœ]#"²VêJ§OŸ>v́؇ê­ŒŒ\´hÑäÉ“EW¬›²gL¯^Aˆ´è Wѵ#JA·pKË  €™3åWçc¼{'ºD¤v*J¯\¹²jƠ*]¬›~PGÍqÆ §N]M²bÊ1¡¹NHqc4]5¢”U¿À̉â 9R~u(æÀ¢«IDj§¢Äqé̉¥Z­ÖÎÎn„ gΜ‘Ö»ºº.X° cÆŒV¯^-ºd•4ñn¥đ95¥5g ÿ]]‚%Jp₫"JÇ   5êܹ³£££̣¥úơë׬YÀµk×DW“¬RƸ÷ª‹Å%\’s"§è ¥e¾è‡¡K÷ >Ο]A"R;%aaa (`đƠÂ… xö́™èj’UÊx̣äÔ‘+ÎÜ&Å5QStíˆRI?ô“âhD×]ô›´8„óm‘T”8zyy0ØQ«Ơ|Pư-Ɇl¢kF$L"äÖ üñă`c0}à£GàSQ"J€ºî8êaÖH–qôèŸh/æsj¢Xƒ0H^8WÀ ŒÎ¼y³èz‘z îọ́åKS7qssXac¤Ù³ê5q¢æÛOkå>Z¨¥gXÚÄö₫j§—L¡[¸]0*{ûGD׋âà/‹ ¥ÙÏzÁª+V¬hê&ió}¢d9rDt ˆTêΕA™Ø…[… Ñ®û¯~7ѵ""ƠRơ£j"‹X˜+68YZ¹‹D׋H¼̉(]‰¦óÇÑ•""ơbâH¶o¹öSϘI“¤•0À¬Ù[¸%/Œưî5\À;D”µôªÖh4… *]º´Oæ̀™EW‡lÊ!ø®‘ªMÅÔñ»đ(Ç¿#ÆV\ç%ºRD¤FjIµZíÍ›7õ¼¹}ûöÏ?ÿü‹/¾(]ºt™2ẹçÏ/ºjd+úÉsRÿÿ]"‡qrâ˜ư¿®o?̣–#$¸WơåË—/|rçÎøÜÜÜJ—.­K"}||t£‚«\íi¥N1ï>Ø;¦ØŸZuØQTUáQNÈSsñwDUøË¢Biö³^đÇ%J”(Q¢S§N^½zuñâE)|ơꀗ/_>|øđáẮíí .üûï¿‹¾hdMVŒøĐ( 9CóÆY›9\·ØơƒßôËEWˆTG-ª¸ººV¯^½zơêºÅ»wï^¸páüùó.\¸víZTTTttôµk×DW“¬̣̀ÎĐ̣WiM_ô])"5ÚÛw~Ươ±=ÉÖ¦_±L‰HŸz{UgΜÙÙÙÙÙÙ9S¦Lé̉¥]²V'ä€%ư¥5œ0†È /§ùÂONíTüAD¢¨ècLL̀7Î={₫üùsçÎƯ½{7~ö•!3y>–B~V €Ư1ËưtKZhů-ÑRtµˆHE'¯_¿Ö¥‰çλxñbDD„^Œ3–,Y²̀'îîîb+LÖ%\×^«Ê?̉h!ºRDêµ₫ƒ́bûåªZ±— ) N+T¨¿[wö́ÙË”)óÅ_”)S¦X±b*º-JÖe¹î±ŸSg`Á]ƒnkđkK©Yp4Ù¢ëEDj!8'“²FƯàºÛ9räĐh4ÂĂĂO:¥·IåÊ•ÅÖ™¬HlâèsQZ“9DWHÅzơÂ8 Ơviøª¿đ×{¼Ï€ ¢kFDª –›ỷà[¶lI¼dÚ6‰̀så à%ÿÀT¿u%ÊÏoи… 1MÿÄŸMuë2"#X‘{ ­[à/…C0DtmˆÔ-[¶ùº_“Mđ!½´z –ˆ®©G²Yu©ëí•Ö´C;Ñ•"R;;ÄÄF̃K+`€èz‘*~T½cÛ\SJY¾È)-æG~Ñ5"²ụ̀ú₫ưø–ö“&y/̣§p*9{&" 8q,\¸°è+@6kÅ `±|›„ư©‰Œñ¦]»ùS†xă ô_"%§qúîđ QÇGƠd³BB€n«¥Å†h(ºFDVàM»vÅqU^.wZ  €èÚ‘`L)MÈøNt ˆ¬„6S&¹q?vùLYe¾8ăEWˆDbâH¶éömàûo¤ÅùS²‹®‘5™¯‚ ‰ÿm)†i¢«FD"1q$Û´|90fº´Ø>´®èY[a»´ôăq̣EOx® ĂÄ‘lÓqß•//ºFDÖĂÏOoÅXŒ•â'xrGDW‘ˆÄ`âH¶éIûR½%căÎ Ư€—¢kDdmjׯÁƒ]±f ºêV8€:u°ë:£³n-´¢+JD©J£Ơüµ¯^½ú“'OLÚ$88X`…áåå¥₫JÚ6»°¬ÚÏéb­Bnß.P€c«KHHß}_Ö¯G§N/áæºơ2àƯ;Đ@#^‹µRI)‡¿,*”f?ë?ª®Y“-¬Ẹ́¤¬1Vñâ¢kDdm:vস[ÿ₫}l ¼ËÈ–DiàÄqôèÑ:tÈ›7o¦L™u+3%Jô#µ;£Ŕ¸­Ô¨!ºRDÖª2ä¶CRßÅîè.­¬‚*¢ëHD©GpÇ̀™3O4I?|øĐ××À¹sçD_²b="âÓ÷‹A;Q½ºèJY«…Tgtñ Aøë/X‰•«°J·̣8‡"4̣ˆ®)¥ă˜1cÆ/¿ụ̈Ë/¿]²n·2É}ª‡<Ùđ#‘Y6đÎJ+vî”_<‰“RœyEוˆR‰Ç,Y²,Z´hÑ¢EºÅ˜˜˜§OŸFë 2ÎMÜ”₫©’  wnÑơ"²B½zé₫Ÿ¥u11±Ay”/¹»Æ7øÆ„=‘ƠRQâ¨1{ö́¦M›–.]ºZµj¥J•j̉¤É̀™3ĂĂĂEW¬À P,,]"kÖ¼¹îÿ 1HZ7Hq·¥x:¦»["²fêJO:U¯^½€€€ëׯë†xüøñă7V¬XÑ Aƒ3gΈ® ©Ư>́“â¢2ˆ®‘-h‰_¥xÉ’8/ÍÂ,)v…«èQSQâ>räÈgÏ|ơéÓ§#FŒˆˆˆ]MR¯7x#/D9ô Ñ5"²q#0B_ăơń]#"JY*J=zÀƯƯ}øđáÛ·oÿûï¿ươ×#F¸¹¹xøđáO?ư$º¤^}ÑW^h´ÓËÀËKt½ˆ¬V»vºÿÏÅ0iƯŒqD@₫>ß EטˆR–Ç‹/ptt\³fMß¾}½½½=<</̃»wïuëÖéFyäH=”ˆ Ø /́«;v1Çâ!2›ŸŸîÿC1OZ7fLœ"™© H‹ÍĐLt¥‰(©(q¼~ư:€ *)RDï¥Â… W©RÖ0ß ©ÂK79æX}úˆ®&©QœO©~KEW‡È†ô•+hYè¢?n ́L‘âÏđ™èª‘å©(qtttœ3gN®\¹ ¾3gÎ9sæèúVé‰ó\lY_ówDDz¼½¥pahs)ÿ´q¿Â=ÇsëHd{T”8(Y²äÎ;ưưư}||2gÎ sæ̀>>>ƒ̃µk—Ù{̃²eKÛ¶mË”)SµjƠ±cǾxñÂøm>|X¶lÙ‘#G¾Fo‚-R“Ÿñ³¼0s×tY+ ]A"ë§lƠóÇŸÑ[ºjäAi±ª‰>"² OµZíÍ›7³dÉ’%KåzƯ¬†¡¡¡‰lûă?}ÿư÷...¢ÏƒÔ>Ô£gè—n…èJÙ²… åxÈ‹ƯĂ=)₫‹®5Y†ê:ÇXVdddtt´›››̃zWWWÏŸ?OhĂóçÏÿôÓO;w®R¥Ê•+WL=®n¥Ư»9,Eˆ*¥·¦_ä) Ñ÷ïß]S̉Ç7E ¾/ÙkÔp´¥K+^f—j¢”pùrÿ₫̣̉Ô©I¹!d!pL~"릮ÄqúôécÇ}øđ¡̃úÈÈÈE‹M<ÙŒ}zzz†……é2E‰®é›§§gụ̈7nܰxñb¯OZµjà?₫đ̣̣j̉¤‰è‹D±á¼°¥­îÿư>W2q$² Ƽíæa߯í#8"úLˆÈ|*J¯\¹²jƠ*]loo/­×|úkµaÆS§N™ºÛ:uêDGG=zTZ£ƠjƯƯƯË”)¿|¾|ùÇU­Z59sælܸq æ"ªÑ¦ÊŸS÷ơüM^Y½ºè:Ù¾ ñœ1C^93‰M•j¢¦è3!"ó©(q\ºt©V«µ³³›0a™3g¤ơ®®® ,Ș1#€Ơ«W›ºÛ¶mÛÚÙÙ-\¸P60 àÙ³g­[·N—.nMDDDHHˆ®ÛZµjƠæÄ5|øpåÊ•›3gΨQ£D_'ơä…矆[:¢¸™Q¤ˆè:ÙÅ0àXºTù·pôè$6ơ€GS4•뢮è“!"3©(q ШQ£Î;ëơJ©_¿~Í5\»vÍÔƯæ̀™säÈ‘·oßnÖ¬Ùĉ»wï>wî\ooï̃½{Ke4hĐOùg‘Ô-ΰp;ɱâÖ2Y’²Ù÷̉¥¦nư₫âưØ_†È*©(q CÂ#.\À³gÏ̀ØsÏ=øá‡ ܹ́óùóç;w^³fMüÁÉÄéÙ+vÄïV­€GDW( ˆˆ0~¼¼bÉ’¤7úÿJ±r^"²"*ÇÑËËëܹs[1jµÚ“'O(hî rM›6mÚ´iB¯6jÔ¨Q£F ½êííÍqƠæ:®Ë ÿe×ư¿_?`»yû#"#,ˆỤ̂ ̃S¦È]ª €²«µAP¡8_ÅUƯb]ÔƯ‡}¢O‰ˆL£¢;%K–pâÄ ÿcÇéV†††9rdĐ AºÄ±xñ⢫IâĂ1)ÎtXÎøë*ÛM)úW‘e(Ûó́3'ç»y"®ưØ/ú|ˆÈd*Jûöíëáá`Ï=½zở­́Ù³gï̃½÷ïßÀÅÅeÀ€¢«Iâ)ŸSG¶ÿÙp¡nƯDW“Èæ(;V/] Àß_^±nQûø ?I±r^"² *J=<‰(¹> v‘7¯¼îæMÓw£x`=CEŸ%HE‰cÉ’%œ8qÂßßÿرcº•¡¡¡G4h.q,^¼¸èj’Êq¿ÆÏsçÊ/ c³(¢TV±büu-[Êñ=&ïræH1{X©–F=ƒ#>{ö¬yóæ‰<Œvqqùư÷ßƠ?]µ——Wpp°èZØå‰Zâc%öGXZ•)""ô6 I¨‰Â7EŒz_6mBûö±ñ?bĐ ááÈœ9v]¶l¦é¨£ü5Ÿ‚)ă1^ôÅP ₫²¨Pư¬WÑGÙ³ggI`¦8—3f¨?k¤”° ¥¸’ÑŒ]ª‰RZ»vrüé₫¿r‚Ø'ÒÙ«̣ơL}’Dd€G•*UÚ·o_¿~ư¼½½3eÊÀÉÉ©xñâ~~~¨]»¶è ’31SÆÏÊ»äƠ«.^”W±K5QjR´8îÖM^½e‹9; €<ƒ!X©C̣waYÎÎÎÆ 6l€đđpgåwXJ«B*ÅŸá³9ñ8*»Tó#Q*È–-₫}ÅU« ¶Ûµ+Ú¶5y¯½Ñ{8†‡#\·8c¦cºèS%"™î8Îÿ$446K`ÖH6b£wEWÈOÆ©=¾rÇÂ…EW™( PöJûë¯ø¯¿{gæßàÏÀ ÑçIDq¨(qܶmÛâÅ‹/^üüùsÑu!é€R¼«Ü¿¯̣#¥eâ¨ø27X1‰ rpG“¬Çz)æk"UQQâØºuk]pï̃=Ñu!ë;÷§H5ƒ¥2ÈñR¸`¼Z97¡I: Cvd—û” °‰(%©(q4hPË–-,]ºô‰y]̣Èæ̀Â,)‡q¶o—_50‚£†7'ˆlÁ#<’â<ÅSÑ5""@UcüưưdÏưæÍ›ơêƠ+V¬˜»»»&^°hÑ"Ñ5¥Ô3 £¤x*¦"nG‰#{Æ¥>}đ©ô•+đöÖ…ăÆaÚ§Ù§çÎ5ˆ₫#8R5tq6dSÖCD¢¨(qÜ¿¿¿}ûö́Ù³¢kDjôiR!@º½¨œàŒ‰#Qª6LNçÍĂO?é©SåÄqøpóÇê¨^5àˆnQ‘(*zTM¤g†Hñ,I°œ²K5q$J5E‹Êṇ̃å)qå$ơGqT¹HDB¨èă€DWÔeäföưĐÀ¹ṣ«rçMe—jѵ&"̀˜Ñ£căÉ“1q¢ù»z§Y‘U×B->°&KEsUÛŒ4;¥e½ÇûŒÈ¨‹3#ók¼е+Ö®-pû6bçnuv–'§Nàç™3½ªßu2í}©WO₫æL™¤W L(o®₫è¿Kuñgǿ‰¾H©¿,*”f?ëù¨Tª#:J±4¨›”5ÿJY#¥²Fs´,eK•0„II$¥>=ª?¾1ŲeËæååU¢D‰ôéÓ‹®2¥ íÇƯi‚&¢«CD†4l(ÇóæaÜ8iiÉôïư5fÏNÖq´ĐJ#÷G]Û"J}*J/^öa‚„JÍIDATl|áÂ… Ï™3§H‘"¢kM)ânIqq×/^È̀$«W]q¢4́Yœ'Èưúɉăœ9ÉM̀Ç|©Ăœ6v$ÂZU߸q£K—.ááá¢+B)B9Í ôœÚđÈk9Qê3nvø“{ø»ÀEZôƒ¹ó̉Q2¨(q́Ó§OĂOO=>û́³æÍ›÷ëׯM›6¹?Í+W±bÅ̃½{·hÑ"kÖ¬^¾|¹zơjѵ¦q §¤¸JéeâX»ö§HÙ¥‰#Qê:TׯW¾̣ûïrüiNÙdy…WR¼+nà†è“'JsT”8vé̉ạ̊åËÚ¶m{đàÁ™3g6lÚ´i{÷îơóópé̉¥¦M›Î˜1cï̃½•*UpL94ÙĂ8,Åơ Ëhø₫²rÇJ•D×(íQ¤·L³frü矖9Ú\â"`k%¢Ô¦¢Äq̃¼y¡¡¡Ù²eûöÛo3f̀(­···1bDđQ₫‰đ„§ès&J[T”8?~@®\¹́́ôk¥Ñhræ̀ àÂ…Øï™3gđBÙ]‚lÅ#<’âÏđ™.X¹R.g³ginD7"ƠqH°ŸåvytË<­đ ~‘â'x2sDŸ?Q¢¢Ä1""ÀåË—¯^½ª÷̉íÛ·/^¼@®|÷îƯtÉ–üŒŸ¥¸'zJ±̣ XϦ́‘ˆṚË\Üû9sÊñ£GÆî/IÊ.Ơ_ăkÑçO”†¨(q,_¾<€?víÚũ¼y§OŸ¾wï̃… :uêôöí[¥K—0ỵäÙ³gÈ“'èZ“…ơB/)^R|éRR[–-+ºîDi•²L¼aÀ”ă´Ø17`ƒKC<QJSQâ8jÔ(wwwõ¼Y²dI§NêÖ­ûƠW_Í=ûùóçºví àܧ‹[¶l)ºÖ”Úœœ ÏŸË1»T‰¢¼¯¸e‹̃‹ ʱ¿¿ÅÙíK£´´è _ÑW(MPQâ˜/_¾%K–dË–Íà«é̉¥›4i’NÙ²e5j$ºÖdIĐIWBnƠ¸¿\&NGeϘzơ@DiÉ9œ“âĂ8<3D׈Èö©(qP¦L™ưû÷óÍ7¥K—vuu!C†B… uèĐaï̃½mÛ¶Ơ+Y²ä Aƒ~₫ùgÎ:hc”}¨»£»+—I0qôåư"q*Tă½•Ûºu³äaĂ!Ó5cD_"Û§‘º›¨Pxx¸“““FceW¼¼¼‚ƒƒE×ÂúœÂ© ˆứ)̉Ê{ Ê8?°yó"4ÔĐ úBBB ( ú)¾)êdæûrö¬Üθ[7¬Z¥÷z‚¿ÅÉVuâ ¼s[œ¿,*”f?ëƠuÇQ¼gÏ;vDDDDEE½zơ*ùû$•ky°à?đ‡Á2ööq—¥¬‘ˆÄúâ 964§WÅXƯ–ư´=€y w”l6a"JAªK·mÛæëëÛ¬Y3ÿ‰'>₫<<<¼V­Z ,PóÍQJ¾ÿđŸ+?”Mí'N]K"2˶mrܪ•…w~÷¤xv%ôÍ“ˆ’O]‰ăôéÓÇûđáC½ơ‘‘‘‹-Ij‚“ä¸N”ªÅ+ÈO+₫Ăzƒ|‘ÙT”8zxx̀=;K–,_uqq™1cFΜ9EW“,ék|-ÅÊ¡uf+†åÑï6(Ç_}%ú<ˆèå—¼Ù³ă¿®L,_¼HÁ(;ÎÅÜ“8)ú̉Ù%*Uª´oß¾~ưúy{{gÊ” €““SñâÅưüü8P»vmÑ$ ›¹©ühŒ6aË͛嘉#‘ztë&Çß~k°ÈwßÉqÿ₫)X—Pȳ’VDEÁW†È&hÔ<_xx¸³³³èZ˜,ÍN|nª+¸R±³I¸Âơ%^*_ ’§ƒùê«x4=<ñ3R ©'h”Êø¦¨“̃¢?J¿F±ŒY˜5 £äcA½y‰à/‹ ¥ÙÏzuƯqÔcY#¯jHñ œĐ{5‰RÖHDjS­'02B©Rr|øp Öe$F~/¤Å¢(*öÚY;ѽ}ûö̀™3/^|úô©î^£‡‡‡Ï_|áää$ºvdyÏñ\ăÿ5W̃bL¬3½½=ˆHU&N”[%OgđÆO€‡Glüå—ˆJÁêœÁiP`Æàñ£èkDd­T‘8~øđaÆ K—.}₫üyüW[´h1dÈwwwÑ5%‹éîR< ³LÛXù!Ó®èS!¢¸¾üRçÎ5˜8~ö™GG§x´ĐJ¹ăB,€ÊÉ ‰ÈxâUŸ?¾nƯºß}÷Á¬ÀÛ·o7lØĐ¨Q£óçÏ‹®,ỲjÈÓÀ½W•“ ?Œ{ÆY¿E‹ä¸SÊÏđr—¥¸88$0‘™'ÏŸ?ïƯ»÷ÿư'­I—.]Μ9‹/3gÎtyä?̃§OŸ):x¥–­Ø*Å5a`Æ$8*ÇæÍEŸ Å£|pơªÁ"Êay×§üœ̉̃đVăÀeˆ̀#8q\»víëׯuqƯºu×®]{é̉¥C‡ưú믇º|ụ̀úơëëׯ¯+đêƠ«5kÖˆ­0YD[´•âĂ8¿Àß˱‹K¼—ÿ]ôQ¢”_ø Í=¨S½ºÿñRÚ0 k€̉¢ƒ:kYÁ‰£4µ`ëÖ­.\X¡B&ηÀ²eË.X°à«O#¥̣d½̃áñ…]]EW—ˆ̀PLÑ‚Pùˆ .å,2©óđ`vI÷£ƯÅ\"«%8q¼wï.åÄ_¿î+Ÿk ïeå—öŒ!R-e¿6e·¸Ö®•ă¦MS©jÊaÀ‡bè5\Kí‹Cdµ'ÑÑÑ“,©›0:†m ”4S¤¸ú,“Ämev©&² Æ5śÜYẃ@ªQv²æĐª¦Ôóo¤¸ &wwUªˆ>!"J”rB˜~H¤ r^°2eRµOđD¯ăztHƠĂY&”J>ÇçRœĐøÊÛÓ§*ñÏ?r̀1D¶¢P¡8‹©Ü Rù„z#6₫€’±3"'øQơỐDGBƯÂ-)ö‡¿Á2Ê£G*Á.ƠDÖeÊL˜/Z„*øÛohÑ"6.]—.¥j5µĐJưcFbdY”ơ…oê_-"ơœ8.\Xô Ô0S¥¸6j›¿£M›ä8ѱ?‰HÆ—ÇÁƒI•3Ç\¾ŒÔ÷ϳ ‹.®Ú¯đÊ.ÉÛ%‘ â£jJ 0Aà€Á2Ê™jûöM`Gÿư'úTˆÈ\Iơ°*ÁD‡Tojè÷}*w'<%2 ­$[¶liÛ¶m™2eªV­:v́Ø/^$^₫íÛ·«V­j̉¤Ié̉¥«W¯̃«W¯¿‡Œ±뤸,Ê&TL9ëä?®4YJ¯^r¼sg"Ç“ăÔôK|9rójîH_HçÎ;~üø[·n•/_̃ÙÙyÛ¶m}úôId`Ȩ¨¨îƯ»ÿư÷O<©\¹̣çŸ₫ï¿ÿö́ÙsÑ¢E¢OÅ*uA)>Gaü4o9`̀ ¶mÛ>-"2̣‹ ̣ ¢!íÛËñ´i*;£¢¡´ÈÜ‘Hí'ÁÁÁ»wïسgO×®]/^¼øCÂcCl̃¼ùüùóeË– \²dÉÊ•+ươW77·E‹‰>!+ó7ä;µRû¡ø” á û `Ë9fÏ"k¡œTööíÄËnØ ÇăÇ‹©ïŃTöŒaîH¤dû‰ăæÍ›cbb†-[6Ư1cƸººîÚµ+&&Æà&»wï0nÜ8iíÂ… ÷ë×/::¬MU Ơ¤ø*®&TlĐ 9Nđ9µ²Ku›6¢ÏŒˆŒV[Ñ%.©¯ß%JÈñï¿‹©ïAT –éÅÔƒH}l?qZ`Î"›`ă‰£V«½yóf–,Y²d‰ó´H‘"H8 \¶lÙÆx ³¯\¹ O<¢ÏÉGq)> “¦ÀˆlPqùOH¼¬½}œÅ[· Ê[ÈMáC¢œ4•(ÍRÅ\Ơ)'222::ÚÍÍMo½««+€çÏŸܪ¸̣oàĉ2dhaÜ÷_///½5ºÇßiÍ믥8[H¶„,6rdVÀY÷_Hˆá~K>Ñ÷B ï*!÷ïß}1HßuJ¡÷%O<Ÿ¾«ß¹vM›!C"…ẃHߤI.]́ăsụ̀]QWă6n,{¯ñ4o>ïé¼Ô¯Y„kĐ è*¨…'º®ÓNNNzë¼zơ*É=DGGỵ̈Ë/3gÎŒ={¶‡‡‡1Ç }êâ•B))̃ˆ H¨ä¶mrÜ­[vĂ…>”BûÙ[B̀Ø„RßuJ‘÷eÉ4i¢ óÏŸ~J´ri'öçD9©̀Îs.¦²'Ơđ—E¬øëñï¥6₫¨ÚÍÍM£ÑDFFê­ǧû‰ø÷ß›6m:mÚ4+V4jÔHô Y“‹¸(ÅíĐΘMù"Ăɉ¬ZăÆr¼|y’Å•ƒçÏ/¸îÊɬg`†rF¢´ÆÆGWW×øw_¿~ @êg߇¦M›Ö­[·‡y²'6î·r²ÁÊ•EŸ¥,å`àwï"10R2wœ©ßâ[Á"ÄÆGaaaºLQ¢{Éà&111_ươ5kêÔ©³wï̃Aƒ9*Ç!##üyÁÑHÉI“ä¸_¿„Ë8"²jʯ†FŒî½}»«ajzeî8¿Ăw¢kD$€í'uêÔ‰>zô¨´F«Ơº»»—)SÆà&k×®Ư»woÇ-Z”È]IJH=ÈCx÷C¿d́‰ˆlˆr¼V#F÷nÙRŸ)^‚%‰”\³F½̃åË‹>?"J%»vɱn:"nî8 £æaè¥*ïU gΜ#Gœ1cF³fͪW¯~÷îƯ'Nx{{÷îƯ[*8lذ… ïØ±ăéÓ§÷îƯstt́Ô©Sü½µlÙ²sç΢ÏIƠ: ƒ÷AŸÄ +GHKÈS§ä˜=cˆ¬×đá˜3'6^¿;&^\9Ê›7xö Æl‘²”ư¬‡aX ů¢+E”Jlÿ#€={₫đĂ عsçóçÏ;wî¼fÍøƒ;êèî;¾}ûö²!?}6j·̣Øé˰,ñÂq›&LÙø‘‰#‘ơ=[û~ø°«ä¦#ẫwü ¿%̃’›È–Ø₫G¦M›6mÚ4¡W5j$ µóÅ_pF³Ơ†<#íx$цiƠ*9Η/Ñ¢ÊÉ!óæ}–Dd Z­1¥j*¦k‰Bh(T2—̣¾ăL̀|§?ăgÑ•"Jqiâ#¥C8$ÅS0%ñÂ=zÈñ;¢«ND©c̀96¢o5€ÿ•cU}sT̃w\‰•MÑ4;#²LÉbJ „ÿˆ“±§¸”ă·×®m₫~ˆH ¾ÿ^è[  B…8‹×¯‹>eî¸;*¡’è¥,&d1WpEaPâ…}“°dI¢EøAGŒ}–D”löörüáƒ1[\”'¢‚ÚfzSæÿâßB($ºFD)ˆ‰#YFVd•âÍØœdyå”cưêq–b¤´† EŸ(%Ûo¿Éq‹ÆlQ²dœÅ DŸB\ÊÜñ6n»ÀEtˆR G²€gxö ϤŶh›xy哦‚“Úû§8‰ÈF4i"ÇÊ¡u㆗.-úâQæođFê7Cdc˜8’(o7Æá$Ë+'„P̃zH‚ ?+ˆÈ<5jÈñ¡CÆlñùçqUßȉÊÜsG²IL)¹”MÔDÍ$7¹zUơ@é[¸PÙÀ‘Èf(ó>åWÉD½y#Ç­Z‰>CâçïđNt¥ˆ,‰‰#%—²3u‚’,¿r¥wé’TieGCsù‘UÊ’E_½2r#gç8#+ôécäv©J ­ä₫;püÿ&cDêÂÄ‘’e/ö*‹¢h’›ố)Çʹª »wOô)QÊ0}@GÈñO?‰>…\õ¯ ÏqU • ºRD–ÁÄ‘’¥>êK±²Œå©jØ_"J>ÓtÔQĐ•;·è³HÀ&l91Pt¥ˆ,€‰#™¯ä¹_j¡Ögø,ÉM”Ă7.]Téơëå˜ ‰lé:øúk9~đAI7c,ÆîÀiq1@Ñ•"J.&d¾UX%ÅÊÉ¡¾±oߤJ+8,út‰È̉LĐQGÙÁ®xqÑg‘°ÆhPiñî°«5Y;&d¦ŒÈ(Å˰̀˜M‚ƒå¸1s+œ?/ú,‰(%™5 #€bÅ+—¼8{¶èIXnäF´r—x)º^DfbâHæØ‡}ïñ^Ź£:79|#ggÑgLD)Ăôuîß—c•·d±ƒ̃0=îp߀ ¢ëEd&dz¨'ůñÚÈ­”M‘J”Hª´̣öƒÊ?ˆÈlf è¨ăç'Ç_~)úD’¢…V9xYGt́®¢+Ed2&d²Ô©‰™‘Ù˜­”Ă7v5毥²çäÈ‘¢OˆR†Y:ê(‡ă9pZ­I[ p —FB₫k¶kíø)LÖ†?²d²•s@c&ÔQ߸zµ<(Ç™2‰>i"J1ÊMçûv9¶³†´™˜ỵX”Zh5ĐD"Rt½ˆŒe ¿g¤&p”â¥Hr@XÊÖHDDq(tTÂe½‡ÛÓ§‹>#ÔFm½&NpZˆ…æî(U1q$́Ă>弫}‘ä€:±”ăeük̀ä[ÊBC†ˆ>o"Ja•*ÉñªU&mª|BưÍ7¢OÄøjÇÍcđøBt¥ˆ’ÆÄ‘L ́ó &´FzóF+T0beGöŒ!²yÇËq¦n½h‘k¬gœD-´mĐFZ<‡så‘Ô‰#˾R\5]àb䆥JÉñ¦MÆm³u««vN1"² OO9>|ؤM @ºṭâäÉ¢ÏÅh[°e'v*×h ù₫'º^D bâHFùÿ(ûÁß'ÀÅ‹rüƠW¢Ï„ˆÔéÊ9öơ5ukå„…“&‰>S4DC½ÇÖS0…­Iµ˜8’Qª¢ª?ÄCă7l̃\m·~ă†wé"úÔ‰(U|w²û»wMƯrFS+z`­£…¶ä§3ºÇÖ/đBt½ˆô1q¤¤åA)îî9ĂømÿøCG6n6p$J›NŸ–cÓ§ îƠ+Î$ScÇ>ÇùÆh¬\“YF€I]˜8RÖbí}È£é(qL’²?t¿~Fo Ç>>¢/¥–²eå8̉œ¡ •ưđ”ƒüX‹Ø¡÷Øz6f³Ç © GJ‚rR,½¿hIZ°@—,}&D¤~[¶Èq̉3“°v­[Ưk-´uPG¹¦`‚_ăkÑơ"˜8Râ”ßt§bªIÛÎ+Ç ½ÙƠ«rܸ±Ñ›‘Mh#O§»ŒÑ:wÓZrèPÑgd–ưØ•kæ`ÜD׋ˆ‰#%l&)ÇaœI›.Ç»v½Ù Arܰ¡èk@D©nÖ,9n̉ÄŒ<{&ÇóçằÑgd_øê&$”Ö¼Â+ 4«°JtƠ(McâH y04SRÿö›{y™²å¡Cr|û­¼h¥u~Çï·Cn+×D BÍr,7w—DæcâHEQ)΋¼íÑ̃¤Í÷ï—ă `güOY§NrüË/¢/ ¢œCpáBóö1a –•³a[#-´ß ÎTܽћ®)ơ1q$}c16Á̉â]˜< oƯºrlZëök×ä¸@ÑW‚ˆÄiÔHưưÍÛÇơërüï¿X¼XôI%Ïwø.~«! 4_SrQêaâHqœÂ©ï!~fjÓF˖ɱ“ 2zKec¦V­D_ "JùáÇÍ̃Vñ7làÀ8=Z)-´0A¹f ¶h Ù‡}¢«FiG£*Hñ=Ü3cʾĂĂMÙ’Ï©‰Hé»ïä8~³w³w¯»¸ˆ>)Kø߯ÿV_ơ8^¥&$S6—™‡yÊ™¤xQ™åƠ+9ΘQôÅ "ѾQ4é»{ÁÁæí¦n]tî,/ZuG%-´[±U¹F7^O'˜úÇ—ÈL)V6d“â¨1C̀ØÉÎr¼n)[®X!ÇÊ•D”–]¾,ÇE‹½åt2ê×}^̉­µĐÖC=åÊơX¯f 8[¥&}Ñ÷)J‹4c'Êïñ›6™¸±ŸŸ+;TQZæí\¹äEåØà&R6vܻצ¾ŸîÁ×x­·rh ¹ŒËfí’(AL Çq<̉¢bo˜̃¯ØÉˆ,â₫}95*9{RæK–à‡DŸådFf-´ó0Oo}I”̀‚,¢kG6…‰cZw7ª ´“ú³È”ƒ½}kâÆS³`O™"ú’‘Ê(ûÜƠ¨‘œ=)sÇ‘#ñ믢OÍ¢†`ˆÚÖh­\ù/4Đ”B)ѵ#ÁÄ1M{‰—EPDZœ†iNp2c?}ûÊqͦ÷l™ ZbüxÑW…ˆTf‰¢¹̃Ñ£¦7#&F[µÂ… ¢ÏÎ̉¶b«ZOx*W^ÄE 4uPGtíÈê1qLÓÜá.Åp`,Æ·ŸùA7}VDd{”=ï2eJÎ4ܸ!/–.mâÀaVâ?ü§œÊAç j i‡v¢kGVŒ‰cÚ¥|g#6ÖFmóö“#‡ÏmúöÊñrN½JD†4lgqåÊä́́óϱg¼˜9³è³KEPD í/Đw36k iŒÆfí•̉:&i”2k\ˆ…f=}ÿư'/nú.”³€ơê%ú‘Z)Û'ö́™̀Ơ«çoFƒ÷ïEŸ`ÊèˆûÍ́ÄN¦d&i‘2kœˆ‰1Đ́]•//Çʧ?Æz÷N]]E_"R7åîîæïĐ¿?FŒ3f4{ˆq+ ë73úÈu飲‹$Qâ˜8¦9ʬq NÂ$ów¥¸qÔ(|₫¹é»èØQׯ}mˆHƯv́ă—/1n\2÷7kVœç$E‹Æy„m{¦`Ú¢ĐJư8k ÉˆŒo`ư“yS c☆<ÁeÖØíb¡Ù{SNáǻŒ3̀Ú‹r0ŒFD_!"R=åëï¾ĂƒÉÜß́ÙX°@^lĐK—>Ç„ÿ·wïaQTÿÀß ‚ñ‘hÈ*fH""‰x-1S1 4­~¦¦e^J±̀¾æÔJó–~-ËđÆWMÓÔÄÔT¼$X*^IT@Ae~ Ë‚8À²Ăåưzöá™=svæ̀|?{æ̀™¿Dˆ“1Ù ü!ÚÁN€°ûƠn#U]Lk‹}ا?;ƒ́6`C¹·v́Öë·Î,ßwTư?ÏîîåÚƠ>Ç.?ùdÅ·7av́(|;v,¦MSû+ßB,!ÎÁœâ«z ‡a>æ«ƯFª˜8Ö ‹°Hÿa¦ÿ‡ÿKGzE6è§7&9¹¼[;¶p¹-""ặơÅđá…omÊ3û¬~ưWø6<¯Ô)kÂ&B,ñÁÖÓ1]€ĐMʾUªÉ˜8Ö|#0b G€‰/ơ0XúCg̀(2Oè£䜴DTëÖ.geaêÔọ™g\<Ù´©Èߺm ƈ÷ „7pC€ @Øeß0Ơ@Lk8Ox~‹oå·‡ph<ÆWdƒúß‹<,°lôE₫ü³§ˆˆª%ưÁ ")©â›´µ-²U‚€óçƠ>RSé…^"Ä;¸ó4.¾¶?ú B¢v3IeLk2œ‘ߦ#Ư₫ÙàÁƒØ´©đííÛåƯĐĐ¡…Ëœ»‘ˆÊçĉÂå-ŒµUưghÙ²ÈSQk<8œÇyâ0 +¾ö{|/u@Vd”©À¶RRpófá[ư™Øˆˆ*B?¿»v͸ÏE´iS¤¤iSôë§ö!«j#6OáT ”|[̉<̀“2ȱ«Cí»Æ_s1q¬öF`„AG£/|ryE³Æ Q±Í5*|t 2Ù)"¢ZA?wLLijÏqÛññøá‡"%?₫AÀ¨}Ôªj‡vpA„ø¾3‡y‰uVb¥B_ôå45Çj́8 ô§iđ=¾?†cåƯd!®HÖøæ›EçZ±±ẼúWhb "¢èçqq…c!(¢ˆ¶m‹¶kgÜTW!ÉCq5V?ªÎOøIº“¦ |ƒoÔn2•ÇêÊ n>đ1(|Ồ[eµf 4·¡¡X½ºü[+бcạ́•+¦9KDTëèç¹¹FüË™3E•-ï¤kWµ¼jxoJƒ bà£êÜÀ‘)]È~¯^Æeµ[MeÀıú F°Á Ă?‘ƺ<Ưµk‘™ÑÆ·ß–kô§D³µ­S¢‘ÉüKd¤7ïë QD÷îE ‚ `ôhµ½ÊˆB””Anö'ñ䣪E"̉®R93s‘«vĂé1˜8V'£1Z€°[ô ưà'B4ÖZ‚PdđáË/cóæ otđ`¤§¾Ơ,Qe0È_}}úwû÷—đçqơj-Rûđ«’—đ̉U\!Æé̉ŸC1³-a)@p‚Óh0¯¢˜8Vïă}Bñ±#Wpåe§N^̉Ù¶ ÿû_…·»r%¢¢ ߯é%"z Q,’,îÙcôËÖƒC±v­aù”)Œ£ö¨b<á™t©̣S|ZJÍÛ¸½«¥nÈ:¨3ÓS‘ªvó©Ǫ®3: `Aù‡øP„èă\óuwÇsÏ)E¼ôR…·{₫<ÆêMĬ‘ˆLi÷nËԕĐ8r$DÓ¦–ơÏ?¯öI¨’f`†”AÇqx”R39ó1¿Hyd0‚£­vók5&UÔ}Ü÷„§¡x‡âxŒ!ÎÆl£́èûï!HL,,iÖ̀x ^Ë–…˵|Ö "RÅĐ¡†Ѥ₫À́lăîg̃<ˆ"^~Ù°üèQ́́Íl§$̃đ>‹³Rù~耥×ß‚-”’HG8†!,1jDíÂıÊÙ[ØÁƒU¡!~‰/²£¬,BBΜ‰K—Œt$úW…-2îœjDDe Eæ‘P·.ºu3ú~₫÷?Ă+ä’̀LBđÖ[jŸ*,A±ˆ•’Èïñ½7¼K¯wça^'t’̣ÈÆh< ÓÎáœÚÇQĂ1q¬*tĐ½‚WưÑ¿øZox‹ ¦l¬ˆ®]accX¸eKÅ £O?ḱÛ“&ưŒ•Áps+Rrđ ‹}W»wC1uj «V­‚ @đơ×jŸªm†Çq)‰<ˆƒ/áñc§nâf8Â[£µ”GÁl†mÇvµ¥¦a⨾)˜"@Đ@³ ›J\+1Öî:w6¼u@ÿ₫E dŒüóO‘¬Ñ̉»vỦ©#"*ƒÄÄâLœA(á— ‹ˆ€(bƯº’×A€¥%vîTû´Ty]Đe¶IIämÜ‹¹JÆ÷‹7`Ă  ru¡½‹wà€ÚT½1qTÍ ’~•¡ä‘Ú»±[„Xü¶˜róơ… àH±›°EÛơ•lút8;)yøĐˆ'ˆ¨¢D?₫hXøúë|đÑ÷6|8DÑÑpu-amn.‚‚ ̣/3 ©†s„ătL¿‚+Rù ¾yoÛÂVÉg¯àÊ,éîr*i³P„®ÇúÛ¸­ö‘ULMê2.Áé÷ơ(yª+X=ÄCbgÖ±?₫€FAÀo¿®ÚµË¨7:×­‹ùó‹”đ6j"ª‚^x¢ˆÿû?Ặˆ¾Ă€$%A±|ù#ë¼óNA:¤$µOQ51#–bi&2¥<̣,ξ÷Íç6"ÄơXP'8ÉÙ¤-lGcôFl¼…[j_UÄÄÑ̃Â[Îp ¸Âu3JPÛ V[±U„˜lKçѧ“'CĐ®t:ĂUíÛCÑ·¯‘đÂĂ»_y…Y#Ui«V•üg*:º …øî;£ïśXˆ"D¡¡¬³~=Z´(hÂĉ¸ǺE1x„#\”Gæ"÷;|×ưÊ´‘û¸¿«‡bhC4”³Is˜wC·đÑ́ÉB–Úª&AäÿîÆ¦ƠjÿJøk!.¢¤<¶₫,™€ FlÀ”)¥ÍS6e íê7•…&M‘Q¤đÈøùñˆ*.))©yóæj·‚`Pª¦Z—[̣* ¬YSZ¢Wb¬^­¨̣ A=½z©v’j€Û¸½ Û¶aÛ́¨øÖŒơ¤ßê…‰£ñ xüĂ 4Đ,À‚‰˜h¬̃º…¾}qâDiu6lÀ+¯ï8ÿøíÚ•P^%£jéÿ…UƒR5Ơ긌‡+¹V£AHHåƯ=o”V¶´D«VXº₫₫&>G5ĐØƯ»°ë,Ζ郵3qä¥j“ê†n̉ü¹È­xÖxăFÁ퀂€† ™5Jó{‹¢ñ²Æ-[ .5ªjfDD,_QÄÿ[̣Ú¼<|óMÁßÜ'ŸÄ̉¥ÆƯùôéW±OœÀÀ©œ“ƒ3gĐ¥Ë¿WR´m‹Ù³qø°Úç° @@"â/D ` ™˜ÙƠn]•ĂÇGÚ¼yó¦M›ÎŸ?_·nƯ®]»N:ƠÑÑQÉ zƯá>“̣¼ö¼<¬_ơë±oŸ¢ú«V•0ø»übc1}ú#Ÿ~đÁ†wÆT%µº¥ªbPª&Æ¥ĐÛo—v3‹̀Â!! AFoÂáĂxçœ>]Ï z÷†ÂÂàéYÙ'«V¸û‡qøWüz‡‰‡D¡6fPLKöù矯\¹̉ÆÆÆÛÛụ̂åË—.]zöÙg×­[gmmưØÏ=4ó«ă7S`@EÚ›‹}ûđóÏX¹²lÇ2r¾øÉ'˜5«´ »vï.›ÊÂÿ « ¥jb\J0~<–-+C}{{L=áăc”ưKAÉ̀ĪUøê«"‰-33<ñFD»vđ̣bNYNZ­6!!AíV¨€‰c  Đ Aƒ-[¶4lØÀœ9sÖ­[úÑG=öăeưeJKɯíÛ‘—W6¿đ¦M3Æ`—Ü\l̃Œ-[°uëcjZY!.ÎđI Uÿ/¬‚”ª‰q)Í×_c₫|”/]°³ĂàÁhß¾à¥Ñ(ÿh‰AIIÁæÍؼù(4€V‹V­Đ¤ :t@óæpu…­¢©k&Thö́Ùß}÷Ư¼yó₫;̀D§ÓuêÔI£Ñüúë¯ff*ÿ2edàÚ5\½«WqânÜÀßăï¿Ë™„iÓ*pûr|<Çï¿üT₫›P§<0Î1˜ ÿ/¬‚”ª‰qQjƯ:̀›‡sFz2²½=ÜƯá—‚—…eçN\¼ˆ={°gO ³°U++4m´4ôê…† ‹¼t:´i''µÄĘ8R¡₫ưû'&&9r¤^½zrá”)Sv́ر~ưzoïÇ$óæÁåñzª‚øaÄ TMŒKyddŒ@/₫l®Êfc‡‚WJ ¼½ak ØÚJ¯½;soºù9ßèh‚S\Rơè643ƒ(¢qcÔ­[äué{VV°¶†•¬¬ ggÔ©KKÔ©SđG§N°°€¥%,- nƯB³f°°€FSäg¹ƠÚı笆EñüùóơêƠÓϸ»»¸zơêcG£h¿zb_üÜ?[ăß›P̉㬧L$ ˜›ă›ob‚C&"ª®́́0v,Æ-,¹z?ÿ\0P½R§đ¾÷ïăúơ‚·ÅÆ?JÓ>/é£çávíNÁë4ÚÅÀ÷6ê¡jÈÏ€₫)aƠÙ²M˜S©jcÖ&Åeeeét:ƒr{{{·oóq–OáÊó8̉'¤×ÈT÷ØE+«û}û̃á…,ƒ'nUÿ§_]»vMí&!¥jb\Œ¦[7të†9sôË47nXÆÅƠ‰·Œ‹«{èPA¤7œwĂùÁØ̣¨ ™x"Î—à„æ̉Ï$4?öùœË¯câh(;;€A¹­­-€ôôôÇn¡~rÁƠ'qM₫é‚«6¸¯ö‘4¸º"5#GÂÛ:ÀƯ]^)¶Pö¬øjˆWߪ ¥jb\*QóæèÔé1ủ̉ FÇÿûÊ;|Xăà€[·pë–цÉ+đ2µHĐ–±kM„‚†)hx2`—§Û¨wởàô+:7ÅơtØgÀ.öé°ˆ:&;2 &†AÈÊ2|å½{÷đo¿cé–Z¾ô´›ffu ´Ä?ÿàÉ' Í̀pÿ>́́`n33˜›,œ8??h4EFa==P§¬¬ 8^½äQ,/i° U_NNpr̉ÈÂƠ <ÍÉAvváëÁÄÆ¢U+<|ˆœœÂŸéé°°@^rs‘›‹¼<ÄÆ¢m[ètÈË+üùË/đóƒN‡ü|èt GÂÇG*̣óåç7ÊÏo›’'ùw Èχ(âú\4i¢7Ͷññđđ(R(HH€»{A¹fJ 4(R˜™Yx¿·(æ‰æEË”+ÙuŸtÊ59¢En¾y,sD‹SÉZ5IÏÍsEM4¹¢&O4¿í́昖'çA“—o–Íí[[‹‡:˜ëD3ùç₫»íưíÏ䣠DZHÏ̀ƨư»¢&†4½½}ñÅŒŒ ̉́<¥{ÁƠ5¡* "¢ZMºID¿ăă¹çÔnS¥Đ Ä»}I…{@O{„ŒV«­‰#‡)” Q£FiiiR¦(KJJ’V©Ư:""""u0q,A`` N§;¬÷ÈOQ<èèèèåå¥v눈ˆˆÔÁıÁÁÁfffK—.•Æ5XµjUjjê Aƒ,,,Ôn‘:8ƱÎÎÎS§N ïß¿¿¿¿ÿåË—cbbÚ´ióÆ|4Q5Ăıd¯¿₫zƒ ¶mÛ¶k×®&M„††Nœ8Ñ–ê$""¢ZŒ‰ă#©Ư """¢ª‚c‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHµBŸ>}ÔnbPª&Æ¥ bP¨ê`âHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤ˆ ¢Úm¨i´Z­ÚM ""¢Ê• vTÀÄ‘ˆˆˆˆá¥j""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&F³yóæàà`//¯çŸ>,,́Î;j·¨vÉÎÎ₫úë¯ûơë×®];ÿ7̃xăÈ‘#Å«1LjINNnß¾ưÔ©S‹¯bPL/..nüøñ:t ưí·ß×a\L)''gơêƠộ̣ễ½û»ï¾›˜˜X¼ƒb/^ÔjµüñG‰k•„ f‡É|Ö¬Yj·¡&øüóÏ#""îƯ»×¡C‡́́́cÇÅÆÆYXX¨Ư´Z!//oĈ[¶lÑét>>>vvv±±±[·n533óññ‘«1LjEñí·ßNJJ̉jµ½zở_Å ˜^ttô›o¾yñâÅ-Z¸ººÆÆÆFEEµiÓ¦yóærÆÅ”t:Ưˆ#¢¢¢,,,:tè`aaqèĐ¡7úøø4mÚT®Æ ˜Æ’%Kââ₃ƒ7nl°JIj~˜Dª°sçεjƠÊßßÿæÍ›RɧŸ~êîî₫ŸÿüGí¦Ơëׯwww6lXVV–Ṭ÷ßûøø´nƯúÏ?ÿ”J&­Y³ÆƯƯƯƯƯ}Ê”)úå éƯ½{×ÛÛÛÓÓó÷ß—J₫øăgyÆÏÏO§ÓI%Œ‹‰IÁ̃}÷ƯÜÜ\©äèÑ£­[·îƠ«—\‡A©léééÇŸ9s¦ôÇêôéÓ”„ 6„‰—ª`Ó¦Mùùù'Nlذ¡T2mÚ4{{ûƯ»wççç«ƯºZá§Ÿ~0cÆ kkk©¤eË–cÆŒÑéṭk†I-‰‰‰Ÿ₫y«V­¯bPL/***##c̀˜1íÛ·—J}öÙ¾}û¦¦¦ÆÅÅI%Œ‹‰úèÚµkÁÁÁ̉?Å:wî¨?®T¦$µ$LµPíeeeét:ƒr{{{ưI•ÇĂĂĂ $&&fƠªUuêÔ‘zV&Uœ>}zơêƠ¡¡¡~~~R¯A1½œœœ̀̀L77·Y³fEFFÊå..._|ñÅ3Ï<ÆE Z­öÛo¿9räÈ‘#åÂĐĐа°0i™AQ’Ô’0±Ç±¢¤oê666å¶¶¶̉ÓÓƠn`­£ÓéÖ­[÷æ›ofeeÍŸ?¿~ưú`˜Ôư₫ûﻸ¸L<ùQÀ ˜Vff&€óçÏïÚµ+<<ü·ß~;xđà„ ®_¿₫î»ïJa\L/##c₫üù÷ïßoÓ¦ÍĐ¡C{ö́imm½mÛ¶èèh©ƒ¢:%!¨%abcE988‚••eP~ï̃=üû=ƒLæ·ß~ûä“O.\¸Đ¤I“¹sçÊCU&Ó ¿víZdd¤|Ç’Åô¬¬¬¤…ùóçwï̃]Z?~|rrrTTÔ?₫8xđ`ÆÅỗÿư'NL›6mÔ¨QRIrṛĐ¡Cß{ï½~ø¡E‹ ꔄ –„‰=¥Ñh́íí‹“ÈÈÈ ßWE•-''gΜ9¯½öZrṛ„ vï̃­?À™a2±ØØØÈÈÈ·̃zK¾ß¢8Åôlll¬¬¬¬­­ôË{ôèàܹs`\L.%%åÀnnnrÖÀÙÙyܸq¹¹¹[·nƒR( A- G#hÔ¨QZZô›!KJJ’V©ƯºZ!??̣äÉëÖ­ Ü»wïøñă‹÷r1L¦$=ôbụ̀åÚ 8À?ü Ơjûơë'UcPL¯aÆ‚ èJÿ^̣̣̣¤·Œ‹)¥¥¥puu5(oÑ¢€[·nIoƠ) AmG# Ôét‡–KDQ™™™RÉÊ•+ƯƯƯ#""ÔnZ­ŸŸß£GöíÛggg—RaRW|||ñ'Ç0(¦÷矺»»§¥¥I%gΜṇ̣̃êĐ¡CjjªT¸˜Ø[o½åîî₫Å_Èïùûï¿}}}Ÿyæ™óçÏK% É̀˜1£Ä'Ç( Am“ ưCå³fÍđđđ¦M›úûû_¾|9&&ÆĂĂcÍ5ÅoË'£KIIñ÷÷·¶¶~úé§‹¯}ùå—CCC¥e†IEgÏ8p`ÿ₫ư,X _Π˜̃W_}ơÙgŸÙÛÛ{{{gee?~\„ ôíÛW®Ă¸˜RjjêàÁƒÿùçWWW´´´'Näççøá‡!!!r5Å4>üđĂÍ›7oÚ´©øm%!¨ña2Ÿ5k–Úm¨ ¼¼¼\]]õ¼ù믿j4¾}û†‡‡Ÿñ˜*CBBBTTT^^^JIZµj%ß%Ă0©èÖ­[7nÔjµ½zở/gPLÏÛÛÛÙÙùâÅ‹ñññ>ôơơứ³Ï:v́¨_‡q1¥ºuë2À7NŸ>››ëíí!Ư´$cPL#::úÏ?ÿ nܸ±Á*%!¨ñab#)›cˆˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#•YNNNddä믿îïïß¶mÛ^½z=zÍ5räH­V›]b;å«ƠiiiñññryvvöñăÇ¥å^xA.ÏÏÏÿñLJжmÛ€€€áÇoƯºUÿˆJ?¥´\–:gΜ¡C‡zyyơèÑc„ gÏ­àoUYµ@DƠFdd¤´`oo?v́XƒµƯºuëÚµkJJ €„„WWWƒ 3f̀غuk)ÛÏÉÉ 9sæŒ\’˜˜˜˜˜¸cÇ™3g¾úê«ơïƯ»7lذ+W®Ho333-Zté̉¥¹sç–ï322†záÂéí¹sçÎ;÷×_I™n¥îZ ___i€ăÁƒåK̉111R—§‹‹K›6mäú“&MÚ½{·ü699999966öÀK–,1J“bbb&Oœ*½ÍÊʺzơê¾}ûF9mÚ´Ê;D¤ö8‘R'O”zơêU·nƯâV­ZµmÛ¶mÛ¶ơîƯÛ`U|||éY#€+VHY£••U``àđáĂ===ˆ¢øé§Ÿ^¼xÑ ~LL̀•+Wœœœ:tè ·'**J¾n[V±±±.\pvvöôô¬S§TøÓO?ÅÅÅỦ®ßxă}ûöY[[KoĂĂĂ÷íÛgeeơ¨ú}úô‘ôoB’8ê_§̃½{·”5 ‚àëë;`À€–-[J«ö́ÙS¾S¤ï̃½{ï½÷”5úúúN˜0¡_¿~fff¢(®]»6**ªâ» ¢ª†=D¤H^^ܱäââRÖ߸qĂÍÍm̀˜1O=ơT½zơJ¬#g3cÆŒ‘{4_ươ#Gètº£G¶hÑÂà#K–,±´´LII1bDRR€åË—ûûû—ï0?úè£ĐĐP/^0`ÀÇÄÅÅ¿ăÄ(»vpppppAzÛ¨Q£§zª”ú={öœ5k–N§‹OKKsrrÂ#8Ê…£Fúàƒ¤åJבăăă}}}Ëwd«W¯–æêƯ»·Ü…éåå5{ölK—.5åDKDd́q$"EîƯ»'/—ă>hkkëµk×yzz>*4Û·o’̣Ôˆˆˆ;wîܹSîl“™››üñÇ–––R“&O,•Ÿ:uJ̃T™´lÙRÊ´hÑÂÛÛ[ZÖ¿‹¼’v­£££Q¥Ôđ̉¥KW¯^ЬY3¹æ /¼°páÂ… 1B*¹wï<ÑfzzzÅ#ç¦C† ‘  $ ÄLNN.ev!"ª¦ØăHDH7MKJ™§úQZ·nưØt³sçÎRXRRRXX˜ ]ºté̃½û³Ï>[¼¾»»{“&Mô?.-ˆ¢xơêU77·²6̉ ·Ï̃̃^̃`eïZ¹>}úHS—ỵ̈Ë/ ¯Sëß#7)##ăđáĂñññ₫ùg\\Üưû÷Ø©“Ào¼Qb…K—.iµÚÊ;Ddźq$"E,,,¥åâ=p’̀̀̀»wï̃½{·ø}Ạ́gKñÎ;ï„„„HƯxDQ<{ö́+‚ƒƒCBBg«ơë××kmmưÄOHẸ̈Uơ2‘/—ø¶Rw­\Ï=¥.=é ¾<§£ÁD<¹¹¹óçÏ÷ơơ4ỉ5kbbbt:tiÛ(îƯ»'ß ₫(wîÜ©ÔSAD¦ÇÄ‘ˆ”̣̣̣’8Pâ”.}úô騱cÇåû¯e¥$a2F3sæ̀˜˜˜/¾ø"((ÈÎÎN^ơûï¿’^ZZ₫ÛÈ×Ó›6mZ©§BÅ];99I×Đ322;&MÄăêêjĐ··bŵk×êt:—Y³fưđĂ'O 0V3lmmåNè5kÖ́+I¿~ư*ơT‘é1q$"¥ä¡lÉÉÉ6l0X{àÀ¹³M‡W&999©©©©©©999}ûö]¸paLL̀Úµkå‹ỘT…²ÄÄDiöÉÑ£G¥kÊÎÎΕz*”ïÚà¹̉gùÈ‹ .”†T\§đư÷ßK üñ°aĂ´Z­¹¹ù7”ïå±-oÖ¬™´ Óé̉cooogggggWÊíáDTM1q$"¥üüü¤åO?ưtÙ²e·nƯ››»}ûvùÖƯ§zªuëÖeƯø… ÿ—4?¢¹¹¹ŸŸßàÁƒ¥ ú’ÜÜÜÙ³gçææ¸uëÖ‚ ¤̣îƯ»ë?±2̉¡Cggç”””cÇI©›4KN¥̃Ô¬p×mÚ´yñÅ¥ǻ́́“'O&%%¹¸¸È½t[“N:¡¤ßQr¢âשAèÖ­›¼÷èèèưû÷7jÔ¨cÇR¡ÔU\"å-·³³ —z‚ccc—.]ºgÏiÆŸaÆM˜0¡²£@D¦ÇÄ‘ˆÊæ¹çÛ»woXX˜“““¥¥eóæÍ»wïöÓO?uíÚµÜ[n×®Ư¾}ûÆ×¶mÛ† j4;;»öíÛÏ™3gƯºụƯÖ2{{ûÈÈÈ!C†¸ººÖ¯_¿wï̃_ươĐ¡CMp”́:""â½÷̃sww·¶¶öđđ1bĦM›J¼»<,,,((ÈÉÉÉÚÚºeË–Jn$êƯ»·tµÅî§–·éîîÀ̀̀¬U«V#Gܶm[=¤µ;wî”/C§¼åƯ»wß¾}{ppp›6m¬­­]\\zö́ùƯwßÍ5KÉQQµ#ŸŸŒˆ¨*[¼xṇ̃åËôèÑcÙ²eµd×å——wàÀ<â*?Q9pŒ#QͤÑh˜2‘qñR5)ÂÄ‘ˆˆˆˆaâHDDDDđæ""""R„=DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDDü?`—tû„ù\DIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/evalmf_101.png000066400000000000000000000711241463010412100222520ustar00rootroot00000000000000‰PNG  IHDRh\­ArIDATxÚíƯy`LWÿÇñ“D"›¢jMBbK­U[́UB‹>U)ªÚú©µ­VUºhQªU[Óµô¡4-ª–Rj+µïDDSKD$$™̀ïë93’`"˹3ó~ươÍ;w>37Ë7ç̃{®ƒÑhÀĂ8ªë@ă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°#,Bă‹Đ8À"4°ˆ³ê6(88XuP´bbbTGP€Æ±HØç7“³Sô†¢Ób§èƯq¨¡q€Eh`GX„Æ¡q„]X·nêȉ¢Ób§@?h`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æ¡q€Eh`GX„Æñ!Î=|èĐ!ƠA£q|ˆE‹©  ΪèTJJÊ©S§~ùå—¥K—ªÎ  4yëÚµë¥K—T§ĐǼM˜0áÎ;BˆÅ‹ÿù矪ă¨Gă˜·æÍ›kÅæÍ›UgĐÇ"œcɺuëT‡²k/^T9ÙÆNyç÷«?HƠêÏÚøư+¤´êDeûÅÆ°S”ëÔ©“êzAăX$bbbTG@NU«VU9ÙÀNùñDœ¬ßÛ”8ú™ºªØ/¶‡¢Vî?ë¹Gˆ́ÓñÀ#:”ª:+GxDóçX̣ââcªC@¢q€GtáÚíK–¸¬:!GxÓ¶ÆËº¬‡‹¬ÿº¢:Gxo®Œ•ơ₫7Ë:bîáGÙXGÈ7£ñ/ó*)ë+©ªÓ@Q¡q€|3¿,æ§₫u„oµ~\.ù́÷óª@‘ q|ˆO>ù$&&¦^½zªƒĐ‘ƠÇeưl²Bˆ)]kÈ%cÖœQ#äÏï±×dƯ²·¬d™­:&>GÈóăÔ«^1Ư*fƠ€ºy®6ƒÆ̣'-Ă k/WÓ[;×*#ë§’UÇ€ÂGăùđ₫³²ß1çíƒÛùÊú×IªĂ@!£q€|øô÷s²×!găh~ä:bî!Ơa Ñ8€¥̀çhôvsν‚«³é—j¶Ñ’M€5¡qK™ßÆüRsŸ=S]Öo­}è6ÀĐ8€¥̀ïCƯÂl"s£ÛT–ơ[â¶I°&4`‘¥.˺m ÏÖô4»Ô:₫úmƠÁ ĐĐ8€Ez/>&ëƒÂ°æÆAơeÍ„l #²F•Gx¸¨] ²~ă©Çº₫÷}BeƯé Ơñ pĐ8ÀCœ¸|KÖ5üÜTÇehà!̀/p¹ßô¹ưçù²î·ä¸ê7…€Æâtbº¬kù»[ø¬WÈzá̃KªßGx™;.Êúµ¦ùznị́¦.sÿÅ›ªß #<ÈŸNÉú›^5óơÜU¯˜kwcBGÖÆJU_Ó•4oÜQ Æî«ÇwGd½$2ô¶0¬…iî)\Pư† @hà¾~:rUÖ/„ù?¾ên-|Ô/§U¿!(GÈÛ¶³×eƯäqÏGß™¬l£ê·Æ̣vÏô¯X:}cn+^6=7b.—Ȱb4·ëéY².çQâ‘·Ó­¶Ÿ¬×LRư¶àÑÑ8@>ü-NÖïµ­\À­µ®î#ëßb’U¿9xD4‡ñëMă§«pkæGº;FTưæàÑ8@N7ng|#æJ—tRư Đ8@Næ—°lx½~¡ló£NƠd=ú×3ªß"< GÈi«ÙD<í‚| e›´¯"ëI›Î«~‹đ(hà?›MúưL­2…¸eßR.²¾t3Cơ€|£q€{q9MơÇGăÀ®}öûyY¿ƠºđoNư`OVñ’ơÖ³×Uđ4́Ú˜5gd=¥kb~ơÙ&tœË„ôÆ€ưJÏ̀–µ“£Cñđsw‘ơÛYª?xGöËü®-æƒÅéưvUd=~}œê„Æ€ưÚx*YÖk•Q’á“§«ÉúĂßhè#;ơë‰$YwöU˜Ä½„“¬¯¥sÀ€~Ñ8°SsÉz¥¢ăÔóÉ#ÍS€̃Đ8°Sf³7 Wg•¿ ÛÔđ‘ơö¸ “ÀƒÑ8°Go­•ơÄgª«#º†úÉ:úđƠq o4́Ñ[âeưn›ÊªăÜsMwÏGUÇ€¼Ñ8°;ñ×o˺|éªă€Ơ q`wñ•—Ř›Ö-PÖoü£:䯀Ư9øwª¬ỤTç®-+ÉzÖ¿UÇ€<Đ8°/ öü#ëŸđWç•}\e›˜¦:äDăÀ¾ô_zBÖß÷ Uç÷Nèx¸[€"AăzQ·‚‡¬O^aÄ€îĐ8°#}ÿ{\Öÿy¾¦ê8y肬¿ÙÉ™ô…Æ€Y´ï’¬_i :Næ₫«–¬ưȵƠô…Æ€½Øñ¦¬k—wW¬#{ÑM—Ó7涸Oˆ¬ÿµˆ»ÈĐGöââ;²®êë¦:Î}ơy¢¼¬—ä¾Ơt„Æ€]˜úÇYkñ˜ê8ѰRiYï]ªT©V­Z5ÊÇÇçëgdd,X°`íÚµqqq>>>uêÔ2dH`` ê÷ ßngeËÚÓƠ~éu ö•ơæÓ×TÇûqœ6mÚØ±cÏœ9Ó¨Q#èèè×^{-==ư~ë †~ưúM™2åÚµk-Z´¨X±âúơë»uë¶gÏƠo@₫¼÷ëYرªê8ùÖ©fY¯:–¨:{gûcLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2å~Oùá‡öïßÿôÓOoذaúôé‹-?¾b́رªß €ü™¸é¼¬ÿƯÁúGócëƯ8Z @5Ûo—-[–=bĈråÊiKFíååµvíÚ́́́<Ÿ²ÿ~!D¿~ưœïƠẓÉ'kƠªuîܹäädË^€z—ofÈÚÇÍRK.Nª#€‰í7{ö́qttlƯºµ\âääÔ²eˤ¤$­À­B… BóÑh4^¿~ƯÑÑQ¶’ôÏü‚ó M¬Ëä.5d=bE¬ê8́7F£ñôéÓ¾¾¾¾¾¾æËƒ‚‚„ñññy>«K—.®®®&LعsgzzzBBÂ|pñâÅ^½zyzzª~O,µûB¬›WơVç \Ö_m‹/À–  l|ü,--Í`0x{{çXîåå%îS4¼hÑ¢₫ưû÷ïß_.ŒŒŒ3fŒ…¯œcɺuëTvíâÅ‹ª# §¢̃)¿œJ•u§êîqqqªßñ£+çîtåÖƯy·}̀³uóĂ¢Ćå:uê¤:‚^Øxă¨]:íîîc¹‡‡‡âÆy>+%%eâĉ·nƯ ­S§NRR̉öíÛW¬XÑ´iÓöíÛ[̣º111ªß:rªZƠú.Œ°yEºS†ÏØ$뵃›¨~¯²¬ŸOëYwO­ycõĂo7.̉—ă‡E‡Ø)jå₫³{„ÈNØxăèíííàà–––cyjjªøß¸cnï¼óξ}ûFựË/kK^xá…‘#G®ZµªZµjªßûb~Ă›#ÿ¤>ú† `lüGggg//¯Ü#‹)))Byµ¹+W®l̃¼¹F²kB <833óçŸVư<Ü«ËNÊzæs¶00Ù ¼¬çí₫GuvÊÆG!„¿¿RR’Ö)JÚÙN₫₫₫¹×OJJBT©R%Çrm ñêƠ«ªß€‡ûÏ_ ²üTEƠq Á¢CdưÊ'TÇ`§l¿qlÛ¶­Á`ضm›\b4·lÙâăă–{ư*Uª899ÅÆÆFóåÚù 5jÔxØ ṔØ¥[²ô+¥:ØÛo{ơêåèè8cÆ í¼F!DTTTbbb=\\\´%·nƯ‹‹Ó.[ssskÙ²åùóç§OŸ.g5kV‰%ÂĂĂU¿!aÓ7æ6ÿ…Z²ü₫¸ê8́‘_#„5jÔ¤I“"""Z´hq₫üù]»v…††¾úê«r-[¶Œ9200pơêƠBˆO>ù¤gϳfÍZ³fMHHHRR̉¾}û²³³Ç[½zuƠoÀCœM2Ư‰¾f9Ûq́ߨÂËKï¤₫~ÿ¥Å}B ¶=È7ÛqB 0`Ê”)U«V]³fMrrrddäÂ… sOî(ùùù­Y³æơ×_wwwÿă?.^¼ØªU«eË–ơéÓGơ[đ_o7Íx÷ú“¶pv£¹z²̃SuvÇ!Ç™|(¸àà`æqÔ›¸¸8fAÓ›"Ú)o™¦o4Nm£ú]² ×nW₫äO­®àY"a\óB ~Xtˆ¢Cvû·^§‡ªïܹŸ˜˜X±bÅ€€'''Ơ‰@½Ç}\eưOJ†ê8́îÇmÛ¶Í5ëÀr(ÔÅÅ¥M›6Æ ăfö́ü#²₫á¥Úªă‰‘-+MÛz÷Ơ“7Ÿ'¼²êD́ˆ¾Îq3f̀À÷ïßo~=33sưúơ]»v]ºt©ê€tmÅQÓL«Ï×/W€-é×Ưeưîê3ªă°/:j£¢¢¢££Í—”.]ÚÁÁA«³³³?úè£Ư»w« @§¶œ¹.ëfU¼}Cº÷¿ß‹Bq'+[uvD/cFFFTT”VW­ZuƌܻwïÁƒgÏ­ƯµÅ`0,^¼XuR:uÏôlgúÆǛß]7³w EM/ç8^¹råæÍ›BˆR¥J-\¸P̃EÚƠƠµM›6uêÔéÔ©Sjjê¾}ûT' S)·³d]ÆƯEuœ"Ô%ÄOÖëc’UÇ`Gô2âøØci+†††Ê®Q*[¶l:u„ùß6Û7n}œ¬Ç¶¯¢:N‘kè#ëµ'“TÇ`/ổ8 !Z´h!„8{ölFFÎ9&233Ïœ9#„hܸ±ê˜ôè£ßLăǪ©Sä̀Vw₫öê8́…ÇÑ£G?₫øăIIIÆ ûçŸạ̈+W®¼ùæ›W®\ xă7TÇ ;×̉M© °+Rª³ÛP@/ç8 !ÆpáÂ…Í›7oƯº5((ÈÏÏ/)))66633SQ±bÅ?₫8dzfΜ©:8Å"æ†Ü~ÿ¿0ƠqÉ„ÎỠ_sV«Gưrúó®̀t  Èé¨qܸq£¬ É'r¬°gÏƠèÑö¸²¯áS€-Y“1m«ÈÆqÊhª€Gđăá+²ơ+À–¬OYÓÅă߸£:Û§£ÇÁƒ«ÀúôZpTÖ+mzúÆÜV ¨ûäô»“”u›wxïÈFª°q:j‡®:X“¦•M7ÈÙwñ¦ê8l‡ªX±ÁÑ1²₫²{`¶d­₫evKîÅû.©ÀÆ)q́Ñ£‡¢\¹r³gÏÖê‡Êq?kölöŸËzx‹Jªă(°ô¥Ú?ܤƠ/ư÷xdƒ̣ª°eÇ£G !*V¬(k°Đ©«i²®âëª:Ø>U°VóËz•]cî›^5e=à‡Ø<„âÇ?üPáîî.k°P̀Óˆc ö{#û×¼¾ü¤VÏßưϼƠR€ÍRÜ8¾đ yÖđ`s̀Înи‚ê8Ợw?qù–V₫'µ®·Ñ‡ªX¥ÿ3»z®Ư±­PGÖs`Kđ :ÇQ“™™yæ̀™óçÏ †,ë‘+cUÇ`›t4â¸páBY;99ùûû;88¨@w₫n¦ßê·2 ØäAqă¸qăÆ<—Ÿ9sæ̀™3j³Đ›ˆy¦!´U¸,&oÿîPơ£ßâ´źÚ³Ÿ<]Mu"¶ƒÙXÍf'íuöUG§>́XUÖ6S€MQ<â8xđ`ƠŸë°̣h¢¬Ÿ®YFu]óru¾q;K«oeú¹»¨NÀF(n‡®ú`ºÏ7;NÍô´r@ƯÖ³ökuļĂm :Á¡jÖÇÙ‘ÛJ=H«ễ²̃iv£( Ư5gÏ]¼xqbb¢"99yôèÑmÛ¶}öÙggÍÅm¬»5|Å)Ỹµ†ê8VàÙ:ee½́à•l LttËA!ÄÿûßO>ùÄ`04ỉÄÏÏoèĐ¡{÷îƠ:~üøÎ;.\È ¬;4}ÛEY¿ƯúqƠq¬ÀOưë8¼µI«ÿµèèóơÛ¨NÀèhÄñäÉ“}ô‘Ápwâ±Ă‡Ë®Q³{÷îèèhƠ1·¸ätYWô*©:Ø/5sçÎ5Bˆ§zÊÇÇgÓ¦»ÿ+×­[÷£>*Y²¤â§Ÿ~R@q3¿ Ó7Zîëgƒd=èÇƠqØ5'NœBÔ«Wõ¼y~~~[·nƠ–9̣_ÿúW›6m„±±±ªc(nG/Ư’ơ•VÇj i₫˜¬¿Ùù·ê8lÇ‹/ !êÖ­+„HLL<~ü¸ÂÓÓ³I“&Bˆ+ !̉̉̉TÇP¬æ₫• ë—”WÇÊT/ă&ë“Wøư   tÔ8zxx!„[¶lÑ[·jƠÊÉÉIqăÆ !„¯/÷́ËÀe'e½đÅƠq¬Œù„—æGüàÑèèªêJ•*]½zudzgÏ^¹r¥¶°mÛ¶Bˆ .l̃¼Yáïï¯:&XwYÇ&2â  t4â!„¸}ûö—_~'„(Q¢DË–-¯]»Ö©S'mfÇ-Z¨  øôXpDÖó_¨¥:Uzµi€¬gíàLG¢£Æ±W¯^Ú æKÜƯƯ ƒ6G««kï̃½UÇP|~:|UÖưUPÇ*Eơª)ë7~âÚj¢£CƠÎÎÎßÿứÙ³wíÚuçÎæÍ›6L>êçç7sæ̀råÊ©  ˜́‰O‘u½Ơqzj…%J”>|øđáĂÍzzz®X±"88ØÑQGă£Ó7–%‘¡½Óê߉î_Gu"ÖJGăW_}¥Ï=÷\¥J•ạ̈%JԪŹM€Ư¹tÓt{úÇ}\UDZb/„ùËÆñ§#W ¶1vMGcttôåË—…­[·6oØ¡I›ÎËzdK~!T“Ç=ÿºp÷Đÿ¶³×[TóV€ỦÑÁß=zhÅ… Tg Øè_ÏÈú‹nªăX½{&tœÇ„‘Ç!C†<û́³Bˆ9sæ\¹rEuÊÜÉÊ–µƒƒê46¡œG Y_OÏR€µ̉Ñ¡jíệåËŸ>}ºC‡µjỢññqÈơGcæ̀™ª“(ZƯæqYLá{¯måÏ~¿{À‡¿ÅëPUu"ÖGGăÆe¾ÿ~Ơ‰¨±>&YÖ]BüTDZŸv®.Çñëi< ª!ĺ“I²nè£:Mqs1ưοq›Ọ̈MG#ƒV€z§.2«ÔmÿÍA­˜{xËO¨NÀÊè¨q̀1ï7û”i0ʺT 'ƠqlJ» _Yo={]uÖG§‡ªcbbÖ¯_¿té̉ÔÔÔ¬¬¬7n¨N 8¼³ú´¬'t®¦: 2?gôg&Oºk£££ĂĂĂ#""† 6nܸäääÔÔÔÖ­[OŸ>Ưh4|ûốóͦi\Ç´­¢: Z9Àt¿Áç¾;¢:+££CƠBˆ‰'Ο??÷̣´´´™3g&''?^uFE%!å¬Ëz¸¨c›™@èhÄñرcß}÷V;9™Nl’S9.Y²dÏ=ªc(*sM—Ŭ|™Ëbùx†₫|JuÖDGăœ9sŒF£££ă|°oß>¹ÜËËkúôé®®®Bˆ ¨  ΅»xSÖOVñRÇf™ßû{Æö‹ªă°&:jOœ8!„èܹsdd¤›››ùC;vlƠª•âäÉ“ªc(‹÷]’ơóơË©că÷q•ơ™¤tƠqX 5IIIBˆªUó¾™A`` "11QuLEâ¥ÿ—ơ/ƠVÇÆÍî$kó3àÁtÔ8 !̣<‹Ñh4î̃½[Q­Ós@Au®e”çøå[ªă°:jëÔ©#„صk×°aöoß®-Œßºuë!C´Æ1$$DuL…oÀ'd=§g°ê8v¡_£ ²₫vW‚ê8¬ƒƒ~&GLLĹÖ­ÛF{zz®\¹2 @ủ‡‰‰Q÷ˆ‹‹»ßYPÅ|§8¼µI.7Nm£:½Èócç‡E‡Ø):d·ëu4âèçç7uêT__ß<ơôôœ4i’₫»FùuøŸTY×̣wWp_:j…M›6Ư°aĂ AƒBCCK•*%„pww 8pàï¿ÿ̃¦ 〠ºgúF³û ¨-èm:ù§÷âcªă°úºsŒÂĂĂcäÈ‘#GB¤¦¦zxx¨N h¿v[Ö~¥TDZ#}–ï·äîǺK\^ª:½Ó׈£d0.\¸ṕر . Ơq•/·ÆËzđSUDZ;aKËú¯ )ªăĐ;Ư8>}zÚ´i[¶lÉ̀̀Ô–¸¸¸´iÓfäÈ‘œ Ø‘+ce=ó9®§.n«^©[é£ZƯm̃áK㛫N@×ô5â¸té̉ˆˆˆ7Ê®Q‘™™¹~ưúgy&::Zu@°)y•”ơ囪ăĐ;5{ö́ùøăÍL—.m:†b0Æ·ÿ~Ơ1ˆy¦Ëb~́ÇƯbÔx«ơă²¸é¼ê8tMGăâÅ‹³²²„•+W>}úÁƒ÷îƯ{èĐ¡™3gj©333.\øh_¾|y¯^½ÂÂÂzê©1cÆ\»ví¡O9räÈ!CÂĂĂ5jù×_©₫„[óË1Ó¼­=êrj5¦t­!ë÷~=£:]ÓQă¸oß>!„››Û‚ :v́èææ&„puum×®Ư¢E‹ÜƯƯ…{÷î}„-O›6ḿرgΜiÔ¨‘‡‡Gttôk¯½–₫€§lÚ´©wï̃›6m*W®\XXØúöí»iÓ&‹_ÀühúlQÍ[u»æäè ë;½Ü€é¨qtuuBÔ®]»B… 9*[¶lƯºu…NNNùƯlLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2å~O¹qăÆ»ï¾ë́́¼hÑ¢~ø!**jÉ’%%J”øàƒ²³³UN€xơ×˲^9 ®ê8vÍüóuơål €ÓQă&„8{ölFFδ³²²Î=+é^ƠË–-ËÎÎ1bD¹rw„=ÚËËkíÚµ÷룣£SRR Ô AmIƯºuŸ~úéÄÄÄ#G¨₫œ‘–iỤ̀qÓƯ vå™Zed½=>½[`ătÔ85êñÇOJJ>|ø¥K—ạ̈+W®Œ9̣̣åË̀ïf÷́ÙăèèØºuk¹ÄÉÉ©eË–III÷»ÔfëÖ­Ư»w7_8ỵ䘘˜zơê©₫œ[0víYYëÀL[êµ 2Ưîu͉$Ơqè”âỵ̈ßxă ó/½¼¼„›6mÚºuk`` ŸŸ_bbbll¬vÑŒ‡‡Ç¼yóä( %ŒFăéÓ§}}}sÜ;((Hß°aĂÜÏ:zô¨Oụ̀å÷îƯ{àÀëׯ׬Y³]»vÚi— nÂÆs²ß‘ÆQ½Uê–ư‡V?óŸCÆ©Üâ@77ǹsyVVÖ‰'r,LII¹ßú÷“––f0¼½½s,×:ÔäääÜOÉÈȸyóf5Æ¿dɹ¼R¥J_~ùeíÚÍœsăuëÖưljûºxñ¢ê0¹vÛ4ëV '‡¸¸8Ơ‰;EWø ¦\§NTGĐ ?¯H»tZ»"Ûœv ́7nä~ÊÍ›7…§OŸ¾zơê¤I“Z·n}ûöíüqæ̀™Ă‡_½zµ%ă111ªß:râÎCúÑçë}²̃0(¬jUoƠ‰ „Ÿvv³æît<3̀§érüS+÷ŸơÜ#DvBqă8xđà"Ư¾···ƒƒCZZZå©©©âă9hw !&NœØ¦ÍƯƒ5C† IHHˆ₫ơ×_{ö́©öC¬ƯÎs¦ÿÙZ2n¼×¶²l§₫qÆ@nÇáÇíÛsvọ̣̈Ê=²˜’’"„×Y›swwwuuupp7_̃®]»èèè“'OªưÄk·́àY?[§¬ê8¸G9WRïÎkqñÆó€ĐƠUƠEÄßß?))Ië%íôÿ<ŸR®\9ó…Újí2́_‹Êú§₫uTÇÁ=V½bĐ1bîál €m̉×9»wï1cÆ©S§rôyæ?¯m¶mÛ6&&fÛ¶mÏ<óŒ¶Äh4nÙ²ÅÇÇG›92·đđđ œ:uJ»øZ£ÍƯS³fMƠ•&{ÊúÀß7UÇ ;:qܽ{wß¾}ÿúë¯k×®î/¿›íƠ«—££ăŒ3´ó…QQQ‰‰‰=zôpqqіܺu+..N^¶ö́³Ï !Æ+/»>räÈܹs½¼¼Ú·o¯ús¬Ø M'˜oY¦[BQéhºpá̃Kؤ£ǯ¿₫Úh,ü{¤Œ5j̉¤I-Z´8₫ü®]»BCC_}ơU¹Î–-[F¸zơj!D­Zµ̃|óÍ/¾ø¢S§N 6LKKÛ³gƒƒĂ„ Ê”áOđè¾Ùù·¬ûÖơ,À–PT¾êXî—Ø»sñô[r¼oẶªĐ5̣Z÷={>ó̀3̣êæ‚0`@Ù²eW¬X±fÍ *DFF1B›‘ç~^ưu??¿… ₫ùçŸ>>>mÛ¶:th`` ê °b'.ß’uơ2L§ÖÇ¡(ùMxxxBB‚¿¿ÿüá訣cèù̀…–7uöÿNU€^èèPµbáÂ…&LBxzz–+W.ÇLíú=³Ûák=ă@rom’µqjÁNÑ+m¿œMJ¯₫éNmI%ï’>xJu.»Æ‹Ùíßz]sêÔ©Ù³gkuJJʦr©jfW/Å_¿£:½ĐÑ¡ê9sæÈyØ’ß‘ơ’ÈPƠq`‘¡Í“ơ[.¨@t4â¸wï^­hÚ´i§N q:jưt䪬_ó/À–P|¦?ôơö»g¦¾µêô›­W€z:jœœ„^^^sçÎuvÖQ0±í́uY›ßÑÖ%Ûht̀ë¼svEG‡ª4h „¨P¡]#`KZÍÚ/ëU¯ÔUùđóËud]aüƠq¨§£Æqذa>>>§NÚ²e‹ê, ù̀ åü-NÖïµ­¬:̣­Uuï-g®kơ†SÉíƒ|U' ’Çơë×ËúèÑ£GU@A_oj?í\]uäÛªu½̃ߪƠƯæN›ØZu"*éèP5săv–¬K•pRÂÓƠ4¾™­:Åt4â8xđ`Ơ¦ˆ¹‡e½̉́2 X—;V÷¿‘ă÷~=óÙ3ŒöKGăđáĂUGP˜¶MÄÓsă¬Ö¿;˜lj›ÎÓ8öLG£¹˜˜˜sçÎ]»v­K—.®®®·nỰ̣̣R @>ül6éw—?ƠqP >nÎ×̉ïxpùf†i®́”îÎqŒˆˆ6lظqă’““SSS[·n=}út£ù¬ôí9³Û ®ÀôÖÍ|Έy‡ °%ÖM_#'Nœ?~îåiii3gÎLNN?~¼êŒ̣X»æU½e½ûBê8”Ñшă±cǾûî;­Ön?¨‘³9.Y²dÏ=ªcx¸¡?Ÿ’ơƯUÇA!èQ×4ø’—UÇ †Ç9sæFGGÇ>ø`ß¾}r¹——×ôéÓ]]]… ,PÀĂÍØ~QÖ#[VR…àÇ~¦ëâ_\|Lujè¨q(„HLLTÀC˜OßÈe1¶dæsÁ²~uÿÆöHGcpp°"ϳFăîƯ»…ƠªUSÀC¿|KÖơº>T ÀZ|öûyY¿ƯúqƠqPäUñ’ơ–3×UÇPLh‚1kLW×~̃µ†ê8(ræg#D̀;\€-°&z¹ªÚÁÁ¡zơêơëׯ[·né̉œVX“ồlY;;:¨ƒâPÆƯEÖ)·³TÇPLổ8ÆÓ§OŸ>}ú§Ÿ~ªQ£ÆOîTM6o8GăØÅcíÚµk×®Ư§O!Ä7>,ûÈ7n!®_¿₫ÇüñÇB''§ÀÀÀ•+Wª₫Đ˜üz"IÖ‚} °%X’N©w Zœ–é[Ê¥`Û wz9T-„đ̣̣jÑ¢E‹-´/ÏŸ?èĐ¡ƒ:tèäÉ“YYYƒáäÉ“ªc¸GÄÜC²^ÉôvfƠ€ºmfĐêˆy‡·i :€¢¥ß«ªK—.íáááááQªT)₫‹t*Ûhª]ơû+E!¼†¬wÄƯ(À–X8fggÇÆÆîß¿ÿàÁƒ8₫|îu¸VĐ•·VÅÊú³g¸g±=ơ[u,Q«<|¥gƯrÛ]SÜ8¦¤¤hmâ>|ëÖ­+¸ººÖ©S'́|||éu‰/¶ÄËzt›Êªă@•ê:¼µI«{-8jœÚFu"EHqăØ¸qc£Ñ˜caụ̀åĂÂÂx≰°°Zµj9;ëhX€ư¶¬ưK—PPä÷d²kÔ&׆+T¨ààà „HMMƯ³gO§<ùä“j3ĐÜ3}#—ÅØ±/»Xq÷¤…ÁÑ1³z«N ¨èe0ON¾|ụ̀¯£:,!„8øwª¬?î©:”̃¢’lgÿù7#`øÀ£X°çY÷óWUơu•ơ©«iªă(*4Eÿ¥'dưßÈPƠq Ø”ˆ²6?‡€Q|¨zơêƠª?@A=WÇ4 ÒF›¥¸q Tư È·~KËúÛçkª]Đ¸Â¼ƯwO`˜óç߃UT@áăP5€|[¸÷’¬6 Pº0÷_µdưÑ\ÅØ&Gùsà-ï®: øĐ8ÈŸˆ¹L߈¼-î"ëçU@á£q?oÜ‘uµ2nªă@Gú©63`·ÖœH’u·Ú~ªă@§&u©>yóy­»ö́ûíª¨N Đ(nË”)såÊ•½{÷îƯ»W.́ß¿ÿĂ¼²€N%˺uuƠq k%œ3 ÙZ}+Ăà^ÂIu"…Cñ¡êV­Z©₫Xäé_á85Äü;Äü;€µS<âøî»ï:;;ïØ±#11Ñh4j×Ê”*UJơÇ §ÛYÙ².]’$Ơ{´ûB¬Ăk0,e>ø—[ăUÇPtÔ8¦¦¦5*111ÏG¯^½úöÛoߺuKuLÀ¾üwÿeY÷¬[NuX™Ï’²>í¶ê8 JGcTTÔ?ÿü#„đññyóÍ7úé§;vüüóÏo¿ư¶···"!!áÛo¿U°/}¾?&ëåưj«+Ă„€ÑÑyî‡B¸¹¹-\¸0((H[èçç̉ºuë^½z¥§§3SX‘•–ơá8U°z:q|xÊ”)–<ư»ï¾Û½{·êO(VƯ盄¸[ ˈ–•d=yóyƠq< ]7…bÙ²eÙÙÙ#FŒ(WîîmvGíååµvíZmnȈ6mZÍ5U¿  X­íëëëëëk¾\»«a||üûơ×_Ÿ8qâ³Ï>óôôTư>€âÓf–éđL߈Âe₫UñĂªăÈ7Ư]S¸̉̉̉ ƒ··wå^^^Bˆäääû=ñàÁƒß~ûmddd³fÍ;–ß×Ơî‚cnƯºuª? »vñâÅ‚oÄNÍê—/̃(²b§èS‘î—Úfó&̃ÊŒ‹‹Sưv­?,ÊuêÔIu½°ñÆ1==]áîîc¹vÙÍ7î÷¬w̃y§R¥Jo½ơÖ£½nLLŒê·œªV­ª:‚ø÷º³²₫ }•¢₫ĐØ)úT¤û¥Më›Nß="æg§eT¿]ëÀ‹Z¹ÿ¬ç!²:=T³~ưú¥K—¦¦¦feeƯ¯Ă{(ooo‡´´´˵éu´qÇÜ&MtñâÅÉ“'3ß8́ÍÇÎÉú£NƠTÇ 2ŸĐ1‚ k£»Çèèè3f$$$h_6kÖ̀ÓÓ3<<üå—_:t¨ƒƒC₫̃³³——Wî¾3%%E!¯³6·{÷î%K– <¸^½zª?  X%§eʺtI'Ơq`›ÜK˜¾µ2 Æl €úqœ8qâ˜1cd×(¥¥¥Íœ9óĂ?|„múûû'%%i¢¤XăïïŸ{ưØØX!ĬY³‚ÿç¹çB¬Zµ*88¸K—.ª?$ ¨˜ÿ˜ …ë“§MƒÙï¬>­:€|Đшă±cǾûî;­vrr2 Z-G—,Ỵ̀3Ï4jÔ(_›mÛ¶mLL̀¶mÛyæm‰Ñhܲe‹OXXXîơ+W®,×ÔܸqcûöíaaaåË—Wư9EeGœil¾uuƠq`³̃oWéÚ»gÓ~¾ùÂä.5T'`)5sæ̀1ï¿ÿ~=êׯ¯-÷̣̣>}ú;ï¼sûöí ä·q́Ơ«×œ9sf̀˜ÑªU+혨¨¨ÄÄ常hëܺuëÊ•+...=öXóæÍ›7on¾…cÇmß¾½aÆŸ₫¹ê (*?¾"ënµưTÇóswI¼u÷Ôˆ„”;%U'`ª>qâ„¢sçΑ‘‘9®J騱c«V­„'ÒïfFuö́ÙˆˆˆqăÆơïßÚ´i¡¡¡¯¾úª\gË–-:u4hêÏP¦×‚£²^ñ2Ç©Q´̀'tŒ˜Ë%2€ƠĐQă˜””$î?ă@`` "111_ÛÔ 0`Ê”)U«V]³fMrrrddäÂ… sOî(OV1Mj±ïâMƠqXJG‡ªƒƒƒ8°gÏÜÆƯ»w !ªU{ÄùAºvíÚµk×û=Ú¹sçÎ;ßïÑĐĐPæe„mmúÿª{ê8° Ï×/·́àƯ$ï»Ù€3È+ £Ç:uê!víÚ5lذíÛ·k ăăă·nƯ:dÈ­q Q°A³ÿü[ÖĂZ<¦:́Â/Ơ–ơKÿ=®:‹èhÄñơ×__³fMbbâúơëׯ_¯-0`€\ÁÓÓsđàÁªc¶æÔUÓ ùU}]UÇè—Fưüü¦Nêëë›ç£“&M P°5÷Nßȼ÷(>sznÚ6à‡ªăx85Bˆ¦M›nذaĐ A¡¡¡¥J•B¸»»‡„„ 8đ÷ßoӦꀀ ¹bq¬]̃½[̣çơ'+Êz₫îTÇđp::T­ñđđ9räÈ‘#…©©©Ú̀‹È³³_iˆ>[Ír¥N₫ï_—Ăÿ¤Ö­Àï|@×ô5â(ÅÄĬ_¿~ơêƠ©©©YYY¹o6  PüŸÙơÔÿy¾¦ê8°;æ7·dBG@ÿt7â=cÆ y»êfÍyzz†‡‡¿ụ̈ËC‡•·Ø€@¿R²>í¶ê8B_#'N3fŒ́¥´´´™3g~øá‡ª6¥̣ÇÊúû>¡ªăÀN ~Êt¦cß%̀ËèÇcÇ}÷ƯwZíää$—ËQÆ%K–ä9=8€Gsáºi€çÅ'üUÇùœéÚêE{/©àAtÔ8Ι3Çh4:::~đÁûöí“˽¼¼¦OŸîêê*„X°`ꘀøóœéÔáF•S]u@¬À„€ĐÑ<¯¿₫ú5kׯ_¿~ưzmá€ä ƒV°z©w ².鬣ÿaϼƯLne °%EHG3üüü¦Nêëë›ç£“&M à–h@A™_|°r—Å@/Æu0ă>víÙl @QÑQă(„h򫎠  ZªT)!„»»{HHÈÀÿư÷6mڨ؂Íf'u ö-À–€Â4¾£©qœ°ñœê8̣ £CƠ‘#G9R‘êáÁ ï´Ế’ƠN5˨ÜĂËƠùÆí,­N¼•éçî¢:€{èhÄñ«ÿ‰×–Đ5…®›ÙqêU§†Î˜O)Ê„€éhÄ1::ụ́åËBˆÖ­[WªTIuÀö¹89¨Ü£¥Ù¤<;Ínn@'t4âØ£G­¸pá‚ê,€m±"VÖ“»ÔPÈĂ³uÊÊú‡ƒ—UÇp5C† yöÙg…sæ̀¹råê8€ új[¼¬G…?®:‡Ÿúבơ ‹©à::T=lØ0!Dụ̀åOŸ>Ư¡C‡Zµjùøø88ä<”6sæLƠI«t.ù¶¬:j7nÜ(ëôôôưû÷«NØ”{.‹y…Ëb __?4ôçSZưụ́“ßôª©:€»tt¨@‘:üOª¬qùV-wƠ‰¡«Æqøđáª#6kÀ'd½èÅƠq€‡˜Ö=0bîƯ“+"æ}ïIƠ‰Á¡j€u ñ“ơéÄtƠqÜ¥£ǯ¾úÊ’ƠÊ•+\»ví%J¨ X‡ÈïËz̃¿j©XäƠ¦ß₫ïÇ™;.¾ñÔcÛ€B £ÆqÖ¬Y–¯øÅ_©N Xï÷_’ơË+¨X$ªWMÙ8ùé# Öz¨:66ö¥—^JMM-ø¦Û¶7₫¦¬ëVà₫ï€G§£Æñµ×^{úé§µºL™2Ưºu4hPÏ={́î™M4yơƠW»wï^¶lY!Äơë×,X :5 wóÉéa]–D†Êºç‚#ªăĐÓ¡ê—^zéÅ_BôêƠḱر®®®ÚrƒÁđÅ_üç?ÿ9räÈûᅵ––öÿ÷»víÚ¾}ûo¼¡:8 kÿ¤dȺ²«ê8@>¼æß{ñƯ»F¾ª:=8~ùå—ñññåÊ•ûè£d×(„prrzûí·+Uª”––6cÆ !D©R¥̃yç!Äßÿ­:5 k“7Ÿ—ơˆ–•TÇ̣­Éă²̃w]uÀ̃é¨qܹs§¢bÅ9S988!º{Đ­té̉Bˆk×®©N èÚ»«ÏÈzZ·@Ơq€|3?¿BÎ́@5·nƯB=zôøñă9:{ö́áÇ…F£Q[²nƯ:!„v²#€îߪªNØ/8V®\yö́ÙåÊ•ËóQ—ñăÇk£’ tîÜYuj@§ÖL’u›>ªăâæbúk•r›Ö€2:j…aaa7n|ï½÷êׯïåå%„(Y²dơêƠ{÷îưÛo¿ơêƠK[­N:C† ™7owî'bÙqj¦o„•[iv®…ù÷6€b¦£CƠ’%Köïß¿ÿ₫BˆÔÔTwww‡ë|üñǪcz—i0ÊÚ½„“ê8@´̣•ơ–3×UḈ—¾F¥˜˜˜ơëׯ^½úÖ­[YYY7nÜP°&ï¬>-ë «©‚εÊÈzÅQ&ÔĐ]ă1lذqăÆ%''§¦¦¶nƯzúôér.öùæ ²Ó¶ê8@!0ŸàÙùÜ~PC_‡ª'Nœ8₫üÜËÓ̉̉fΜ™œœ<~üxƠ½KH¹#ë².ªă…ĂÉÑ¡àP@:qØ·oŸ\îåå5}útíîƠ ,PĐ»}oʺ{mî®Ûñyײ₫zûEƠq{¤£ÆñĉBˆÎ;GFFº¹¹™?Ô±cÇV­Z !N<©:& k‹÷]’ơ¿ê—+À–=z̀«¤¬Ï&¥«Ø5IIIBˆªUó¾%@`` "11QuL@×^ú¯éVïK_ª­:PÈ̀'%eBG øé¨q Bäy£Ñhܽ{·¢Z5&ûV±´¬]º¥:`wtÔ8Ö©SG±k×®aÆmß¾][¿uëÖ!C†hcHHˆê˜€~ øá„¬¿á²ب¾ ËËú?%¨ØưL˜˜˜Ø­[·Œöôô\¹re@@€ê¤£:îw¿³ l‰Ă[›dmœÚFuœ‡°“bu¬b¿X×·zÁYÅN±7vû·^G#~~~S§NơơơÍóQOOÏI“&é¿kT9”*ëZ₫îªălG!DÓ¦M7lØ0hĐ ĐĐĐR¥J !ÜƯƯCBBøûï¿·icûÿV̀üBó{l¶gAoÓiK/.>¦:`Gôuç!„‡‡ÇÈ‘#G)„HMMơđđP°®Ư–u ?·l Đ»¾ Ë÷[rw%.ÿ72Tu"À^èkÄ1ºFÀBÓ¶ÆËú§S(ræ—Wï¾¢:`/t4☾oß¾Ă‡_½zUkôóó«[·îO<áîÎ [Àƒ¼¹2VÖ3 R(r«^©[é£Z1ïđ¥ñÍU'́‚.ÇŒŒŒ%K–̀™3'999÷£nnnƯ»w>|¸ê¤€éfj ø˜ßBæ̣Í Ơq{¡₫PơÁƒÛ·oÿé§ŸæÙ5 !̉ÓÓ—,Ỷ¹s烪 è‘ùe1Ñư먓·Z?.뉛ΫØÅcrṛ«¯¾zé’éîº...!!!...æk¾öÚk×®]SĐ¡ƠÇM³Ÿ>W§¬ê8@1™̉µ†¬ßûơŒê8€]P|¨zÑ¢E))wOjnß¾}ß¾}5jäàà WØ·oß‚ Ö¯_/„¸qăÆÂ… ‡®63 +¿Ç₫›jQÍ[u X99:²ï«‘™íæ¢₫0`ÛÿŒÉ[ öèÑcÆŒ76ï… 4˜>}úóÏ?Ÿc}vsÈéaò¿çåµ2âÆñÂ… Z1tèЬ&GÏŸç,ྼƯtq¹Pl:×*#뤴LƠqÛ§¸q¼yó¦Â××·B… XÍÏϯlÙ²BˆÔÔT · ؃÷ל•ơ¸ÜÊö¨}éFµ¿HR°qGƒÁ „ps{ø].´;jëĐ|úû9YïHă{´êÓÑꈹ‡TÇlçÖêjªéÀœ—+©a§\MȲ™Ó(bºøcsçÎ;w>xôôtƠ1}‰˜g\1t́ÍgÏT—Óñ¼µ*vjD êD€Í̉Eă˜˜˜Ø¿Ơ)+³ë¼é₫¼-™ˆvlt›Ê²qübK<#Pt8T X¥^–ơ³Lú »ç_º„¬ă¯ßV°Y4€UzaÑ1YÿÄma÷̀'t4¿ '€Â¥øPơêƠ«U«×øqOYü›‰Û€¢¢¸q äL ßư#믟 RĐ…̃a₫KÜ=…cÁú5ªP°íȇªëóÍοe=¤ùcªăºđßÈPY÷_zBuÀ6éâªêb°|ụ̀eË–>}ºT©R­Zµ5j”ÏÖOOOÿá‡~üñÇ‹/–.]:((hÀ€O=ơ”ê÷ˆ“W̉d]½̀Ă'Ï °ØÅˆă´iÓÆ{æ̀™FyxxDGG¿öÚk˜2++«ÿ₫Ÿ}öÙ•+W|̣É5jüơ×_ ˜9s¦ê·ˆˆ¹¦ÿ™¾0÷Ÿçkʺߒăªă6Èöǘ˜˜¨¨(ÿuëÖEEE­_¿¾oß¾‡2eÊư²lÙ²ƒ6hĐ`Ë–-³gÏ?₫Ï?ÿ́íí=sæ̀'8üÅbM#!₫îªă:̣J“Y/Ü{IuÀÙ~ă¸lÙ²́́́#F”+WN[2zôh//¯µk×fggçù”uëÖ !̃ÿ}yíÀÀÀAƒ †;v¨~C°k³v˜În|µi@¶ئÚåMÿMøû¦ê8€­±ưÆqÏ=­[·–KœœœZ¶l™””´ÿ₫<Ÿçîîj¾P»<>>^ơ‚]{ă'ÓơÔQ½j`K€m2?Ăü¼…ÂÆ/1§OŸöơơơơơ5_$„ˆoذaîg}óÍ7ÎÎ9?™cÇ !*Uª¤ú=¯é±‹7î¨ØoÓ̉̉ ƒ··wå^^^Bˆäää<Ÿ’cÉ®]»¢¢¢J–,Ù½{wK^7888Çíđ7T¹xñ¢ê…àÉù¦ï¯:”‹‹S¨@lc§ØØ/ưëy~wèîÜÛ}½ëÛ.₫ª” ́kשS'ƠôÂÆGí̉iw÷œxxx!nܸñĐ- †ï¿ÿ~̣äɃaêÔ©~~~–¼nLLŒ%«¡8U­ZUu„‚º|ËÔ)ëh ·´b“¬}¿̀¯Zơ»·6iơïç̉¬ưíhlă]X¯ÜÖsÙ o½½½̉̉̉r,OMMÿw|€¿₫úëĂ?ưôÓfÍ©~C°_Ûă®Ëº‰ÙƯƠ}:%%ÅÓÓ4H£æïŸ÷‰/ÙÙÙo½ơÖo¿ưÖ®]»qăÆ= ¿͵ô,Yû—.¡: kƯj›N+Zs"IuÀvØøˆ£¢mÛ¶ƒaÛ¶mr‰Ñhܲe‹OXXXOY´hÑo¿ưöâ‹/Μ9“®zđÑo¦³ßk[YuÀ ´®nº¯́o1ÉØÛo{ơêåèè8cÆ í¼F!DTTTbbb=\\\´%·nƯ‹‹Ó.[3‹/.]ºô»ï¾«:;p׸ơ¦ÆñÓÎƠUǬÀ=:r´($¶¨: `Ô¨Q“&MˆˆhÑ¢ÅùóçwíÚúꫯÊu¶lÙ2räÈÀÀÀƠ«W_½zơÂ… nnn}úôɽµgŸ}622Rơ{‚}I¹m:Híæbûÿ́…¢tI'YßÉÊ.À–˜Ø~ă(„0`@Ù²eW¬X±fÍ *DFF1B›‘'7mÜ1==ưèÑ£¹å?óÁ’U\X́£NƠ₫½î¬V₫ờÄg­ ÊÁh4ªÎ`k‚ƒƒ™ÇQoâââ¬w4‡ÿÍH'„0Nm£:N¡±êbĂll¿ØÆíÛ`·ë9́èÚÏG®Êú™ZeTǬŒo)Y_º™¡:`ơh]{î»#²6?Ù€%̀Ïî0Ÿ À£¡q¬†£w¿̣穪¦;„í‰OQ°z4€~ ưù”¬§FÔP°J=ë¦ăưï₫˪ăÖÆĐ¯Û/ÊúÍV«X¥åưj˺Ï÷ÇTǬ# Sg’̉e]É»¤ê8Đ8ze~"ÿªơTǬجÁ²¸́¤ê8€£qtêøå[²®_Ñ£[́Ưÿ5«(ë¹%¨X1G@¾Ø/ë~*¨X½àr¥d}äŸ[Ø`×h=zkU¬¬¿{¡–ê8€Ơûª{ ¬»Í;¤:`­h¶¯c°éÆKqÉ·UǬ# ;½›f YĐ;DuÀF z̉t¦ăôm °%À~Ñ8º³ô€iâ¾ Ë«؈Ù=M×V_qª[́# /]0Ưí‰ÇJ«€ # /æÓ7®PWuÀ¦,ëkº‹L÷ù‡ °%ÀNÑ8úr%5CÖyqĂ 0ơªgºoơÊ£‰ªăÖ‡ÆĐ‘Ï~?/ë·[ssj đ5«â%ë?Î\S°24€ŒYsFÖŸw­¡:`ƒV™b~fKĐ8z‘™-kgGƠqÛTÆƯEÖ7ïTǬ # óLƒ«^á² ¨Œm_EÖÿ^wVuÀĐ8z±ñT²¬Ÿ®Y¦[đ wªfª7œS°&4€.üz"IÖ‚}UÇlœGI'Y'§eªX G@"æ’ơ*¦o˜ùOY·y\"XÆĐ…l£©.é̀&P´ÂkøÈz{Ü Ơq«Áß'@½7WÆÊzâ3ƠUḈBD¨Ÿ¬£_Q°4€zÓ¶ÆËúƯ6•UḈ‚ù-={.8ª:`hÅ.\»-ẹ̈¥K¨À}Ñ8™Oß8™»ÅŨ_£̣²~ă§Ơq+@ă(v(!UÖ/5(_€-ÈŸï^‘ơ¬«XG@¥ïöü#ëŸđW°;U|]e›˜¦: w4€J//=!ëïû„ªØó #æ2¡#đ4ûU§‚‡¬O^aÄxG@™¾ÿ=.ëÿ<_SuÀN h\AÖß́äLGàAheí»$ëW¨Ø©¹ÿª%ëA?rm5đ 4€û/̃”uị́îªăđp4€æÓ7®z¥n¶  ÷1ÍËó¯EÜE¸/G@¿oÜ‘uU_7Ơq»Öç ÓªËrßjà¾h¦üqAÖĂZ<¦:ѰRiYïªă¸G 'ÓŸÅ[ƠqƯ¡qUǨƒ²fúF@ò*+}´Cu@wheJ—tRÀ=:ûÊúZz–ê8€îĐ8Ågô¯gdưQ§jªăÈC§edư˱DƠq}¡qϤMçeưAû*ªăÈĂª¦£ƠLèä@ă“K73dí[ÊEuysqrPĐ/G ˜t3º0̉ 7“»ÔơÈ•±ªă:Bă“ƯRdưTU/ƠqÜרđÇeưåÖxƠq¡qĂ’—eƯ³n9Ơq¡#—È#95x¬´¬ü“ª: 4@‘{uÙIYÏê¬:‹D6(/ëy»ÿQĐG Èưç¯Yÿ_³ªă°È¢CdưÊ'TÇtÆ(ZÇ.Ư’uPÙRªăđèh¢e~ZưJ¦o¬Ê¼Ơ’uä÷ÇUÇÔ£qÖÙ¤tY×,Lj#`M^n\AÖߦ: #P„¾̃~QÖ¯?ÉÙ€ơ©[ÁCÖ{ăoª(Fă¡a?Ÿ’ơœ\O XŸ{'t<¤: #÷UÙÇUÖÿ¤d¨(Fă•€wÈú‡—¸[ `­F¶¬$ëg₫Ă #́#PT₫I¹#ëçësjÀZ}Ñ-PÖkN$©¨Dă‰-g®ËúÉ*^ªă(SaÈVP†Æ(æÓ7®búFÀÊ­|Ù́™¹‡ °%ÀºÑ8E"åv–¬ưÜ]TÇP ]Cưd½>&Yu@G đ['ë÷ÛUQ@!hSĂGÖëNr¦#́#Pø>úÍÔ8~̣t5Ơq‚{'täh5́#PÈ®¥›R{”tR@áp/aúqÎ4UÇÔ q YÄ\Ó4o+¹,°!æ̃Y}Zu@G m»!kó“¢X;óS–?ß|Au@G 0E¾"ë³Ë0ØóÌ&ù́#P˜z.8*kS¶Ç|ZÖn\"ûă¬:€~-_¾|Ù²e§OŸ.UªT«V­FåăĂaG°kæ7‚ÚSu ¸1☷iÓ¦;ö̀™35̣đđˆ~íµ×̉ÓÓUç‚®½ñSŒ¬¿́X€-Đ/ó[Ï¿ÿ’ê8@±¢q̀CLLLTT”¿¿ÿºu뢢¢Ö¯_ß·oßÇO™2Eu4èÚ¬Ëzx‹Jªă(?¼T[Ö‘ßW(V4yX¶lYvvöˆ#Ê•»ûoåèÑ£½¼¼Ö®]›Í½í‘·ØÄ4YWñuU€ÂGă˜‡={ö8::¶nƯZ.qrrjÙ²eRR̉₫ưûU§ƒNÈ5&¿Ëb›6§g°¬_ùá„ê8@ñá☜ŒFăéÓ§}}}}}}Í— !âăă6løà-œê2Ûá­Mªßr‹+ø&,T§‚‡ê7  ½₫dÅA?̃=§ỹîæí₫§è_³ø~ƒÁ"]f«N cNiiiƒÁÛÛ;Çr///!Drr²ê€Đ»^µJÇÅñ+₫á.^¼¨:̣À~±Pu—3×2U§cNÚ¥Óîîî9–{xx!nܸñÛ„]Y6°‘êV£jƠªª# ́K¬yƯ¿î”Ưw²8ñö…Æ1'ooo‡´´´ËSSSÅÿÆ̀%-©âcs,LNËô-åb¾ävf¶«KÎsL/^¿ó˜wIK^¾™á_º„ùC¶ÑÉÑá‘7˜çB£Q8Ü»ÉR2*x–xä fdK8ß³ÅÄÔL?—G̃à­ ƒ{ 'ó%×Ó³¼Ưœs=÷öc̃®–l0÷Ós¿Äư+„ˆ{¿™`‚Ê–º=©uƠ æ~èRJFù{OŒF'‡‚ü~Îă7X¶Qäø•Ÿûuóơ*w²²K:ßóW)ñV¦ùṛ»ÁÔ;’÷ụ̈¼‘å•ÇïgK7x-=Ëç̃§§eJYöû9Ï…WS3Ë̃û(Ă`,ádÑúûâßÂ.Ñ8æä́́́åå•{d1%%E!¯³~€ª›ÆÆÄÄK—.½ß –́{ØM4…`Ï=­[·–KœœœZ¶l™””¤ư:@Q‹‹‹sww 5_(„ˆ×¾d7)‘••ơÎ;ïøøøŒ=:÷£́”â·uëV‡îƯ»›/œíëëëëëk¾<((H˜u-(Rß|óMî;&„¨T©’`7©óơ×_Ÿ8qâ³Ï>óôồñ;E‰£Gúøø”/_~ï̃½ß~ûíçŸ₫Ë/¿¤§§ËØ/ůK—.®®®&LعsgzzzBBÂ|pñâÅ^½zi?8́”bĐ¼yó¶mÛ¶mÛÖü¼RÉ’]`'»ÉYu«—––f0¼½½s,÷̣̣÷₫‰¢’cÉ®]»¢¢¢J–,©¬°›”8xđà·ß~Ù¬Y3­7ÇN)~7õ¬Q£Æøñă—,Y"—WªTéË/¿¬]»¶`¿¨¼hÑ¢₫ưû÷ïß_.ŒŒŒ3fŒV³S”³dØÉnbı ´ÿÔƯƯƯs,÷đđBܸqCu@»c0.\8pàÀ´´´‰'úùù v“ éééï¼óN¥J•̃zë­û­ Ø)ÅëæÍ›BˆÓ§O¯Y³f̉¤Iươ×–-[†ú÷ß>\Û#́—â—’’2qâÄ[·n…††¾đ íÛ·wss[±bŦM›´Ø)ÊY² ́d71âXP̃̃̃iii9–§¦¦ÿưŸbó×_}øá‡gΜ©P¡Â§Ÿ~*OUa7¿I“&]¼xqÉ’%̣¥Ø)ÅÏƠƠU+&NœØ¦M­2dHBBBttô¯¿₫Ú³gOöKñ{çwöíÛ7zôè—_~Y[’đ /Œ9rƠªUƠªUc§(gÉ.°“ƯĈcA9;;{yyå₫O"%%E!¯«BQËÈȘ0aB¿~ư†ºvíZóœÙMÅl÷îƯK–,yươ×åơ¹±SŸ»»»«««››[xx¸ụ̀víÚ !N<)Ø/ÅîÊ•+›7o®Q£†́…ƒÎ̀̀üùçŸ;E,Ùv²›h ¿¿RR’ö!ÅÅÅi©Ng²³³ßzë­… ¶mÛö·ß~2dHîQ.vSq̉nz1kÖ¬àÿyî¹ç„«V­ î̉¥‹¶;¥ø•+WÎÅÅÅÁÁÁ|¡öó’••¥}É~)NIIIBˆ*UªäX^­Z5!ÄƠ«Wµ/Ù)ÊY² ́a7Ñ8‚¶mÛ †mÛ¶É%F£qË–->>>aaaªÓÙ…E‹ưöÛo/¾øầ™3ï÷_»©8U®\ù™{5õ\đ̀3Ï´lÙR[RüÂĂĂSRRN:e¾P›(DεÉ~)NUªTqrr5æËcbb„5jÔĐ¾d§(gÉ.°‹Ư¤zr[đ÷ß׬Y³S§N7õÔ–̀™3'((ḥäɪ£Ù…́́́víÚ5hĐ ==ư«±›Ô:zôhî;ǰSßñăǃ‚‚zơê•””¤-9|øpXXX£Fµ%́—böúë¯}ùå—̣æ=§NjÚ´iíÚµOŸ>­-a§›÷ß?Ï;ÇX² ́a79ïưf̃¼y“&MªX±b‹-Ο?¿k×®yóæå¾,…îÊ•+-Z´pss«^½zîGŸ}öÙÈÈH­f7)t́رç{.""âóÏ?7_ÎN)~ß|óÍ_|áååƠ°aĂ´´´={ö888|₫ùçO?ư´\‡ưRœ{ö́ùÏ?ÿT©R%$$$))iß¾}ÙÙÙcÇíÓ§\R<Æ»|ụ̀eË–å>EÛ’]`ó»Éiüøñª3Ø‚°°°*Uª\¾|yûöíÎÎÎO?ưô¤I“rÏxŒ¢••u%/5kÖ”Wɰ›ºzơê?üÜ¡Cóǻ”â×°aĂ€€€³gÏ=zôÎ;M›6ưâ‹/4ib¾û¥8•*UêùçŸB\ºtéàÁƒ™™™ 6œ}z¡DÚµk×[o½•˜˜¨}™––¿aÆ₫ưû=ºè> ª0âÀRû÷ï×:”*U*÷ QQQ+V¬X±bEÇs>>7BF­5}´a|XN‡₫Ûo¿í̃½ûÁ›µäƠÛ·oïèè(„8qâ„¶$GăxëÖ-y˜XödzdË“Ëo†~øAº~ưúÆ7ỉ$<<¼pO© \ ̃{ï½^½zƯ¾}Ûh4NŸ>}úôé>>>)))ƒA[¡dÉ’Ó§O„¾-88ØÏÏ/11Ñ`0ôîƯ;<<ÜËËëï¿ÿ̃´i“¶Bûöís?ë·ß~kÓ¦MơêƠ9¢,vtt6lX1|~i9÷íÛ·»wï^«V­k׮ɫIrđôôÔΜ5kVlll¿~ưœôËÙÏϯaƲ“«V­œ£QSªT©R¥JiÛ|ÿư÷W¯^íàà°mÛ¶ß3&¿É_ươeË–¥¤¤lܸ±oß¾7•ç\¾ụ̈Ẹ̈ê"6ƒGù4₫|ó룯]»&»Æ+~ươ×0Ü(„pttœ9s¦vp311qụ̀åÿùÏÖ®]«mܸñÀs<¥Q£FW®\Ù¹s§Öºi³äéE;thhè3Ï<£Ơéééû÷ï‹‹«T©’¥Ë±5­8pàÀäÉ“-w4Ÿœ(÷qj‡Ö­[ËWß´iÓï¿ÿîïïߤIm¡6Tœ'Ë“{zzN4I ̃½{÷Œ3Ö¯_¯ÍøÓ»wï¡C‡ơ^PühäÏO<ñÛo¿3¦qăÆeÊ”)Q¢DƠªUÛ´i3f̀˜uëÖµjƠê‘·\¿~ư 6 <¸N:åÊ•svvöôôlĐ Á„ .\(¯¶–¼¼¼–,ỴüóÏW©RÅÏϯcÇß}÷Ư /¼P ‚%/=ỵä‘#G¹¹¹…„„ôíÛwÙ²ey^]>f̀˜®]»–)SÆÍÍ-00Đ’ ‰:v́¨­¹®§–Û B8::Ö¬Y³ÿ₫+V¬h×®öèêƠ«åaèÜ,Õ¦M›•+WöêƠ+44ÔÍÍ­R¥JíÛ·_¼xñøñă-y¬CîùÉ@Ͼúê«Y³f !Úµk7sæL;yéG••µyófqŸ£üđ8Çl“³³3-#€ÂÅ¡jX„Æ¡q€E¸8aÄ¡q€Eh`GX„ÆùµĐ¦Ưđˆƒ§IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/fcm_101.png000066400000000000000000000347721463010412100215550ustar00rootroot00000000000000‰PNG  IHDRh\­A9ÁIDATxÚíƯ{˜Uu½øñ5€ÆcÈ5H8ÀhJ`'¹¨\́P‰BÆ/5́ä•$$ÄK*铉 y đ`¦G¢à˜h ^P@î71uF‘™ưûcwÆƯaXa¾{Ï~½Íw/˜Ï|Z¼[{ï5y‰D"€©z²ƒp á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆ¥Aèê ÂÂÂĐ#‡ĐºuëB†p<$röïSU………v£’ƯHe7RÙ46$•ƯH•!»‘!cÔ>/U‹p á@,€X„#±G­… †!ƒØTv#•ƯHcCRÙTv#,á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ’Óá¸yóæÂÂÂ×_½æĂv́ØÑ«W¯ &„ ¤œǹsçđ˜D"qƠUW}ôÑG¡‡¬Aè())Y¿~ưO<ñĐCđàxॗ^ =2@x¹C‡ưÛß₫çÈ 6ÜvÛmÇs̀ÚµkCO X.†ă´iÓ>ưôÓ(æÍ›÷â‹/îï°}ûöMœ8±  `̉¤I\pAè©ËÅṕׯ_̣ÁâÅ‹k8́;îX³fÍ}÷Ư×´iÓĐ#„—‹áÇ+fÏ=jÔ¨>}ú¬^½úŸưí………i+ . ư=…QTTz„ b7RÙTv# Ie7RÙ!C†„₫¾3…p¬FYYÙĉÛ·o?~üøÿÛŸ°nƯºĐßD騱cè2ˆƯHe7RÙ46$•ƯHUû»QơŸơªWˆr„p¬ÆôéÓ‹æÏŸŸŸŸz€L‘Ó÷q¬ÖK/½4₫ü‹.ºèøă= @qÅ1Ư† ¢(9sæ̀™3S×,X°`Á‚.]º<ùä“¡g@8¦ûêW¿úƯï~7ueÏ=K–,iÛ¶mÏ=[·nz@€0„cº~ưúŨ¯'iơêƠK–,éƯ»÷-·Üz:€`¼Ç€X„#±äôKƠS§N:uêëÑ£‡û2¸â@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#[̃y'ôYK89äơ×£¶m£ ö{@—.Q^^è)2•prÅë¯G'œEQ4cFơíØ¥K´qcEÚ zÂÈÇÿùăªíXÝprH"ñùăÔvL«ÆÔĂ¨Ô ôµ*‘øü•è3¢(\5Ä"œSµSŸ`¼T ä¢jQ5ÔL89ªsçøå•W† ă G Uư ơ₫îÑ@%áäœưƯyG;ÔL8¹¥êwöw̉G ‡́ï~Ú áäị̈ÖøCèq2prņ Ÿ?®ùv<^z\€̀#’LĂîטHD^ưö·¡ÈHÂÈ-¼Ë·jØá@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±G²3ϬéÙ BÏü_åt8ñ¼¹°°đơ×_¯úTYYÙ “TĂư€¬ «·wï̃iÓ¦₫ù;v́3f̀ÓO?Ư§OŸĐCe‡´jܼùó×§µ#d5áXñăÇÏ™3gĐ AÏ>û́å—_^y_jVíwª½Gu„c5æÎû́³Ï{î¹w̃ygË–-C“5j¸_£v€:@8¦K$óæÍ;âˆ#®ºêªĐ³d™ß₫öóÇU3Ö@Öñ©êtï¿ÿ₫[o½•ŸŸ?räȪÏ>|Ô¨Q¡g̀PÅÅQAA´{÷~ï×XyG7t€l$Ó%oUVV¶jƠªªÏúˆLÍ‹p€d€́•Óá8uêÔ©S§¦-~ưë_wF€ª¼Ç€X„#±GbÄ"ˆE8‹p á@,€X„#„öÊ+¡'€XrúGBxyyƠ,ú‘̃d$W!œj«±†uJ8B 5סv óG!NæåEË–…>'ˆE8‹p á@,Â2Ø5¡'€Ï G¡I“X‡{lèAàs~r „đá‡Qt ›̣øù1dW!œ̉P5y„#Ơ¯_5‹ª€Œä¥jêùçCOq¹â@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8KN‡ăæÍ› _ươjŸưĂ₫0bĈ={öíÛẉäÉÅÅÅ¡ç)§Ăqîܹû{ê¶Ûn›2eʦM›N<ñÄ&M<úè£?₫ñËÊÊB LƒĐPRR²~ưú'x⡇ªö€uëÖÍ5«U«V<̣HË–-£(6mÚœ9sf̀˜qÍ5ׄ Œ\¼â8tèĐ‘#G(zøá‡+**Æ›¬Æ(&MÔ¬Y³§Ÿ~º¢¢"ôøaäâÇiÓ¦}úé§QÍ›7ïÅ_¬zẠ̀åËëƠ«wê©§V®Ô¯_ÿä“O~â‰'^}ơỠ½{‡₫ÈÅṕׯ_̣ÁâÅ‹«>›H$6nÜxä‘Gyä‘©ë]»v¢hûöíÂÈM¹5+---//õ¼yÚz³fÍ¢(úàƒâü!………i+ . ư…QTTz„ b7RÙTv# Ie7RÙ!C†„₫¾3…pL—üètăÆÓÖ›4iEÑ={âü!ëÖ­ ư}d;†!ƒØTv#•ƯHcCRÙTµ¿UÿY¯z…(Gäâ‡cjÖ¼yó¼¼¼̉̉̉´ơ>ú(úßë9H8¦kĐ A³fͪ^Y,))‰¢¨̣sÖ¹F8V£U«V»víJ–b¥-[¶$Ÿ =@±ƒ *//₫ùç+W‰ÄsÏ=WPPĐ³gÏĐÓ„!«1bĈzơêưæ7¿I¾¯1¢Y³fíܹó¬³Î:́°ĂBO†OUW£mÛ¶&L˜>}úgœÑ¿ÿmÛ¶-]º´Gÿ₫ïÿz4€`„cơF}ÔQG=₫øăO=ơT›6mF5v́ØäyrSN‡ăÔ©S§Nº¿g‡:tèĐĐ3d ïq á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#*Ï=ååƠt@ûö82p„Câ¹ç¢SO¢h¿iؾ}TTTÓi„#¯½öùăªiXYE„#cÇF·Ưöù/SÛ1­‰Đ³@<•jÛQ5½„ê²±c£(~úÓ¿ÿ²S§©ÏªF²‹+ph¥]w¬¤È:¹±c£æÍÿaE5„#ríÛG»wÿĂ[đ„#Zû»óv ëG8„̉ªqóæ-û»Gd>á‡Jµw̃©á₫á„#5ܯQ;¥„#Û·₫¸êg¨SÛqüøĐ³@»fÍfÍrÊ)'Ÿ|rƠc¦M›VQQqÍ5ׄ₫AÍ÷kL¶#d‹LÇ'Ÿ|̣k®)--M₫r̃¼y ¸ưöÛ6l˜z؃>X^^.Œ~ă¶mÛ&MTZZzê©§^sÍ5?ùÉOZ¶l¹xñâŸV₫è_jKF_qœ9sægŸ}vÉ%—Œưß—ôÎ=÷ÜóÎ;oÑ¢EO<ñÄĐ¡CCC2úăêƠ«óóó/»́²Ê•‚‚‚_ưêW 4˜1cƧŸ~z@€’Ñá¸}ûö:vØa©‹]ºt9÷Üsÿö·¿=øàƒ¡È!Í›7ë­·öíÛ—¶~饗6mÚô®»îÚµkWèrEF‡ă±Ç[VVöĐC¥­L4©¤¤äk®©¨¨=&@NÈèp=ztES§N0a¢E‹̃}÷ƯʧÎ:ë¬~ưúưùϾ́²ËÖ®]zR€º/£Ă±W¯^cÇÍËË[°`Á%—\rï½÷¦>{Çwœt̉I‹-:ó̀3ËËËC PÇet8FQtÉ%—ü×ư×…^ø¯ÿú¯GuTêS5={öơ×_ߥK—¼¼¼Đ“Ôq}Ǥ®]»Nœ8±Ú§;́°sÎ9çœsÎùä“OBO P—eúǘ6lعsçĐSÔeu$8Ô„#±GbÄ"ˆ% nÇ“f÷îƯ«V­zçwÚ¶mÛ·oß;w¶hÑ"ôPu_6…ă®]»îºë®Gy¤¬¬,¢óÏ?¿oß¾Ă‡ïÑ£Ç7̃XPPz@€º,k^ª₫́³Ï.½ổ¹sç6mÚtøđá•ë-[¶\¼xñÙgŸ¬I‘¬ Ç{î¹gŧœrÊÂ… oºé¦Êơ‡~ø̀3Ïܺuëœ9sâ—Û»wḯÙ³¿÷½ïớÙsàÀW\qņ Bï@HY/½ôRưúơo¸á†F¥®×¯_ÿÚk¯mÔ¨Ñ3Ïâˆ#Ö×zơƠW£(:ÿüó“ƠEÑI'Ô­[·­[·~đÁ¡w Œ¬ ÇîƯ»¿óÎ;o¼ñFƠ§Ö¬YóöÛowëÖí`}­6mÚDQ”Úˆ‰Db÷îƯơêƠ«LI€\“5áøƒü //oüøñ«W¯N]_½zơرc£(6lØÁúZ§Ÿ~zÆ §M›ö׿₫µ¬¬lÇ×\sMQQш#6mz'ÂÈK$¡gˆkÆŒ³gÏ¢¨S§N›7on×®]£F6mÚTQQ1|øđÔZqo¼ñÆ\úâø¨Q£&O\¿~ư₫̃ª‹ . ½a}å+_ =E¦°©́F*»‘Ɔ¤²©‚́Æ!Cª.®[·.ôfM/¼^y啽zơ>}úæÍ›£(zûí·£(:ꨣÆ—zgÇ/®¤¤ä¦›núøă{ôèqÜqÇíÚµkÉ’%?₫ø7¿ùÍÓN;-Ο›™ö§cÇ¡GÈ v#•ƯHe7̉ØTv#UíïFƠÖ«½H” ²)£(0`À€‹‹7õ¼wï̃N:µjƠê •‰'¾̣Ê+“&Múá˜\Ù±cÇÙgŸưÓŸ₫tÁ‚:u ½ dÍ{‹̃zë­äă‚‚‚^½zt̉I‡¢ß{ï½Å‹wîܹ²£(jÛ¶í¥—^úÙgŸ=öØc¡w Œ¬¹âøï|çÓO?}á…ª½•ăA´k×®(>úè´ơä…Æ÷ß?ôN„‘5W»téEÑúơëơ:úè£ëׯ¿aÆ´ %ßßĐ¹sçĐ;FÖ„ă5×\“ŸŸ×]w}̣É'‡ô åççŸ|̣ÉÛ¶mûơ¯]QQ‘\ܰaẰ™3?üđ„̃ €0²æ¥ê–-[̃zë­×^{ígœqÆgtèĐ¡ê-O=ơÔƒ̣µ¦Núưïæ̀™O=ơT÷îƯwíÚơÊ+¯TTTL™2å_₫å_Bï@Y•—úvîÜyÇwT{̀Áº N‹-zê©»ï¾{É’%ÿó?ÿSPPpÊ)§\rÉ%Çw\èm&kÂñŒ3ΨÍ/רQ£qăÆ7.ô÷ )²&o¹å–Đ#ä´¬ùp aeÍÇo~ó›ưôÓ믿>ôŒuY¿Ç±~ưúíÛ·=zôwܱgÏŸ₫ô§i?뀃(‹Ă±̉7¿ùÍÎ;oß¾}ûöí¡g¨³êB8FQÔ²eË(¾üå/‡ Îª áXZZúæ›o¶hÑ¢qăÆ¡g¨³²æĂ1ưë_«]/..;wî|0xđàĐ3ÔeY\pA ÏqÄW\qEè견 Ç~Vu‡† Ö¾}ûĐ3ÔeY~V5@XYóá˜={ÖĐcÆŒù·û·Đ3ÔeY¥¥¥Ÿ}öÙ₫zë­·̃~ûíĐ3ÔeưRơsÏ=wÉ%—T₫rΜ9óæÍ«zXEEE"‘èĐ¡Cèy게Çúơë7mÚ4ù¸¸¸øđĂoÔ¨QµG6õ|̉¤I¡ç¨Ë2:ûơë·té̉äă³Ï>{̣äÉ¡‡ÈQ©.¼đẪ½{‡ we͇c&Nœ8pàÀư={ƠUWƠđ,d‹¼¼èÜsp„’5W£(*..₫óŸÿ¼mÛ¶´ơ²²²?ưéOơë×= |!É(œ??¢è?₫c¿äåE‰DèYÉIYï¾ûî9çœSĂ=wFzF88ªmÇÔk×_]}è)É=Y÷ßÿÛo¿}â‰':ôüă²eË®½öÚüüüµk×Λ7oäÈ‘W_}uèà I$>¯Ă´vL­Æë®S„‘5áøüóÏéK_9sfÓ¦Mد_¿;öéÓ'¢N:ự—¿üÿïÿué̉%ô˜đ…TmÇiÓT#™"k>óÎ;ï}ôÑÉÛ:uÔQ«V­J>5bĈ‚‚‚ûï¿?ôŒp¤¾q₫ü¨S§•¿T„•5áEQ½zŸOÛ¡C‡-[¶$ׯ_¿°°đ7̃= Ơ~öE5\Ö„cëÖ­·nƯúñÇ'Ù¾}û—_~¹̣Ù¼¼¼¢¢¢Đ3ÀA“ÖÇ« /kÂqđàÁeeeW^yå¦M›¢(êƯ»÷[o½µdÉ’(vîÜùÊ+¯´k×.ôŒpФƯ¯qƠªÜßjAÖ|8æ¼óÎ{æ™g-Z”H$î¾ûî“O>¹Aƒ—_~ù׿₫ơµk×–––~ç;ß =#Ỡ廆û;BíÈ+-Z´xđÁÇwÜqÇEQÔ®]»)S¦́Ư»÷…^صk× AƒFzF8̉>C½yó–Ê_Οïº#!eÍÇ(Z´hqÑEU₫̣œsÎ:tèÊ•+[µjƠ©S§ĐÓÀAPơÎ;[¶ÔtG¨MÙI»wï^µjƠ;ï¼Ó¶mÛ¾}ûvé̉¥E‹¡‡€ƒ †û5jG2A6…ă®]»îºë®Gy¤¬¬,¢óÏ?¿oß¾Ă‡ïÑ£Ç7̃XPPz@88ª½óNj;ªF‚È÷8~öÙg—^zéܹs›6m:|øđÊơ–-[.^¼ǿ³ÏNÖ$d¯ä-xj¸_c̣€jị̈µ kÂñ{îY±bÅ)§œ²pá›nº©rưá‡>ó̀3·nƯ:gΜĐ3À•Hà~ª‘€²&_zé¥úơëßpĂ 5J]¯_¿₫µ×^Û¨Q£gy&ôŒuYÖ„ă5k:v́Xíç`4ỉ©S§mÛ¶… .ËplÖ¬YåϬª¸¸øˆ#=#@]–5áØ½{÷w̃yç7̃¨úÔ5k̃~ûínƯº… .ËpüÁ~——7~üøƠ«W§®¯^½źرQ 6,ôŒuYÖÜDZoß¾?úÑfÏư½ï}/ùsb₫û¿ÿûÅ_Ü´iSEEÅđáĂÿíß₫-ôŒuYÖ„cEW^ye¯^½¦OŸ¾yóæ(̃~ûí(:ê¨qăÆ¥̃Ù€C!›Â1¢ 0 ¸¸xóæÍ{÷îíÔ©S«V­B27÷îƯEÑá‡^ơ©‚‚‚^½z… ·dî‡c;î¸ÓN;-ôü]æ†cµ†₫Ío~3ô¹(ËÂqÏ=ÅÅÅ¡§ÈEY„"ˆE8‹p á@,€X2÷'ÇDQôî»ïö́Ù3u¥¬¬,¢´ÅJ¯½öZè‘ꬌÇD"QZZZu½ÚE©̀ Ç'Ÿ|2ô|.sñK—.aX¹rå=÷ܳzơê>ú¨°°p̀˜1ÿú¯ÿzW‚ñá˜ê-Z´èœsÎY´hQË–-{ö́ùÚk¯w̃y‹- =@0™{Å1 ={ö\uƠU 4¸÷̃{{ơêEÑo¼1räÈk®¹æÔSO­WOm¹HUăÑG-))¹øâ‹“ƠEÑ×¾öµoûÛ;wî\¹reèéÂƠøË_₫’——7lذÔÅ›o¾yƯºuÇ|èéÂđRu5V­ZUPPĐºuë—_~ùµ×^Û½{÷1Ç3xđàüüüĐ£#ÓíƯ»÷Ă?ܹ́óơ×_?₫üÊơöíÛß~ûíÇ{lœ?¤°°0meáÂ…¡¿³0BÁF*»‘Ên¤±!©́Fª »1dÈĐßw¦é>üđĂ(6nÜø₫ûïOŸ>ưÔSOưä“Oyä‘;ï¼ó+®x̣É'ă\w\·n]èï#ƒt́Ø1ôÄn¤²©́F’Ên¤ªưƯ¨úÏzƠ+D9Â{Ó5lØ0ùছn6lXóæÍ[·n}ùå—>¼¨¨èücèÂé7nܰaĂüüü¤®<8¢µk׆ áX–-[vØayyy©‹ÉW¨÷íÛz:€0„c5 PRR²~ưúÔÅW_}5¢c9&ôtaÇj ><¢)S¦|đÁÉ••+W̃{ï½Í5;í´ÓBO†OUW£[·năÆûƠ¯~5dÈ̃½{—––._¾ê áQEyyÑư÷à€Œó̃{Ơ,ª9D„ÂKFáèÑQE?üá~ÈË˰—:*Ă¢sÅ>7zt5×S¯5N˜zDG8À?\¶KkÇÔj¼̣Êè–[BÏ áGˆ¢ư´£j„TÂ₫.­U#¤đ¹j?j¢!I8À?HkÇ!CT#üp€v¿Æ… pGÈÂ>Wí]¾«½Gä á—öi˜îѹI8@íçÎ;ÚR G¨éÎ;Ú* Gø\µw̃ImÇj’5äáOĂîט< Ú»«W¯₫g{aaaÚÊÂ… COa…!ƒØTv#•ƯHcCRÙ(z÷>,¾’º̉°á–-[jé«2$ôd áX²²²‰'¶oß~üøñÿ·?aƯºu¡¿‰ ̉±cÇĐ#d»‘Ên¤²ilHªß5k¢o}+}±S§‰D- PơŸơªWˆr„÷8VcúôéEEE7ß|s~~~èY §¥}†zôè’ÊÇnßXû\qL÷̉K/ÍŸ?ÿ̉K/=₫øăCÏ9­êw6ÜƠ¹sÓÊ÷;æåEµvƯ‘ÈǪ6lØEÑ̀™3 ÿ×÷¾÷½(,XPXXxú駇rÂ₫î׸¿û;R \qL÷Ơ¯~ơ»ßưnêÊ={–,Ỷ¶mÛ={¶nƯ:ô€j¸_cÚç¬]w¬5Â1]¿~ưúơë—º²zơê%K–ôîƯû–[n =äDâïW«½óNj;ªÆZ#€ •HDkÖ́÷~ÉvL₫7µĂ{€̀Uó]¾Uc-sÅñÀzôèᾌ®8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ̉ ôª¬¬́÷¿ÿư#Y¶lÙ’%K~̣“Ÿ\vÙe¡§C8Văá‡^±bE¯^½î½÷̃üüü(6lØ0jÔ¨;ï¼sàÀƯºu = @̃ăX… FQtơƠW'«1¢.]º\|ñÅååå/¼đBèéÂƠزeKăÆ{ô葺إK—(¶oßz:€0¼T]{î¹§AƒôY½zuEíÛ·=@±Ư»wO[Yºté¬Y³¾ô¥/ 6,ΟPXX˜¶’|ù;…!ƒØTv#•ƯHcCRÙTAvcÈ!¡¿ïL! ¼¼üÁ¼ùæ›ËËËo½ơÖ-ZÄù]ëÖ­ =x騱cè2ˆƯHe7RÙ46$•ƯHUû»QơŸơªWˆr„p¬É²eË~₫óŸoÚ´©M›67ÜpCŸ>}BOŒp¬̃̃½{o¹å–¹sç6lØp̀˜1^xaå'¬r“p¬FEEÅøñăŸ}öÙÁƒ_wƯu-[¶ =@x±sçÎ}öÙgÏ=÷Üë®».ô,™Â}Ó%‰yóæqÄW]uUèY2ˆ+é̃ÿư·̃z+??äÈ‘UŸ>|ø¨Q£BÏ€pL—¼ATYYÙªU«ª>ëƒƠ@Îé¾₫ơ¯» #@Ũă@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹pܯ?üá#FŒèÙ³gß¾}'O\\\z¢¬4dÈĐ#d»‘Ên¤²ilH*»‘Ên„%«wÛm·M™2eÓ¦M'xb“&M}ôÑÿøÇeee¡çF8VcƯºu³fÍjƠªƠÂ… gÍờ3Ïœw̃yo¼ñÆŒ3BŒp¬ÆĂ?\QQ1v́Ø–-[&W&MÔ¬Y³§Ÿ~º¢¢"ôtaÇj,_¾¼^½z§zjåJưúơO>ùä]»v½úê«¡§C8¦K$7n<̣È#<̣ÈÔơ®]»FQ´}ûöĐ„Ñ ô§´´´¼¼¼yóæiëÍ5‹¢èƒ>ˆó‡†₫>2ˆƯHe7RÙTv# Ie7RÙ€„cºäG§7nœ¶̃¤I“(ö́ÙsÀ?aƯºu¡¿ €ƒÏKƠé7o——WZZ¶₫ÑGEÿ{Ư  Çt 4hÖ¬YƠ+‹%%%QU~Î ×Çj´jƠj×®]ÉR¬´eË–äS¡§C8VcĐ AåååÏ?ÿ|åJ"‘xî¹ç zö́z:€0„c5FŒQ¯^½ßüæ7É÷5FQ4kÖ¬;wuÖY‡vXèéÂÈK$¡gÈD÷ƯwßôéÓÛµk׿ÿmÛ¶-]º´{÷î÷Ưw_ƠÛôäá¸_O<ñÄă?₫Æo´iÓæßøÆØ±c“wäÈM€X¼Ç€X„#±GbÄ"ˆE8‹p áxĐüá1bDÏ=ûöí;ỵäâââĐSVVöÀœ~úé'œpBÿ₫ư/¼đÂ^x!ôPaǽzơ0aBèABZ¹råå—_>`À€O}ú”——‡®¶%ÿ—rÅW|öÙgÉ•_|±[·nßúÖ·BVKö́Ù³|ụ̀k¯½6ù¿‹+V¤S§ÖîFNZ¸©œZk™+ÁĂ?\QQ1v́Ø–-[&W&MÔ¬Y³§Ÿ~º¢¢"ôtµmáÂ…Q]}ơƠùùùÉ•.]º\|ñÅåååu₫U•lذá¶Ûn;æ˜cB̉£>ZRRrñÅ÷êƠ+¹̣µ¯}íÛß₫öÎ;W®\zºÚöꫯFQt₫ùç7hĐ ¹r̉I'uëÖmëÖ­|đAèéjĂĐ¡CGùĐCí:µp7rêÔzÀƯ¨äÔZû„ăA°|ụ̀zơêzê©•+ơë×?ùä“wíÚ•ü·!§lÙ²¥qăÆ=zôH]́̉¥KEÛ·o=]ûöí›8qbAAÁ¤I“BÏ̉_₫̣—¼¼¼aÆ¥.̃|óÍëÖ­;₫øăCOWÛÚ´iEQj#&‰Ư»w׫W¯2%ë¶iӦ͜9sæ̀™}úô©ö€œ:µp7rêÔzÀƯHrj "'NO‡T"‘ظqă‘Gyä‘G¦®wíÚ5¢íÛ·÷îƯ;ôŒµê{î©úÏ̃êƠ«£(jß¾}èé¸ă;Ö¬Ysß}÷5mÚ4ô,!­Zµª   uëÖ/¿ụ̈k¯½¶{÷îc9fđàÁ•WPrÊé§Ÿ>gΜiÓ¦5jÔè„N(..9sfQQÑ~đƒù{̉¯_¿äƒÅ‹W}6×N­5ïF”c§ÖîF’SkÂñ‹*---//õ¼yÚz³fÍ¢¼œ#ºwï¶²té̉Y³f}éK_J»Ô”#V¬X1{ö́Q£FơéÓ'y–ÏM{÷îưđĂ;wî|ươ×ÏŸ?¿r½}ûö·ß~û±ÇzÀÚVXX8wîÜ .¸à‚ .¨\5jÔäÉ“C–œZÓ8µ¦qj ÅKƠ_Ṭó}7N[ỏ¤IE{ö́ =`Håååsæ̀ùÑ~TZZzÓM7µhÑ"ôDµ­¬¬lâĉíÛ·?~|èYûđĂ£(Ú¸qăSO=5}úôeË–=÷ÜscÆŒyûí·¯¸âºư9Ùj•””ÜtÓMüq=Î>û́ÓN;-??ÿñÇÏÍϘWåÔZ§V§Ö€\qü¢7o——WZZ¶¼5@̣ÿç¦eË–ưüç?ß´iS›6mn¸á†ßªRWMŸ>½¨¨h₫üù¹ùjlª† &ÜtÓML>¾ụ̈ËẃØñè£₫ñü₫÷¿zÆZ5qâÄW^yẻ¤I?üá“+;v́8û́³úÓŸ.X° S§N¡ ̀©uœZ#§Ö \qü¢4hЬY³ªÿ÷·¤¤$¢Ê攽{÷N›6íüóÏß±cǘ1c~úéÜ<µ½ổKóçϿ袋rđ“U5nܸaÆùùù H]û́¹ç{Ưu×…%°¯~ơ«•%’ö́Ù³dÉ’¶mÛö́Ù³uëÖ¡¬m øƯï~·~ưúäc“’÷Uɵ۰}ôÑơë×ß°aC"‘H-éuëÖEQÔ¹sçĐf§ÖTN­•œZĂÁˆ#î¾ûîßüæ7§œrJ̣Û³fÍÚ¹sç~ô£Ă;,ôtµ*‘H̀›7ïˆ#¸êª«BÏ^¿~ư*o*‘´zơê%K–ôîƯû–[n =]ÇÿƯï~7eÊ”»ï¾;y••+W̃{ï½Í5;í´ÓBOW«̣óóO>ùäÅ‹ÿú׿3fL½zơ¢(Ú°aẰ™3?üđ´Wós–Sk%§ÖTN­a ǃ mÛ¶&L˜>}úgœÑ¿ÿmÛ¶-]º´Gÿ₫ïÿz´Úö₫ûï¿ơÖ[ùùù#G¬ú́đáĂGzF‚éÖ­Û¸qă~ơ«_ 2¤wï̃¥¥¥Ë—/ÏËË›6mÚ—¿üåĐÓƠ¶©S§~ÿûߟ9sæSO=Ơ½{÷]»v½̣Ê+S¦Lù—ù—ĐÓe§ÖJN­dáxpŒ=ú¨£züñÇŸzê©6mÚŒ5j́رÉÿ‹œS¢(*++[µjUƠgsó}ܤºè¢‹Z´h1gΜ_|±  `Đ AcÆŒI₫ô‹\Ó¢E‹§zêî»ï^²dÉÿüÏÿœrÊ)—\rÉqÇz´ âÔäÔJæÈK$¡g ¸±GbÄ"ˆE8‹p á@,€X„#±GbÄ̉ ôÿ6l8ưôÓk>fåÊ•‡~xèIêád±¼¼¼V­ZƠÚ—[²dIyyù)§œúû₫»_üâO<ñẠ̈åËCä ád±üüüç{®Ö¾Ü•W^YRṚæ›o†₫¾£(̃}÷Ư'x"ô@nÙäÓO?Ư¶mÛË/¿|ÿư÷—””4mÚ4ôD@Ùd„ Ï<óLè)€%œđ /ü₫÷¿óÍ7÷́ÙÓ­[·o|ă]tÑa‡VyÀÎ;ç̀™óßÿưßûÛߢ(jÓ¦Mÿ₫ưøĂ&ßCyóÍ7ß{ï½É# 5jôÚk¯M˜0aÁ‚<đÀI'”úµºwï̃´iÓ¥K—FQ”=¢Ûo¿=ÙgQµhÑâöÛooƠªƠ#<²{÷î(öíÛ7`À€+¯¼2YQ5mÚtèĐ¡QmÛ¶í‹ÏÙ¸qăÙ³g÷éÓ'Y1§È4®8Y,ù^Ă(..̃²eK§Nzôè‘öûôéóØc­Zµª_¿~—]vYÚo|ÿư÷ÿøÇ?¬9Ï8ăŒ† ₫³SÜX€j G .Û¼yṣ¿ «= ̣ÚäÛo¿ư—¿üåå—_̃¾}û[o½U\\|ÇèĐ¡Ăÿm*€Œ"ºlï̃½Qµk×nđàÁƠжmÛ(æÏŸ?uêÔ}ûöuèĐ¡wï̃ƒ>öØc·lỤ̀‹_üâŸưååå‰D"m1ín‹1§È4¨Ë:uêEQ£FjøDËG}ôË_₫̣đĂ¿ç{R_ Ñ—矵cÇÊÏM‘©2ÇuY«V­:ê¨M›6­^½:u½¼¼ü¬³Îêß¿ÿÎ;W®\Y^^₫ơ¯=ím…k×®ó%̉^Ô₫ÓŸ₫tP¦ ½sƠ@7nܸqăÆ­Y³&¹̣ÑGứg?[µjU=Z´h‘¼Å÷Úµk+s­¼¼ü¡‡7o^EÉ›/Vª¨¨(--M>N¾sqîܹ•+K—.½ë®»ÊT¡·  ^ªê¸áÇ¿ổK=öذaĂÚµkWPP°yóæ̉̉̉£>úÆoŒ¢¨S§Nƒ úóŸÿ|Úi§ơêƠ+‘H¬[·®¸¸xäÈ‘sæ̀ùÏÿüÏ?ü0y÷œæÍ›ŸsÎ9:t¸ă;† ö»ßưîƠW_4hP÷îƯß{ï½76kÖ¬uëÖŸ~úéœ ¹âÔqyyy7ƯtÓ¯ưë&$LÇÇ÷øă$¹ơÖ[̣“Ÿ´mÛöå—_~÷ƯwO>ùäÇüꫯ9rdưúơ—/_˜(V®tơÀ­G¼…­¦¡V.¸á€·ˆŒ,¿mHC}5 !¬VƠ³Â”G¼ÅñăÛ‘j„—°XùÛ€7ỉDœ8Q~wÀª̃‚pÀëÚцoÚP‹·ªđ:†÷¬5T#” T=€U=ÀçåçÏ"A„ï/̃###CơjnaÚ¿OöbccY VCƠĐc5 XÄDqèñà¡Cœtô’¿^2†çñV5̃Åp u`àiÛm¶o„Z„#^Ä~çèèn.öw<‰pÀ[8Û¯ÑÙ₫€‡x û5̉đ„#̃‹/‚Ñ·#WÉ@ Âî•®z/Âjè±z¬†™Äj5F¡~5´v4s5ùï†7 đ%Ç«&F8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤`^‹¸|¹‚'˜‡Å"Ö­«à đ°eËĈ®P§êMÆÔᘕ•ûă?º~Ú©S§Úµk7~üxƠó@ẻ2¨fM§í¨=Á$µ¤}™÷Üă´Mµ^bÙ2ñđĂâ½÷œ¶c:"?Ÿ?2u8¦¥¥Uø«Ơ:qâÄK—.©*Szzùm‡í¨ÿf333sîܹ-Z´P=2T>gíh¶jÔ8kGªQ-‡íH5*dÆpœ>}zJJJJJJ||¼‹§]½zu„ aaa“&MR=2¸…};³5öíH5zC;¶hÑ”jT(Pơ têÔI»±aĂO{ûí·8°xñâƠ#€»híxï½Æăf«FÖö¯úT£ZVkyÄ—”\»E5*aÆp”±{÷î… &%%ÅÇÇïß¿ÿ·₫ă±±±†#éúD7“œœƠ#xVCƠĐS»±±â½÷‚}´íÈ‹/æƯw_av¶Idï̃*mÚÜl»{÷Ư?OŸ~Ú´«á%²²Dtt”₫È‘#ÙûCéƯ»·êđ„£ÅÅÅ&LˆŒŒ7nÜïûª¿/uăÄo°z¬†ÚƠˆ¾îîôéu_x¡n&]Ăö.[·VÏ̀ŒúÓŸLº^Â~¿ÆW_Z¼ØCŸƯ₫Ûºư"“0ăÏ8VhÖ¬Y999¯¿₫zPPêYÀínƒçbGÿæp5\́ïĐ_ căbG¸áh´}ûö¥K—9²mÛ¶ªg·3\ ăb30\ ăbxŒáꬬ̣÷§iGÏ#233…)))±¿zà„«V­íÓ§ê ̉Ø_CízGÿf µëưáw̃q±¿#ÜŸq4ºùæ›ï¿ÿ~ư‘ .lÚ´©Q£Fqqq 4ø½¼‹³w ×Y׬).]j̃ÑĂ«¡¿†Úpơ=÷ˆµk…ÚŸw4û5꯳~ï=!„đØÏ;áhÔ©S'Û~=ưû÷oÚ´©}ûöo¼ñ†êé ̣Ùï¼chG¿¯F=ûw íH5zŒëươíÈoêđ̃ª“̉̃ïs¶_£í=kưÛ‚~Lû2í×h{ÏÚ$«á%´Ơv±_£ö„Y³Ä„ ªg5 Î8€y¹Î ̃½ÍƠI®¿ØZµ̀µ^¢Â5çÅĂLÉÉÉÉÉÉ>­uëÖ́ËÀ[ƠB8@ á)„#¤B8@ á€g›PfB8`gï^a±\÷¿€ñÀªÇ#°së­~ö™øæƠ“*\ÏbqúPB‚X¿^ơ|€2„#¿zâ WƠ¨éÙ³âç~p€ÂRGH! …pàW¿ü¢zÀ«üꦛTOx5€_-\(¬Ö säHÅÏüápÊKéèQ¯ù²ÑÑjWz……ª'0ẦËb;:}tØ0Q¥(-ơÄ‘‘N}é%%6nôÄå{ïÙcÿ„İË₫èö9 sƯÂBÊv́E8€Iißn·lqÜÆ‰%K„"0Đ½í¨‘“ă¸_zI$' !D·nîmG[|\»Ñ¦°ZmÿK]`µëpñ₫äÉbÆ 7=ăÊơ´jtñ¸áfgß¶jÔxb ûv´U£¦kW7~ö:uÊo*$5UŒY~÷…<±B<óLùmĂ¾…ëÖ©Ơ4G0)ựéÛÑPî₫1GưÇ×·£¡Ư=F^ăv4T£—üЧÌ›ç¸í«±W/Ơ³F êÊX­åߌµvlÖ̀£Ơh?†Ö„½ó§ÇÈËuëóç¯ƯµXÄ‚T£bóæ !DJʵ»‹Ø³§₫̣$ªÑĂG05C;nÙrƯCJÆÈÉï¼S[Ɇv¤½¡o½ơfÛCT£çñV5˜Ă$̣|'yɆ÷¬U=Ă{ÖªQ  †½în|¼1¦L¹îî₫ f ®›öBö(T£„#˜ájá|·2\ #œïÑăV†«a4́ö¢–áj (J`jöƠ¨ñp;ÚW£ÆĂíh¨F{ôÀc Ơسg‘í6(G8€yÙï¼ăl·²ßy'++Ûv×cíh¿ó³=zà1ö;ï,\xÆÅ₫p7ÂLÊÙ~nGgû5:ÛßÑMœí×H;*äl¿Fgû;ÂG0£W^qµ_£ÇÚqíZW»|{¬³³]í¼C;ªâb—oÚQẦhêTqç×nW¸ÎæÍîă{ĸq²cœ8á®1¢¢Ạ̈å®ÆĐ·#[óxŒm©î¼£oG₫P<†p“Ú¶MÜy§«ï¸ÚCî₫–<{¶7NưåË]}­ ³Z]íרµ#(D8€ymÛVÁ<ó-yöl¯càÀ —ç‰1`àz¿Fí÷ÊÀcGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ẦËb¹Ñ'T°0aµªĂK$'‹Í›]=ÁT«ocêp̀ÊÊưñÇí*..~ÿư÷ûôésÛm·uîÜù±ÇÛ́úßcđ5Z¸¨ ŸP)ÂÂDA¨RÅi;zf /‘œ,^zItêä´MµđB¦Ç´´4‡Ç¯^½:|øđ3fœ={¶C‡Í5Û¶mÛˆ#æÍ›§zd¨o¾Y~Ûa…èå®1¾øB\»í°ơcôïïÙ5̣¸Ë—ÅK/]»í°ơ«Q¯êqaJªP °°đĐ¡C«W¯₫ä“O>aÙ²e»wïn×®Ư¢E‹‚‚‚„™™™IIIóæÍëÑ£GË–-Up£ÆŒBˆç»v×b¹.Úộ́³âí·Ư5Æư÷‹ưK<đÀµ»Uªˆ²²̣Ï®£_?ñÿ§zƠܬF qú´hØđÚƯNĦM¢cG«.ÎS=.LÉŒgûöí;dÈgƠ(„HOOB¼øâ‹Z5 !bbbzê©̉̉R̃°à7ÆŒsç–ßu˜kn­FMb¢ø×¿ÊïÚÎ;­5 ˆÓ§ËïÚÎ;Rđf<ă8}úô+W®!>üđĂ-[¶Ø?!;;»F­[·ÖŒ‰‰Bœ8qBơøPíÏ;êy 5Z;êÏ; e{Ô<Ơ¨ÑÚQ̃Q¿T#Ô2c8vêÔI»±aÇOX°`A` qeöïß/„ˆŒŒT=>T&C;Úx¬5†v´1[5j íhC5B93†c…Zµje8²uëÖÔÔÔjƠª 0@æ#ÄÆÆho›PNN꼫¡Çjè©]₫ưE^^Hrr]Û‘¡C ÇÍËÎöè·Ư&̃}7øé§ëÛ$$½ùæá=¶m ¸ë®&¶»µj•mß~̀´«a£ä_–̃½{«₫º½áX̉̉̉>úèơ×_/--3gNxx¸̀?•‘‘¡zp/uăÄo°z¬†ÚƠHN¾îî’%!|âù1~úº»_Ü´i”i·‰¾îîÅ‹UN²]+cfÿ—Å₫Ûºư"“0ăÅ1̣¶mÛÖ·oßéÓ§‡‡‡/Z´è¾ûîS=T¾ ·ăQ8†‹ưư›ĂƠp±¿#à„£c%%%Ó§O6lØ©S§Fơå—_ÆÇÇ« *Ÿáj‡×Y{xŒ~ưÄ»ï±Ư5a;®¡̃¶í¸í.íµx«Ú²²²qăÆ­[·.!!aÚ´iª'·p¶ó³ư=0†v5Lvv‘‹ưư›ưÎ;ÙÙ¥.öw<‰3¤¥¥­[·î‘G™7oƠÀ_9«Fgû;z` ư5ÔÎöwôoÎökt¶¿#àa„£‘ƠjưđĂkƠª5qâDƠ³€'Øï¼chGϰßyÇĐ&9㨱ßyÇĐ¹¹ªG„)ñVµÑ¹sç?4dÈûG“’’TÏ•Àj‹Óưmû;ºû<Ÿ6†³ưmû;át£m5œí×hÛßqåJÿÿÍƯđN„£‘¶ATqqñ¾}û́å₫Äus-Ơ‘˜h–jÔ¸₫b4?ÿ,ªUS=%̀ÊÔᘜœœlØ»LˆÛo¿]^‹j„BüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áˆÊd±‹å†P)îºË+ÆÀϨ4¶sÖd>¡RÜu—ؾ]ưøÂ•fêỘÛöM¦?̣đĂnăñÇeLj÷èúàëGT—_vÚ†jüä7ñÄ"5µâ1âăÅæÍÊÖ _D8¢29lGOV£Æa;RÜ Â•̀ĐÑÑQ¶Û©F‹óT#¿áˆÊghG'«QchG ƠÀïF8Â-^~ÙxÄĂƠ¨yâ ăª€ßp„[¸¾œÙlcàGT>}œ5o₫‹Ăăăt|È#QÉ ×P§§ç¸̃ßÑcÄNjÇ^+$¨Lw̃q±¿£ư] ăâ:k ƒpD¥q±_£'ÛÑÅÎ;´#7‚pD¥±Z¯Ưp¸ó¾mÏtëw̃Ñ·ăƠ«ÊÖ _¨zø«U ätçmûzÜ1FÇNw̃Ñöè1B(Z&|áˆJæz¿FT£Æơ~öû;€ ñV5¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áè?̃zËƠ£Ó¦©Ï³ rơhzºêùLÉb©à 3f¨àR êTÊÊʺ÷̃{—-[Ö¶m[ûGÿùÏ.[¶́đáĂÁÁÁ]»v?~|XX˜ê‘²}K₫Ë_<:mxåñÊ+ÂjU=¨gWă“O<.î½Wa–ƠđÚÅâtÙmj/¼ zV€¦>ă˜––ǽ¡¹sçN™2åÈ‘#wÜqGÍ5W¬Xñä“O«Ù1ÛwÜÑ£œwÔªÑđL?fû?ưÔÁyG[5d5¼DƯºå·.»íàäÉbÏƠăœ0c8îܹsÚ´iü±Ă'ddd¤¦¦Ö¯_?===55uíÚµC‡Ư³gḮÙ³UÏî˜₫¡ơƠ(̀qMÿ5ÚQ_BˆK—TÏjyy¢Ṇ»†vÔßưÇ?Ä­·ªà„ñoß¾C† ùÄỘB!–-[VVV6f̀˜ˆˆíȤI“BCC¿ụ̈˲²2Ơă;æ°MXö_©­í«±F Ơƒ‰³v4Tăc©àœÆqúôéW®\B|øá‡[¶l±Â;ªT©̉­[7Û‘€€€.]º¬^½ú‡~hß¾½ê¯À1«ơº÷¬¿ụ̈ºK@̀Sö«ñé§âôiñí·åRJä剺uÅùó×îFGGé¥Àû™1;uê¤Ưذaƒư£V«ơđáĂuêÔ©£?="DóæÍ…'NœđÚp××’™«Ñ~5¨F/ahGª|‚Ăѵ¢¢¢̉̉̉Úµk‡†† !ÎÛÇs$66Öp$ƯSÀdeOädeegg{æ“;““£́s;Z}û=«¬£Ơ®†—عSÜ~ûÍå?'3sfn₫-ơüƯ0`AôX =%«Ñ»woƠ_·· ´K§kØ’ªY³¦âÂ… 2$##CƠüöû5®^åp‰ºṇ̃ûØçú«¯6u₫Ó­~¾̃£ àº»“&…Oœ®z(ơø»aÀ‚è±z_ ûoëögˆLÂŒǸV»vm‹ÅRTTd8~é̉%ñëyG¯e¸Făp30\ £q¸G<Éơv<oF8†††ÚŸY,,,BØ®³öB.®¡6a;ºØy‡vTHˆ3gæºØ£à…GêׯŸ——§•¢ös‚ơë×W=c«Ñ´íèpçû;Â3 ;ïüÏÿ\t½¿#ÀÛốÙ³´´ô»ï¾³±Z­7n ‹‹‹S=.Î5°]́×H;*äl¿FÚ|áèÀC=T¥J•w̃yç̉¯op¦¦¦æææ8đ¦›nR=®wù6´£ßs½Ë·¡á+V”ß¶ßyÇĐ¯ÅUƠ4jÔhüøñ³fÍêׯ_çÎ;¶uëÖÖ­[?ñĪGs̀¶a¡³ư+|‚?±}±Îök4Ơjx‰Ạ̊åâÁî×hÛß‘?đf„£c#FŒ¨W¯̃Ê•+׬YÓ°a䤤1cÆh;̣x§ ¿Ưêû±Ơ*._vµË·©VĂK (²³EÓ¦NŸ—§zD@ELÉÉÉÉÉÉÎíÛ·oß¾}UÏˆß‰ß ă…\T#À'˜:aj¯ÂàT$Îqq LiÆ Çǹ¦çG˜ÏŒḅd§̉8Á[Ơ0™qñbϱXxÏ{œq„ÉTXÀ ÂRGH! …p€ÂRG˜Œ̀>;́Å€#„#̀ÇuR8A8”œƠ!Ơ€süæ˜ÀoÄGH! …p€ÂRGH!ưDx¸°X\=Ábññª§ô”3*^ ×O¨7VđY"#=1Fi©°X\]D̃±£'ÆøÂÑ„‡‹¼ 4ؽ{÷Î;Ÿ|̣ɯ¿₫:44TơÈ~Ë«/IMM={ölûöí?ÿüó}ûöưßÿư_tttrṛ¹sç₫ö·¿Í™3güøñ}ôÑă?^XX˜ªz^æƠá¸yóæªU«₫ư lѢŸqăJKK5jÔ»woÛÓ}öÙêƠ«ïرCơ¼₫̀«ĂñèÑ£M›6 ·¹í¶Û„‘‘‘ú§EFFfgg«ÀŸyu8è„„„Û_C}åÊ•€€Ơóø3¯¾8&::zëÖ­ûöí»å–[´#U«VƯµk—áiÿưïO<Ù¦MƠóø3¯>ă8pà@!ÄSO=ơé§ŸfggÛößÑËËË›8qbiii·nƯTÏ àϼ:ûơë×·oßsçÎM:µwï̃4Wiié°aĂfÏŸŸß¹sçÆ¯]»¶ÿ₫;v́P½ đ¶sØZ5éÖ1œµ£í ´# B>ˆrxLÍ5£££;VYŸëÓO?ưá‡î½÷̃¯¾úê­·̃JKK{ï½÷„S¦LQ½ đVkùmC;ê«QñÙgĂ¾ơ±ø÷¿«Y(€ñ™p ½|ù²³GóóókƠªUYŸë‡~B 6,đ×oï:thÙ²åÑ£GÏŸ?¯z%à3¶£}5à¹1ôíh¨Æ¿üEíj|€Ï„c«V­NŸ>½gÏû‡8p̣äÉ–-[VÖçjذ¡B߈V«µ   J•*¾t:”3´ă„ á®Fû1´v¤¿ƒÏ„ăĂ?l±XÆ·ÿ~ưñưû÷3F1 ̣¾÷éÓ§zơêÓ§OÿÏ₫S\\|êÔ©—^z)''硇 Q½đ1úh[¾¼ü¼¸ÇªÑ~Œ¯¿.¿M5äY¬úï'̃mö́Ù .BDGGgee5nÜ888øÈ‘#eee‰‰‰úK­oÜ={†®s<))ịäÉ₫³±±±öÓÓÓU¯Ÿ999øĂTO¡^tt”₫îüùg₫ô§"åcL7|x¡ª5áaÀ‚è±zJV£wï̃ö322T/†¾ôÆëóÏ?ß®]»Y³feee !N<)„¨W¯̃رcơ;;̃¸Â™3g^¾|¹uëÖmÚ´ÉËËÛ´iÓÊ•+ï¾ûî^râ™ó/“3QQQ7₫A|ư~Û·×9RơXBlÙR÷å—ë*€¿z¬† ¢Çjèy~5́¿­;gû5ÚàÖ±͉#Gœî×è™1₫ÁgÂÑvª/77÷í·ßvøœÊÚ'<<|Í5óçÏß´iÓ¿ÿưï°°°®]»>ưôÓmÚ´Q½ đ%V«X¹̉Ơ.ßiµĂ‡Å’%bèPÅcü€Ï„c¿~ư<ù邃ƒÇ;v́XƠ_7|›'7Œ .ªy>o¼ñ†êLÍg.€Z>sÆñî»ï®đ9[·nU=&€ß̣™p,,,4±Z­¶ír4h®zFæ3áøÓO?”––:uꫯ¾z÷Ưw¯\¹̣׿₫UơŒ₫̀‡Æ1 22rĈo¿ưö… {î9+Û¸‡£ÍƯwßƯ¬Y³'Nœ8qBơ,~ËÂQ!„¨[·®êAü–?„cQQÑO?ư^£F Ơ³ø-Ÿ¹8æ?ÿùĂăùùùiiiçÏŸOHHP=#€?ó™p>|¸‹GkƠª5zôhƠ3ø3Ÿ G¿«ºI“& ˆŒŒT=#€?ó™päwU¨å3ÇÄÅŹhÇQ£FƯsÏ=ªgđg>EEE¿ụ̈‹³‡?~̣äIƠ3ø3¯~«zăÆO?ư´íî’%K>üđCû§•••Y­Ö&M¨ÀŸyu8„„„h·óóó«V­́đ™µk×4i’êyü™W‡c§N¶nƯªƯ4hĐäÉ“U`R^z=öXûöíUO`^>sq̀„ zôèá́щ'ºxó¿ÿ+,WO°XDƒncß¾ ƈáá^|ÏœqBäççóÍ7Ç3/..₫ꫯThvÿû¿B»xÉbV«ƒ'h1wæŒhĐ@ü÷¿îcß>Ѧ«1bcÅ¡CB.rsU¯¾ĂgÂñ̀™3ƒv±çÎ!CTÏhv+V”ß¶6ư)À3gÜ8Æ /¸ĂVBˆ¼<5 €̣™·ªß{s'Õqǯ¼̣Ê]wƯ%„˜:uêŒ3† 0tèĐ©S§ªÑ́DPPù]})̃8vx"°²¬^-úôqü©ơƠèî1đ?>sÆñ»ï¾«V­ZJJJHHH=:uê/„ˆ~ơƠWÿç₫'&&Fơ˜fWT$‚ƒEqñµ»‹ÈỆh5jV¯}ûÏ?/Ăj¥¸Q>sÆñôéÓM›6Ơ¶u¬W¯^XXؾ}û´‡zè¡°°°÷̃{OơŒÂî¼ctt”₫QåưyGª€ä3á(„¨R¥|Ú&Mdggk·bcc÷́Ù£z@\chGç¡U€ßđ™plĐ ÁÑ£G/_¾¬ƯŒŒÜ¹s§íQ‹Å’““£zF”+*2Q’k«W‹5Ô€đ™pLHH(..~₫ùç9"„hß¾ưñăÇ7mÚ$„ÈÍÍư₫ûï7n¬zF”³ßFÑơÆn+~ưo •cà|æâ˜¡C‡®]»vưúơV«u₫üù]ºt |öÙgo¿ưöƒƯwß}ªgÄ5ÎầÙÆnb¸FƠø Ÿ9ă₫ÑG;¶M›6BˆÆO™2¥¤¤dóæÍyyy={ö1b„ê!„]5fee;ۣǭ́¯¡v¶Gä3g…ááá#G´ƯÈô{ô$%¹qŒŒ Wcè÷è>Üó‹€ó™püå—_yæ™´´´ÄÄDÛñˆˆˆ 6 4¨Øv: ÜvÛµvtvOkǤ$‘–æ̃I´œ¡µăđá‚=ăøM|&,X°{÷î®]»¦§§Ïœ9Óv|Ù²eưû÷?zôè’%KTÏqÛm¼ù[TäöjÔ¸cơjª€ß̀gÂqûöí¯½öZpp°₫x@@ÀÔ©Sƒƒƒ×®]«zFæ3áxàÀ¨¨(‡×ÁÔ¬Y3::úرcªgđg>¡¡¡— ¿D'??¿V­Zªgđg>­Zµ:}úô={́:pàÀÉ“'[¶l©zFæ3áøđĂ[,–qăÆíß¿_|ÿ₫ưcÆŒB 0@ơŒ₫̀g6ïØ±ăă?¾páÂx@û=1_ươ–-[9RVV–˜˜xÏ=÷¨ÀŸùL8 !₫ùvíÚÍ5+++Kq̣äI!D½zơÆ«ßÙîàKá(„è̃½{÷îƯóóó³²²JJJ¢££ëׯ¯z(Sđ̃p,))BT­ZƠ₫¡°°°víÚ©À\¼÷â˜6mÚôêƠKơ¸Æ{ĂÑ¡ÄÄÄ»ï¾[ơfäcáxáÂ…üü|ƠS˜‘…#T! …p€ÂRGH!á~Í› ‹Åø?àk¼÷7Ç!Μ9§?R\\,„0´Ùµk—ê‘ax̣¤È̀tđ€Å"¬VƠÓ€ßÀ«Ï8Z­Ö¢ëY­V!D‘ªçÚèQW~ÿ½‡Æøî;ƯcÇ";wvúTww\ºÔC_/æá½g?ÿüsƠ#ø­Á²³EÓ¦ư₫{Ѿ½Âíçø´1¾ưVtî,×…‹ÈÍuëºc !ÄàÁ®ÀO~ï ǘ˜µ́Ư»wÁ‚û÷ï¿téRlĺ¨Q£îºë.Ơ«â˜­“¢¢´£­…›ß¶Ñ¥‹øö[ÑỴ»|¹rĂÑ6Æ#á¨mOàƯr~¯~«Z¡ơë×̣ˆñ=kưiĐ?văjàG.\¸0qâÄÀÀÀ´´´O?ư455ué̉¥U«V}饗ÊÊÊTOç@»vÛѾ¾‘]Y""®kG…œµ£¡½‘ "X±bEaaáSO=Ơ®];íÈ­·̃zï½÷æææîƯ»WơtÙ·ăêƠ­F7·#ƠÀ "øöÛo-Ë€ô_ươŒŒŒ¶mÛªÎ)C;öëW~Û3Ơ¨ñÚv´¡ø}¼÷â…öíÛÖ Aƒ;wîÚµ«   E‹ AAAªG«€Öú³Ơ¨¹ÖơU/‡V«ñÚnª€ßp4*))¹xñb³fÍ₫ú׿.Ơ]Xùæ›õrË-2$66Öp$==Ư3óŸ:UMˆFú#'Nœ°Z¯zæ³ÛäåÔV«¨`Ǵ¬,QX( Ư9K”₫ιsç²³/yx5lrrrT}j/Äjè±,ˆ«¡§d5z÷î­úëö„£ÑÅ‹…‡>wîܬY³ºuëöóÏ?/_¾|̃¼y£G₫üóÏeÎ;fdd(₫ûï¯{‡ZÓ¥K¤‡O:=+¢£…Â⺭Ö(éùûØo%9zt½zơê)<éåî/Ú—°z¬† ¢Çjèy~5́¿­ÛŸ!2 ~ÆÑ¨zơêÚ™3g0 víÚ 4xöÙgsrr¾øâ Ơ:e¸†zƠª̣Û†=zÜếYQ_÷&ơÂÔÿ:~ûwPt¶óư=@áhT£FêƠ«uï̃]ÿ\Ü¿êqƯO«F‹EX­íß_¬Zuíö?₫¡zV|gưVBˆ’çµjÔôé£zV÷‹‰)¿m̃Q_‹©ŸB8úưy5C;ê«ÑđL•™)5+¿«oG}5d5¨D„£ŸpØ&¬FĂv¤¸AüŒ£ÿ°ZËÏ®•”ߥ5['ef˜qøđµ»&_ *gư³2g'Î;Ú˜s5¸q„£¿±¯"3wRf¦¨Qăº#f^ náèoŒG\ïïèßú÷—/_wÄơ₫ÀÂѯ®†Ñ8Ü£Ç WĂØĐü>„£ÿpq µ ÛÑ₫jg{ôI„£ŸpX¦mG‡;ï¸ØßÈ ư‹s&lGû5̉ÜÂÑÜ|sùm×WUwî¬zV÷{åW«¡oÇÚµUÏ €O!ưAV–ˆ¢¢}{ö_­zV÷kÛV́̃íj5´v¬][ä竟ÂoñYY<ÁTû¶m[Á×›™©zD|g …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p¬Ø©S§Úµk7~üxƠƒ¨D8VÀjµNœ8ñ̉¥KªPŒp¬Àûï¿¿}ûvƠS¨G8º’™™9wîÜ-Z¨@=ÂÑ©«W¯N˜0!,,l̉¤IªgP/Pỡëí·ß>pàÀâÅ‹CBBTÏ áèØîƯ».\˜””¿ÿ₫ßúÇÆÆ¤§§«₫ÔÈÉÉQ=‚a5ôX =VĂ€Ñc5ô”¬Fï̃½UỮ‚pt ¸¸x„ ‘‘‘ăÆû}!##CơáE¢¢¢TàEX =VCƠ0`AôX =ϯ†ư·uû3D&A8:0kÖ¬œœœ¥K—©À[pqŒÑöíÛ—.]:räȶmÛªÀ‹pÆÑ(33S‘’’’’’¢?¾jƠªU«VÅÄÄ|₫ùçªgP€p4ºùæ›ï¿ÿ~ư‘ .lÚ´©Q£Fqqq 4P= €„£Q§N:uê¤?²ÿ₫M›6µoß₫7̃P=€2üŒ#¤Â[ƠkƯº5û2pÆRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! %Pơ^ª¸¸øÓO?]¾|yNNN­Zµ7o>bĈ;ª @ÂÑ«W¯>|÷îƯ¡¡¡:tøù矷mÛ¶iÓ¦¿üå/₫óŸUO áèÀ²eËvï̃Ư®]»E‹ !233“’’æÍ›×£G–-[ª@~ÆÑôôt!Ä‹/¾¨U£"&&æ©§*--Ư¼y³êéÔ ÈÎήQ£FëÖ­ơcbb„'NœP=€¼UíÀ‚ +³ÿ~!Ddd¤êéÔ hƠª•áÈÖ­[SSS«U«6`À™k8¢½ưmB999ªGđ"¬†«¡Çj° z¬†’ƠèƯ»·ê¯Û[(--ưè£^ưở̉̉9s愇‡ËüSª÷"QQQªGđ"¬†«¡Çj° z¬†çWĂ₫Ûºư"“ ]Ù¶mÛË/¿|äÈ‘† ¾öÚkñññª'P†pt¬¤¤ä7̃HKK«^½ú¨Q£{́1ÛÖæD8:PVV6nܸuëÖ%$$L›6-""BơDꤥ¥­[·î‘G™6mêY¼û8Y­Ö?ü°V­Z'NT= €ጣѹsç?4dÈûG“’’TÏ áh¤mU\\¼oß>ûG¹°˜áhtûí·³ #€=~ÆRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …ptêŸÿüçC=×±cÇÉ“'ççç«È'ơîƯ[ơ^„ƠĐc5ôX DƠĐc5Ô"›;wî”)S9rÇwÔ¬YsÅO>ùdqq±ê¹”!ÈÈÈHMM­_¿~zzzjjêÚµk‡ºgÏÙ³g« @ÂÑeË–•••3&""B;2ỉ¤ĐĐĐ/¿ü²¬¬Lơtj́ر£J•*Ưºu³ è̉¥K^^̃?ü z:5G#«Ơzøđá:uêÔ©SG¼yóæBˆ'N¨@@Ơx¢¢¢̉̉̉Úµk‡†† !Ο?/óAbccU^„ƠĐc5ôX =VĂ€Ñc5ôX …G#í̉é5j׬YSqáÂ… ?BFF†ê/ ̣ñVµQíÚµ-KQQ‘áø¥K—įçLˆp4 µ?³XXX(„°]g `6„£ơë×ÏËËÓJÑ&;;[{HơtjốÙ³´´ô»ï¾³±Z­7n ‹‹‹S=€„£=ôP•*Ũyçíç…©©©¹¹¹¼é¦›TO †ÅjµªÁ-^¼xÖ¬Y7îܹó±cǶnƯÚªU«Å‹ÛoÓ`„£S«W¯^¹rå={6lxçw3FÛ‘ÀœGHág …p€ÂRGH! …p€ÂRÇJóÏ₫󡇋‹ëرăäÉ“óóóUO¤Lqqñûï¿ß§OŸÛn»­sçÎ=öØæÍ›UåN:Ơ®]»ñăÇ«D¥½{÷>û́³Ư»w¿ă;’’’¶mÛ¦z"eJJJ.\øÀÄÅÅơèÑcôèÑ™™™ª‡R +++66öÇtø¨Ù^Z]¬† _Z]ÿƯ°á¥Ơ“ÇÊ1wîÜ)S¦9rä;î¨Y³æ+|̣ÉââbƠs)pơêƠáĂ‡Ï˜1ắÙ³:thÖ¬Ù¶mÛFŒ1õ<Ơ£)fµZ'Nœhûèæ´~ưúÁƒ¯_¿>"""..n×®]C‡]¿~½ê¹(--6lǾÙ³óóó;wîܸqăµk×öïßǪGó´´´4g™đ¥ƠÙj˜ó¥ƠÅß ^Z=ÍvđàÁ-ZtîÜù̀™3Ú‘äääæÍ›¿̣Ê+ªGSà£>j̃¼ùàÁƒ‹´#‡ºóÎ;[¶lùÓO?©N¥Å‹7õ¼yóæÏ?ÿ¼êYÔ(((hß¾}Û¶mwîÜ©ùñÇo¹å–øøø̉̉RƠÓyöoÊèÑ£ùåíÈ–-[Z¶lù§?ưIơhráÂ…;vL:Uû÷b÷îƯ†'˜ê¥µÂƠ0ƠKk…«¡ÇK«‡qƱ,[¶¬¬¬l̀˜1Ú‘I“&…††~ùå—eeeª§ó´ôôt!Ä‹/¾¤‰‰‰yê©§JKKư₫]233çÎÛ¢E Ơƒ¨´bŧzª]»vÚ‘[o½ỡ{ïÍÍÍƯ»w¯êé<í‡~B 6,00P;̉¡C‡–-[=zôüùóª§ó„¾}û2ä“O>qöS½´V¸¦zi­p5lxiơ<±́ر£J•*Ưºu³ è̉¥K^^ö½ÁT²³³kԨѺukưÁ˜˜!ĉ'TO§ÆƠ«W'L˜6ỉ$Ơ³¨ôí·ßZ,–è¾₫úëmÛ¶U=§5lØP¡oD«ƠZPPP¥J[Jú·éÓ§§¤¤¤¤¤ÄÇÇ;|‚©^Z+\ S½´V¸^Z•0ÅË“[Y­ÖÇשS§N:úăÍ›7Bœ8q¢}ûöªgô¨ ØÛÛ¿¿"22Rơtj¼ưöÛX¼xqHHˆêYTÚ·o_XXXƒ vîܹk×®‚‚‚-Z$$$ØÎ ˜JŸ>}–,Y2}úôàààÛn»-???%%%''çá‡6Éß“N:i76lØ`ÿ¨Ù^Z]¯†0ÙKk…«¡á¥U ÂñF•––Ö®]Ûp<44T\:Á$Zµje8²uëÖÔÔÔjƠªN5™ÄîƯ».\˜””¯½Ê›SIIÉÅ‹›5kö׿₫ué̉¥¶ă‘‘‘o¾ùæ-·Ü¢z@O‹MKK>|øđáĂm“’’&O¬z4¯ÀK«/­¼´ªÂ[Ơ7J»¾¯F†ă5kÖB\¸pAơ€*•––.Y²äñÇ/**9sfxx¸ê‰<­¸¸x„ ‘‘‘ăÆS=‹b/^B>|xÍ5³fÍÚ¶mÛÆGụäÉÑ£Gû÷u²Μ9ọ́åË­[·4hP¯^½‚‚‚V®\iÎk̀íñ̉ê/­¼´*ÄÇU»vm‹ÅRTTd8®m  ưDZ9mÛ¶íå—_>räHÆ _{í5×?ªâ¯fÍ•““³téRs¾«W½zuíÆ̀™3{ôè¡Ư~öÙgO:µbÅ/¾øâÁT=£GM˜0áû￟4ỉ£>ª9uêÔ Aƒ{î¹U«VEGG«P1^Zá¥Uđ̉ªgoT```hh¨ư₫ !lJIIÉôéÓ‡ vêÔ©Q£F}ùå—æ|iÛ¾}û̉¥KGiÂ+?́Ơ¨Q£zơêAAAƯ»w×OHHB®Ÿ³wï̃ªU«ªüáÀ‡Y,–úơë{́ÓmÚ´©´´´k×®ª¿îk^yå•Ơ«WïØ±Cơ ̀‚pàĂ‚‚‚6nÜè±O÷üóÏ₫ôÓOª¿n!„8sæ̀êƠ«UOÀ\Gđ%W®\9v́ØÎ;ß{ï½ÂÂÂƠ0Â|Éøñă×®]«z &E80…Í›7úé§?ưôÓ… Z¶lyçw9̣¦›n²=!77wÉ’%_ươÿû_!DÆ ;wîüè£j?Cùúë¯/Z´H{flllppđ®]»Æ¿jƠª÷ß¿C‡úÏƠªU«­[· !´çlذá́Ù³¯¾újffæ5k₫đ‡?HNeoÀ€·Ưv›¢¸¸ø­·̃R½®̀…pàÿfÏưüĂjµ6lØ0""bçÎÛ¶mûî»ïRRRêÖ­+„ÈÍÍ2dÈÑ£Gƒ‚‚6mZVVvôèÑ÷̃{oƯºu+V¬ kß¾ưƠ«W?ùä“’’’¡C‡ºn;{7n\qq±¢¬¬Lr*‡zôè¡Ư((( xáÀ‡ÛBJ/44ô³Ï>ÓnoذaáÂ…M4™3gέ·̃*„ÈÍÍØ£G=z¬ZµêêƠ«“'O₫­sN:µM›6O?ưtóæÍĂĂĂ%§oĂà|˜Ơj=éÈéÓ§mÏ™5k–âÍ7ßÔúL₫æ›oÖ¯_ụ̀åBˆ«W¯vï̃ưùçŸ×ªQ̉·o_!ıcÇn|Î5j,\¸0>>^«FÉ©ÀÛpÆ€Ó~ÖĐẠ̊óó³³³£££[·nmøăăă?û́³}ûöuêÔéÏ₫³á¾á̀Ĩ|¾1¾:Ăùàp:(OƠ 0B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)Áª° ¸¸8Ơ#€J”••¥z5ÇJaÛŸÜÅÅű.¬†«¡Çj° z¬†Ÿ¬†ŸŒá{¼U )„#¤B8@ á)„#*×ÚµkUàGX =VCƠ0`AôX =VC-ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRl999qqqß~û­ùi§OŸNHH7nœêyT²u8¦§§—{Óéœ0aÂÅ‹U  X°ê(**:|øđgŸ}¶|ụ̀rO^´hÑöíÛU  ñgÏ?üđƒ̀™ÙÙÙ³fÍjÖ¬Ù¡C‡TO  ˜Ă155ở¥KBˆ%K–lÙ²ÅÛiW¯^?~|xxxrṛ!CTO  ˜ñ]»vÚƒ7œ6{ö́ƒ.\¸°víÚªGPÏá(cï̃½óçÏ8p`›6m233í?g8²víZƠ_“yyyªGđ#¬†«¡Çj° z¬†’ƠèÑ£‡ê¯Û_”””Œ?¾aÆcÇưmBVV–ê/ÂDGG«Á°z¬†«aÀ‚è±z¾_ ÷¿ÖƯ¯ÙáèÁôéÓọ̣́–-[¢zaë}=Ú¾}û²eˆ~×]w©ÀpÅÑ(;;[‘–––––¦?‘‘‘‘‘ûù矫@ÂÑè¶Ûn{衇ôG.\¸°yóæúơëÇÇÇ×­[Wơ€jFíÚµsí×£Éܼ̀̀ys«V­^{í5ƠÓ(ĂÏ8@ á)¶~«:%%%%%¥ÜÓZ¶lɾŒ\q€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGXÓÙ³ª',ÁéT=BˆcÇTO@A8Z†Ă!:ÁbcDE™µ£oÆüŸĂ!Ú¶ơú́àÁ¢JQZê‹16ôú́äÉ":ZlÚ¤d…\‡p´Wy‹¡rO°ä̃ÚÑ7c₫OûزÅs;,/BˆààÊmGmŒ¼<Ïí8y²HIBˆNhG@=ÂÑ ¦O¿öØ=†ôG̃{¯ÇøđCÙ1¦N­Ä1₫ưïkƯÛQ?ÆĐ¡•8@ÜÛÑU  _Œá̃®jÔt́¨n!Gk?̃k;ªqذJcÀ¯íh¨Æ—^ªÄ1Ú·÷Ú†j\° ÇüŸ₫çơíh¨ÆÊ₫1GưŸ¯oGC5úÉO[6G8Z„Çvôe5j<¶£/«Q㱩FÀ{;ú¸Ư?‹Öo¼N5~ˆp´“뾩F¡cb¢]}S÷vt¡=C;ú¾Ư?W^xûí0%c0G8Z¡5¾¬F¡5¾¬F¡5T#àÎc™ù>×üd &G«?̃xÄÇƠ¨0ÀxÄÇƠ¨iß̃xäƠWŒø¿Aƒ®û°M5cLtƯ‡¿ûªơàáh5æ·33†ù₫€=~®Qxߣ§Rî†̃÷è  áh)úNzôQÏÇ}ù¤œư}0ÆÔ©"-íŒù₫>cèPñùçǻïØ“û=Ỗöè©Tî;ïäääº>¤ÿA8Z„Ç{¨Mî³öÁ®»aLöwôÁ®»aLöẃÉÛÎ;>nGoû5zÛ߀B„£˜́¼ăËv4ٯїíh²_£É=€Ư¼ü²ÙÎ;>kÇuë̀vù¦C8ZëµƠăÎ;úv¬Ô-\¸Çwôíè›1<î¼£oG¶ù€M™"î»ï—ÇåîƒóÍ7•5ƈ±ceÇ8ỷ׫À€p´§Ól¿F­}ĐIN§Ù~Z;úf “ưµv¤mÛÄ}÷™}/hOUö7Ë̀™b́XơcA8Z‡ù~îû;VóưƯ÷w¬$æ»|»ïïØÓ¶måœà›\›9Ó/ÆP.ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p´?ÿÙ́Ù₫ư}4Fï̃fÏç£1î¹ḈÙ·̃gÏúhÀŸ97z‚•<ø 8qẤ[­à‘­Ă1'''..îÛo¿uª¤¤dÑ¢E?üđƯwßƯ¾}ûaÆ}óÍ7ªç5ăpˆ´4¯íØ¿¿øè#_¼ä9"#Ăk;'fÎôÑ{öxmÇ·̃Ï='¢¢hGØöÍḥ-Yî ṾàƒbÍqÛm^ÛÑV«xcëpLOO÷xüêƠ«C† yơƠWÏ=Ûºuë&MlÛ¶mèĐ¡ï¼óê‘=s½ylG­ gVêÛQ«F_á±µjÔDEU‟{óÍk=~Kê¥zÜJ–-Ö¬ùå±ÇvÔ¯†ù€µÙ1‹vîÜ9uêÔ?üĐă üñ̃½{6mÚ4gΜ÷ßåÊ•aaaï¼óÎÁƒUïÓyí±¡ơƠh8³RÇ0´£¾}9†¡ơƠXÙc~nôh1kÖµ í¨ÿđÙgǺ٪ǭd±±bûökÚQ¿ññb÷nƠăêØ1{ö́™””´|ùro'¬]»Vñâ‹/†„„hGbccŸyæ™̉̉R¿}ĂÚc;ú²Ư?…«ÿ₫ô±‚™ïlj,íÎCYbçNŸájGª0đÖv«Fͽ÷znGªĐ V=€©©©—.]B,Y²dË–-î'äææÖ¬Y³eË–úƒ±±±Bˆ“'Oªß+§óº÷¬×¯G\÷¬ïÇÈÈß~û»cÇ«]wF3!„çÏ‹ĐPߌ±ghØPäå)X ÀÏ-„Ï?ÿˇ†ëö©FÖ÷Ư÷ˇ·ƯvƯ³T# ́íÚµÓlܸÑă sçÎ 6®Lff¦¢aƪÇ7£¯%%Ơè>†±]ÂÂ|ÙT#à¡]́VC;ºP€ÆáX®-ZlƯºũ¼y7ƯtSŸ>}d₫„¸¸8ĂííoÈÉ11Ñ×ÉÍÍơÍ'7á¦wÁ„…ß»·¬vm˯†K>`mƠĐS»½{‹‚‚Ú))·º T4fL=¿Y""ĪU7ơéSßu¤iÓË+Vœ²çjø!%«Ñ£GƠ_·¿ ËQZZºté̉3f”––¾₫úë2ÿTVV–ªƯ÷kœ93Ú÷·ƒ'Ê©F!„·Ư}·ÈÉÑÑäoñÖ[Æ#}ûF«½l]i_l b5ôÔ®FJÊu.^\ûƒ*ñ?êü|Abb®ûđđájAAÑÙt5üïWĂư¯u÷+D6aÇ›cämÛ¶­gÏ©©© ,xđÁUOTĂƯ0“ư+‰áêrTÚGĂƯ0“ưÛ*w;[ñø…›́ïØ áèÙåË—SSS|úôéQ£F­Y³¦M›6ª‡*‡É=Ô¾lÇ_W•ÆäjÚĐ3ÜCm²Gî¡6Ù£°'̃ªö ¬¬ĺرëׯïÖ­ÛÔ©S###UOT>Ơh¸ÏZQÙïYûs5î³¾ç~Ôđºó₫>kûÜOæqçĂ}ÖÇ µïYjqÅуôôôơë×?₫øăï¼óNàV£ûăʾîèÏƠè₫˜ë€·j4ßܪ¼í×èmGÀG#§Ó¹dÉ’›o¾y„ ªg‘e¾Ë·¡+Ï{ï™áƠ¿ÿ]±cèï_7_={*q5€â¾ó¡mÅ}çC;V¯®zD@̃ª6úñÇOœ8’””ä₫lbbâÀUÏhäzÖ[®•{B…(,ááâüùÿ}–V­¤~CL—.;ÆêƠâÁÅ5WđÚ÷‚·ư]û;Úä;E[ oû5ºöw®FÍSOPüf„£Ơ˜ßG̀lÁÀoF8Z¾n¿ƯóqÑ´éă÷¿W¶Xáh†»aöï/gGŒñØcbíÚ<óư}0F›6âȯ÷ÊI„£Ex¼‡Úä>kŒáºÆdGŒáºÆä>k ƒp´“w|Ù&û5ú²Mṽ¡¸„£8¿<đ¸ó¾]gVêw̃Ñ·£oÆđ¸ó¾¯^­Ä1°`Ơ b8bÜ8¯;ïh{ô¸ïÔScôïïuçm÷z*cŒ¶m½î¼£íÑ3t¨ ªôI°ÂÑ:̀÷kôA5j̀÷kôA5j̀÷ktßß”‹·ª …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG°¯èèrNp8TèCsæ”sBơêªGT³u8æääÄÅÅ}ûí·Ÿưä“Oúơëß¶mÛ‰'ª*Rt´8v̀, µ§l̉s我#;ØêƠÅ¥KvY À[‡czzº·§fÍ5ỉ¤£G̃{ï½µjƠZ±bÅÓO?]RR¢zd¨“'‹cÇ~ý1†ôx@ơ¸•,;[Œi¶Z5jjÖT=. ñ¨¨hçÎS§NưđĂ=••5õ¼¨¨¨µk×Λ7oƯºuƒ Ú·oß̀™3UÏă•WĈ×>4Ô’₫Ă?₫Q¬[§zÜJ+–,ñºúj¬QCüü³êqú={öLJJZ¾|¹·>₫øă²²²Ñ£GGFFjG’““CCC׬YSVV¦z|¨iiÛÑnƠ¨IJ̣ÜT# ¬zRSS/]º$„X²dÉ–-[ÜOرcG•*U:uêä:Ô¡C‡Ï>ûl÷îƯ­ZµRư@ÅHKBwSˆáJ›}ªQ“”$„^[›n¢ëØ1Ûµk§=ظq£û³N§óÈ‘#·ÜrË-·Ü¢?̃´iS!ÄÉ“' GVbhG»U£ÆĐT#``Çp4W\\\ZZf8*„8wîœ̀g8²víZƠ_™yyyªGđ#¬†«¡§v5ÆEE·.]ZÛu¤}û’wßư!7× ̉¦˜5«ÖóÏ×q q8p̀«á‡”¬F=TƯ₫‚p4̉n®év×\­Zµ„.\ùC²²²T~$ºÜấ„ƠĐc5ôÔ®Æ̉¥×}øơ×!Êÿ¿£p€ääë>,)qØy5üïWĂư¯u÷+D6aÇ›c̀………9ââbĂñ‹/ÿ]w+)w;[Ñß ăbÛƠ G£àààĐĐP÷+‹EEEB×}Ö` †{¨Möè±Ă=Ô&{ôöÄ[ƠDEE9r¤¨¨¨vík?ñ“››«=¥z:¨0̃ṽÑßgítª̉W¼í¼£¿ÏÚ>«xÄGºvíZZZúơ×_»8ÎM›6…‡‡ÇÇÇ«*†·jô¶¿£µy«Foû;öD8zĐ¯_¿*Uª¼ưöÛÚÏ5 !æÍ›—ŸŸß·oߪU«ª*˜ûÎ;†v´“w í¸`êYux«Úƒúơë7núôé½zơjß¾ưñăÇ·nƯÚ²e˧zJơhPaœNápxƯ¯Ñµ¿£M̃œƠVĂÛ~®ưß{O ¦zV@Âѳ¡C‡Ö©SgƠªU«W¯®W¯̃ÀG­íÈ–a…ii¿ä£M˜¯FR’¸ÿ~ñûß«PÊÖᘒ’’’’âíÙ={ö́ÙSơŒA5üŒ#~üQơ€z„#nöïÇuÿ‹Œ÷Ư§z,@1Â7w̃éáàḅdƠ“*\Ïd·Æ”ÚvF8đ?O=U₫ß))́Û" …p€ÂRGH!øŸóçUOø5€ÿ S=à×G₫g₫|át–sÓY₫9€E\Ϥ IFØá€›}û<üË_T(¬züÏwpqpÇGH! …p€ÂRG€b‡5Êë³»v ‡Cơˆ¾]„„rN((P=%́p¨¤EáÛo{nÇ]»D«V×N³<íËܽÛk;j'DDĐPƒpø÷vtU£æØ1Ơ#úÇvÔ×óúơªG„-•ô»%êÛÑP¹¹¢qcƠ³úv5 í¨¯Æ?¨¶D8soÇn²a5º¯†«©Fø  ¡{ơªïúĐVƠè¾»w‹˜˜hׇT#Ô"~Áăoø³a5j<®ƠåG€¿Ø¹óº ²i5j íM5B=Âà wĂ!/6ÛßṆ̃ ;åæ–³¿#à„#@=÷jÔxÛßṆ̃<î[i²¿#à„#@1÷wrrr]Ú° ÷PëWƒv„Z„#@%oû5zÛßṆ̃<î¼c²¿#àK„#@ó]¾mØ&û5̉đ„#@}ưxÜyG_K³g«·̣ưñ¿<đ¸ó~5víR=+l‰p¨¤ÅÉ~Ú ÷5´uëÄÿh¶_£­V~(Xơå;ỵäúơë<Ú±cÇ:¸Ÿ“ZVV6ỵdƠĂ~µr3ÈV´n]9'Øj5àoü=?ÿüóÉ“'k.Y²¤sçÎo¾ùfơêƠơ§-]º´´´”p¨<~ưVơñăÇ“““‹‹‹;uê4ỵä¿üå/‘‘‘7n|₫ùçU`;~}Å1--íÊ•+#FŒ=z´väñÇ4hІ >û́³={ªÀFüúcfffHHÈŸÿügבđđđ7̃x#88xæ̀™—.]R= €øu8tèêI¬Ï¯Ă1!!aôèч###cĈ ,Đ?;{ö́Ö­[oذ¡wï̃¥¥¥ª‡°8¿G!Ĉ#₫ñ 6́øC:uôOƠ¨Qc₫üù/½ôRll¬CÿkáP üzGMÓ¦MÇïñ©ªU«0`À€ÿưïọ̣́TO `e₫~ÅQRơêƠ›4i¢z +³H8 ²B8@ á)„#¤Àv<çÏŸ?pàÀ÷ß_¿~ư¶mÛæççGDD¨ Àú) æ̀™óé§Ÿ–””!ܶmÛÄÄÄ–-[¾úê«áá᪰²€y«úÊ•+#GLOO¯]»vbb¢ëxddäÆû÷ï¯Ơ$°’C‡̀6Mơ|60á8wîܽ{÷v́ØqíÚµÓtÿ|üñǽ{÷>v́ØâÅ‹+đÓ]¾|y₫üù<̣H|||—.]{î¹́́lƠk€½8¢ys¯í8møë_¿uØ—&·oßô÷¿ÿ½FúăAAAS¦L©Q£Æºuë*ês•––=ỵä¼¼¼~ưúƠ®][ơJ`#†v\° Ôơ˜jô=‡3pV}æ̀™óçÏBÄÄÄäää4hĐ FG-++KLLœV¡wäïÛ·oÈ!ú7Ç8qâÄ   rÿÙ¸¸8÷ƒk×®U½~jäååưîw¿S=…¿`5ôX =VĂ€Ñc5„ÙÙƠx ₫HNN®Ï>{=Üfee©^é×^x!!!aúôé999BˆS§N !êÔ©3f̀ưÎ7®¨¨hÚ´i?ÿüsË–-ï¸ă‚‚‚Í›7¯Zµê₫ûïï̃½»̀Ÿ`Ï™¼‰V=‚a5ôX =VĂ€Ñc5>úÈxä̉¥èfÍ|ôÙƯÿZ÷x‘È)…;wîܹsaaaNNÎåË—cbb¢¢¢*ü³Œ?~×®]ÉÉÉO<ñ„väôéÓưû÷₫ùç322bbbT/6b¸FÓ¼¹8xPø¬¡ ˜Ÿq̀ËË;qâ„ö8<<øàƒƯ»wÏÏϯ́OTPP „hܸ±á¸v¡ñÇT½Ø…ûÎ;±±—MöwDe ˜pŒB>|¸²?QăÆƒ‚‚²³³ · i?ßФIƠ+€-xÛ¯ÑÛ₫đ€ ÇÉ“'‡„„̀™3ç¿ÿưo¥~¢:?~ü­·̃*++Ófgg§¥¥U«V­sçΪW[0ٯѽássLddä믿>eÊ”^½zơêƠ«Q£Fî[*vêÔ©B>WJJÊ£>––¶zơê-ŹÚµ«¬¬l̉¤I¿ÿưïU¯¶àt₫̣K¨=ăí·{=•!`ÂÑu©/??ö́ÙÏ©¨Mp"""V¯^ưî»ïñ¼ù_ÿúWxxxÇGŒqÇw¨^lļµvlÙRơ”v0áØ«W/_~º5jŒ3f̀˜1ª¿nàƠèc¯½öêl-`n€ZsÅñ₫ûï/÷œ­[·ªÀ²&‹ GœN§k»œºuëFDD¨ÀÊ&¿ûî;Ă‘̉̉̉Ó§Oùå—sæ̀¹té̉K/½¤zF+ àŸq jذáĐ¡CgÏ}áÂ…çŸ̃É>N•&€ĂÑå₫ûïỏ¤ÉÉ“'O<©z˲B8 !"##…·̃z«êA,Ë áX\\üƯwßEDDÔ¬YSơ,–07Çüç?ÿñx¼°°0==ưܹsƯºuS=#€•L82ÄäÙ›o¾ù¹çS=#€•L8ü®êFơéÓ§aƪg°²€ G~W5€ZssL||¼I;5êP=#€•L8_¹rÅÛS'Nœ8uê”ê¬̀¯ßª̃´iÓˆ#\.^¼xÉ’%î§•••9ÎF©ÀÊü:ƒ‚‚j×®­=.,,¬V­Z5<–œœ¬z^+óëpl×®ƯÖ­[µÇqqqưû÷Ÿ8q¢ê¡lʯĂQoذa­ZµR=€}̀Í1ăÇï̉¥‹·g'L˜`̣,`s‡Ù³C‡–s_r8Äă—s JÀ\qB~ơƠWÇ7/))ụ̀Ë/ƒ‚‚Tø#íï‡C8:T¼ÿ¾Ù |Iû†]¶L!>üĐë |ĂB•€ Ç3gÎ 0ÀdϤ¤$Ơ3~gÚ´kƯÿ¦qU#ă±ơ×_zI¼ô’ê)a?ï¿ÿ₫©S§î½÷̃={~ñÅÛ¶m›2eJHHÈ¡C‡–,Y’””ôâ‹/ªđ;Úfưë/êÛÑP\½üÓy­ í¨¯Æ©S©F¨0áøơ×_ßtÓMiiiµk×î̉¥K»ví¢££Û´i#„ˆ‰‰yå•W₫ßÿû±±±ªÇüÇv¤¿å̃©©T#üEÀÜóư÷ß7nÜXÛÖ±N:áááĐêׯ_xxøû¼åx‘œ,^}ơÚ‡Ơø5ưwå²e"&&Úơ!Ơµ&…Uª\›¶Q£F¹¹¹Úă   ¸¸¸}ûö©đ_†vt¡ÿäñ{“j„ruëÖ=v́ØÏ?ÿ¬}ذaĂ;wºu8yyyªgüZr²HH¸îƠø3Ăwèí·SP/`±[·n%%%/¼đÂÑ£G…­Zµ:qâÄæÍ›…ùùù»víjĐ ê¿6t¨Øµëº#́ø3Ăwèǻïø@ÀÜ3hĐ uëÖmذÁét¾ûî»:t~öÙgï¹çC‡?øàƒªgü—·wØ đOÿ»ÎdGÀ7æcDDÄ̉¥KÇŒsÇw!4h0ỉ¤Ë—/óÍ7]»v:t¨ê?å~µá^~ÅpuNN®ëĂe˸î•æ£"""bøđá® Đ³gÏưû÷GEEÅÄĨđSw̃1Ù߀Zî;ïäæíïøR …£æüùóø₫ûïëׯ߶mÛØØØˆˆƠC~Êd¿FÚđC&û5̉đóVµ¢   %%¥S§NÆ ›4ỉ¦M›„‰‰‰Ï<óLaa¡êé´páµÇî]èmÊyÜyGÿ]L5B‰€ Ç+W®Œ92==½víÚ‰‰‰®ă‘‘‘7ńß¿II‰ê¤ưMăíj¢«¹Üøí;Ñd¿Fóïh ²L8Î;wï̃½;v\»ví´iÓ\Ç?₫øẵ½{;vlñâŪgü”ùß1ÉÉü%ø§³œưù†…BÛ·o úûßÿ^£F ưñ   )S¦Ô¨QcƯºuªg°²€ ǃFGG{¼¦V­Z111ÇW=#€•L8†††º~ß »Â›o¾YơŒV0áØ¢E‹ï¿ÿ~ß¾}îOöØc‡ćر™™™úă™™™£GBôéÓGơŒV0€·mÛöÉ'Ÿœ?₫#<¢ư˜₫óŸ[¶l9zôhYYYbbâ< zF+ ˜pB¼đ ӧOÏÉÉBœ:uJQ§N1cÆèwv@e¤pBtîܹsçÎ………999—/_‰‰‰R=€-øo8^¾|YQ­Z5÷§ÂĂĂT`/₫{s̀wÜѽ{wƠSà₫%&&̃ÿưª§°£ Ç .ªÀ,  á)„#¤B8@ á)₫û›c„gΜ‰×)))Bº́Ù³GơÈ–å×WNgñơœN§¢Ø ƠóF3f¨ÀŸ$%©°„±cUOà[N§Ù³+WªÏfü÷ă矮zà†8¿<?̃́ó×DËçÏ‹‹Å?₫Ájf̀¿Æo¼!̃xĂ.ß,Új”•]{EƠ[¹R<̣ˆ¼tøÿ†cll¬Úöïß?wîǛ̀̀‹/ÆÅÅ5êøƒêUAÀp½ÆM˜ „§vtàpXÿ%O«F!DF†èƯÛC;Új5æß Z5œ`1®Ơ¨RÅC;ºªÑ&«á'üú­j…6lØ0`À€ 6DFFÆÇÇïÙ³gĐ A6lP=†₫%lÂă{Öú—¿éÓUÏZùô¿(TkGo«Ñ«—êY¥ÆŒ¹öØĐIújö¸Æöÿwíq•*×}ÉújB”•©Ơ6G.\¸0a„àààôôô>úh̃¼yË–-«V­ÚäÉ“Ëøw̉¼µ£¡½½‘m1úƠĐ·£¡½½‘ ØÄë¯{nGV£"1Ñs;ºW£Ç7²QGV¬XQTTồ3Ï$$$hGî¼óÎ?ưéOùùùû÷ïW=‰¡çÎ µg5º¯FF†xúé(ªpç̃©©·Ø°5îí¸n] ªQ!‡ÓVÿÊ2dÈÖ­[ÿơ¯Ơ­[÷7üăqqqYYYª¿‘››­z Å<¾¨Ù­]<®ƠÈw b¸ÄèbÏ¿´ —]V£mÿ®÷ß›c:pà@xxxƯºuwîܹgÏóçÏ7kÖ¬[·n!!!ªGC@r:/m¶­F«A5î^]alG{V£øßuGC;r­Q ÂÑẹ̀åË?ưôS“&M^zé¥eË–¹7lØđÍ7ß¼ưöÛe₫¸¸8Ă‘µkת₫ÊÔÈËËS=‚Ÿ¸îÚɹsçrs/¨I¡ëV£¸¸87÷Œê‘ă;Å€B\¸p‹¡ú#¹¹¹ª‡Ræ̀™BDéäææú,{ôè¡züoU´iÓF:qâÄN:ư÷¿ÿưôÓOßyçúơë₫ùçå^w´íåkx¿IđVơơx«Ú#¾S X̃ªÖă­jÿÁÍ1FƠ«W×L›6­OŸ>aaauëÖ}öÙgọ̣́¾øâ Ơ"Àè_Ô&L8§{lÇß+£_nƯ®ư¶'÷=z;3Tă°a×̃ °á›³†jLK»ö…aøáhT³fÍêƠ«‡„„tîÜY¼[·nBˆC‡©Äpơđá̀÷w´6Ă=Ôóæñ¶G`gî;ï¼øâ9“ư­Í}ç=MöwDe#=ˆŒŒ¬ZµªăúoMíê«W¯ªĂÛÎ;ölGo;ïĐ€·ư½íïhm̃ökô¶¿#|€pô sçÎEEE‡Öܽ{·¢Y³fª§C`0߯ÑĐ–~í±û3Ú°3“ưmØ&û5º·#|ƒ•ö 11Q1ỉ¤sç~ù‰´ưû÷/X° 44´{÷C`p½â{» Æu‚₫C¹°P„… áư&[­`Âü{Aßvøfq}o‚Ñ·£VĂO°Í›73f̀o¼Ñ£GV­ZïØ±Ăáp¤¦¦̃zë­ª§CÀp:ÅŒf·NÛê•®°P$%‰¥KY  æß Ú₫Úÿµ§ÓĂæ¯.Z;&&ª̉NGφ±xñâ-[¶„‡‡wíÚuÔ¨Q±±±ªçB€±ç†;̃˜T#yö©Fù›̣T£^ơíÛ·oß¾ª§đüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8³g{÷O>©zD2_3Ê9M°ê€§eĂ!œNÏöî-22~yü̃{ªgU½3fˆ ̀NÀ…+°ØØkƯ/¤é«qÁƠ³V¾!C̀VĂUÈ a5ÙÙ¢I“kêkI_BØâÛ¢Ebđ`Ï«a¨F;¬à° íhĂjÔxlGªđđ3°¦́l+ùåCĂ»´vë¤E‹„âƒX À á#,ËpƯÑÅd¸îèbÏƠü6„#¬,;[Ô¬yƯ;w̉¢E"!áº#v^ Ào@8ÂÊz÷?ÿ|Ư;oX8c†Øµëº#v^ Ào@8² wĂ¸Ø³–¼í¼cÏƠü6„#¬Éưjo{ôØû=ỖöèÀá ̣¸óÉ₫Öæqç“ưđ†p„Ơ˜́×hĂv4Ù¯‘vüZ„#¬æå—¯=v¿kXßaaªg­|ăÇ›­†·=zđˆp„ƠÜu—Ø»Wï{Íhí& UÏêÚ:x[ W;²5 \„#,è®»ÊÉ ́l»T£Æ|5-¢RGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€Â¨Dª' â@eq8Dï̃fíèp‡Cơ”H#Ëwúôé„„„qăÆ©ÄU„̃ÚÑuí„c9œNç„ .^¼¨z˜Ë—¯=voG},>ñ„êYC8–cÑ¢EÛ·oW=OƠª^ÛÑP ª9„£™́́́Y³f5kÖLơ HîíøÏÖ ‹pôêêƠ«ăÇONNV= •¡Ÿ~:Êơ˜jœ`Ơø¯Ù³g}hG~ÂÑ ‚ÿ÷ €<¶£V;´£ëkôØZ5júôQ=+…p´ư/Ï3´£¾…=~Í₫k4´£¾m²T ÂÑ"<¶£ «Ñư+uµ#ƠÀ ¾ñ?~Âé¼ö.mF†¸ơVqîÜuÏÚ~5̣óE¢¤Ä¾«@…ࣥè{ÈÎƠè₫USÜ8ÂÑjÜ«ÈÎÄjPG«q߯Ñ|Gk7ÎxÄ|G`‚p´ĂƯ0“ư­Íp7ŒÆdG`p´“{¨mØ&÷PÓü6„£Ex¬FÛ¶£Çj¤¸A„£˜\k´a;\k¤¸„£|÷ƯµÇæ÷ÿđƒêY+_h΅jäç«€€B8ZAa¡ Âû^3ÚñûîÛ¶©µ̣M$^y¥üƠlÍÀ¯D8ZDaa9ätÚ¢5“&•¿T#¿á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áˆäp‡ă†N~+Xơ~ª¤¤ä£>úôÓOọ̣́n¾ùæ¦M›:´mÛ¶ªç̣k®"t8„Óù[N₫Œ+\½zuÈ!¯¾úêÙ³g[·nƯ¤I“mÛ¶ :ôw̃Q=_›;÷Úc÷Ëú#cƨüz\qôàă?̃»woBB‚ BBB„ÙÙÙ|çwºté̉¼ysƠú©§ŸBˆáĂùPYÑP¯¿®zVđëqÅуµk× !^|ñE­…±±±Ï<óLiié7ß|£z:¿öôÓ®;RXáèAnnnÍ5[¶l©?+„8ỵ¤êéü¡cb¢]©FoU{0wîÜà`ăÊdff !6l¨zº`xÏZC5èGZ´ha8²uëÖyóæƯtÓM}úô‘ùâââ G´·¿í£{w!D´₫È³ÏæææªKµ¼¼<Ơ#øVCƠ0`AôX =%«Ñ£GƠ_·¿ ËQZZºté̉3f”––¾₫úë2ÿTVV–êÁs¿«:&&-x„ÑÑÑ7₫‡X«¡Çj° z¬†ïWĂư¯u÷+D6ÁÏ8Ù¶m[Ï=SSS#"",Xđàƒª(0諱mÛÇ@À!=»|ùrjjêàÁƒOŸ>=jÔ¨5kÖ´iÓFơPÁpuzúæû;€@Á[Ơ”••;vưúơƯºu›:ujdd¤ê‰†ûÎ;¹¹fû;€B8z¾~ưúÇ|êÔ©ªg $&û5̉XoU9Î%K–Ü|óÍ&LP=K€qµ Çwôû;R"®8ưøă'Nœ IJJr611qàÀªgô_N§;Öë~ÚuGíÿ€€C8iD•””8pÀưYn‘)—ù.ßT#‹p4ºç{Ø…À?ă)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤Ö1a‚Ù³Ă†©Ï·Ú·7{vÁƠó€G‹p8ÄŒ^ÛqØ0±p¡p8TOéĂƠؼÙk;.X |̉F«@E!­ÀƠ@ÛQ«FĂ™æú=¶£VöY *áhNçµÇ†vÔW£áL«̉†vÔW£MV€ D8Z„Çv´a5º¥®v¤¸AÁª@…q:¯{ÏzͱÿuÏÚ~56oM›́lû®‚+–¢ï!;W£ûWM5păG«q¯";w«@"­Æ}¿Fóư­Í}¿Fóư€ ÂÑR wĂhLöw´6ĂƯ0“ư€9ÂÑ:Lî¡¶a;ÜCM;đÛá±mÛ«‘vàV`r­Ñ†íhr­‘vàFV`¾Ë·¡-oÎÙƠؼYơ¬ÂÑ \1äm¯™rO°’;EB«@Åă7ÇXD¹ d«HÚ¹³œlµT®8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áèƠ'Ÿ|̉¯_¿øøø¶mÛNœ8±°°PơD©GªGđ#¬†«¡Çj° z¬†«¡áèÙ¬Y³&MtôèÑ{ï½·V­Z+V¬xúé§KJJTÏ  áèAVVÖ¼yó¢¢¢Ö®];õ¼uëÖ 4hß¾}3gÎT=€2„£üqYYÙèÑ£###µ#ÉÉÉ¡¡¡kÖ¬)++S=€„£;v́¨R¥J§N\G‚‚‚:tèPPP°{÷nƠÓ¨A89Î#GÜrË-·Ür‹₫xÓ¦M…'OT= €Áªđ;ÅÅÅ¥¥¥aaa†ă¡¡¡BˆsçÎÉü!qqqª¿?Âjè±z¬†«aÀ‚è±z¬†B„£‘vëtÍ5 ÇkƠª%„¸páB¹BVV–ê/ âñVµQXX˜Ăá(..6¿xñ¢øßuG"‚ƒƒCCCƯ¯, !\÷YØ áèATTTAAV.¹¹¹ÚSª§Pƒpô k×®¥¥¥_ưµëˆÓéÜ´iSxxx||¼êéÔ =èׯ_•*Ũ~ûmíç…óæÍËÏÏïÛ·oƠªUUO †ĂétªÁ-\¸púôé 4hß¾ưñăÇ·nƯÚ¢E‹… ºoÓ`„£WŸ}öÙªU«öíÛW¯^½ûî»oôèÑÚ<öD8@ ?ă)„#¤B8@ á)„#¤B8V˜O>ù¤_¿~ñññmÛ¶8qbaa¡ê‰”)))Y´hÑĂ?|÷Ưw·oß~ذaß|óê¡üÂéӧƧz•öïßÿ́³ÏvîÜù̃{ï8pà¶mÛTO¤̀åË—çÏŸÿÈ#ÄÇÇwé̉å¹çËÎÎV=”999qqqß~û­Çgíö̉j²6|i5ÿwĂ…—V_"+ƬY³&MtôèÑ{ï½·V­Z+V¬xúé§KJJTÏ¥ÀƠ«W‡ ̣ꫯ={¶uëÖM4Ù¶mÛĐ¡CßyçƠ£)æt:'L˜àúèö´aÆlذ!222>>~Ï=ƒ Ú°aƒê¹(--úƒ3f̀ÈÊʺ뮻TOçkơêƠBèÑét?¾J•*®”´¶ÔÔÔ´´´´´´6mÚx<ÁV/­å®†­^ZË] /­JØâå©R9Î#GÜrË-·Ür‹₫xÓ¦M…'OlƠª•ê}jîܹîíeff !6l¨z:5fÏ}đàÁ… Ö®][ơ,*8p <<¼nƯº;wîܳgÏùóç›5kÖ­[7×[yøá‡/^œZ£F»ï¾»°°0---//ï±Ç³É¿'íÚµÓlܸÑưY»½´¯†°ÙKk¹«¡á¥U ÂñF—––†……‡††ë/'ØD‹- G¶nƯ:õ¼›nºÉp©É&öîƯ;₫ü¶iÓF{•·§Ë—/ÿôÓOM4y饗–-[æ:̃°aĂ7ß|óöÛoW= ¯ÅÅÅ¥§§2dÈ!®ƒœ8q¢êÑü/­¼´đ̉ª oUß(í₫¾5kתUKqáÂƠªTZZºxñâ'Ÿ|²¸¸xÚ´iª'̣µ’’’ñăÇ7lØṕرªgQ́§Ÿ~B9rdơêƠÓ§Oß¶mÛ¦M›FuêÔ©ç{ÎÚ÷ÉzTTT4mÚ´Ÿ₫¹eË–ưû÷ï̃½{HHȪU«́y¹;^ZMđ̉ÊK«B\q¼Qaaa‡£¸¸Øp\Û@ûc{Ú¶mÛß₫ö·£GÖ«Wïïÿ»ùªXƠôéÓọ̣́–-[fÏwcơªW¯®=˜6mZ—.]´ÇÏ>û́éÓ§W¬XñÅ_<ú裪gô©ñăÇïÚµ+99ù‰'Đœ>}ºÿ₫Ï?ÿ|FFFLLŒêă¥Ơ^Z/­JqÅñF‡††ºÿçoQQ‘Âu3 ­\¾|955uđàÁ§OŸ5jÔ5ḱù̉¶}ûöeË– >܆w~¸«Y³fơêƠCBB:wî¬?̃­[7!Ä¡C‡TèSgÏƯ¸qc“&M\Ơ(„¨_¿₫È‘#¯\¹²råJƠªÇK«;^Z5¼´ªÅÇ uäÈ‘¢¢"ưÏçæææjO©Î×ÊÊÊÆ»~ưúnƯºM:Ơ¯ïí·€h÷êgdddddÄÆÆ~₫ùçªgô©ÈÈÈóçÏ;ưAí‚ÁƠ«WUOçSBˆÆküñGƠú^Zơxiuá¥U-±tíÚ5++ë믿~衇´#N§sÓ¦Máááñññª§óµôôôơë×?₫øăS§NU=‹b·Ưv›ë_ Í… 6õ\¿~ưøøøºuëªĐ×:wîüÁ>|X»1V£í«b·mØ7n”ít:ơ%••%„h̉¤‰êư/­z¼´ºđ̉ªáXúơë÷î»ï¾ưöÛ;vÔ~p{̃¼yùùùO>ùdƠªUUOçSN§sÉ’%7ß|ó„ TÏ¢^»ví\›Jh2337õܪU«×^{Mơt $&&~đÁ“&Mz÷Ưwµ=Vöïß¿`Á‚ĐĐĐîƯ»«Î§BBB:tè°qăÆ·̃zkÔ¨QUªTBdgg§¥¥U«VÍđn¾mñ̉êÂK«/­j ~ưúăÆ›>}z¯^½Ú·oüøñ­[·¶lỤ̀©§R=¯ưøă'Nœ IJJr611qàÀªg„2Í›73f̀o¼Ñ£GV­ZïØ±Ăáp¤¦¦̃zë­ª§óµ”””G}4--mơêƠ-Z´(((صkWYYÙ¤I“~ÿûß«Î/đ̉êÂK+üáX1†Z§NU«V­^½º^½z=z´öŸÈ¶’——'„())9pà€û³öü9nè ><""bñâÅ[¶l ïÚµë¨Q£´ß~a7«W¯~÷Ưw7õü¯ư+<<¼cÇ#FŒ¸ă;TæGxiƠđ̉ ÿáp:ªg@`;H! …p€ÂRGH! …p€ÂRGH! …p€”`ƠÀo‘ưđĂ›Ÿ³ÿ₫jƠª©¬ƒpÀGTT”Ï>ƯæÍ›KKK;v́¨úë₫ÅË/¿üÙgŸíرCơ ́‚pÀBBB6mÚä³O÷ /}÷Ưwª¿n!„8sæ̀gŸ}¦z öB8@ ¹té̉ñăÇwîÜù₫ûïƠ®][ơDl„p€@2nܸuëÖ©€Mlá›o¾ù裾ûî» .4õü¾ûî>|xƠªU]'äçç/^¼øŸÿüç?ü „¨W¯^ûöíŸxâ íg(g̀˜±`Áí̀¸¸¸5j́Ù³gܸq‹-jƯºµ₫sµhÑ¢víÚ[·nBhçlܸñ́Ù³¯¼̣JvvöêƠ«÷»ßINå®OŸ>wß}·¢¤¤ä­·̃R½®́…p`}3gÎ|ï½÷œNg½zơ"##wîܹmÛ¶¯¿₫:--íÖ[oBäçç'%%;v,$$¤qăÆeeeÇ{ÿư÷ׯ_¿bÅđđđV­Z]½zuụ̀å—/_4hyÛ¹;xđàØ±cKJJ„eee’SyÔ¥KíÁùóç G>F8`%%%®̉ ]¹r¥öxăÆóçÏoÔ¨Ñ믿~çw !̣óó'Nœ¸iÓ¦9sæL4I±bÅcÇué̉eæ̀™5kÖB9rÇ_}ơƠ£>Ú¥K—.]ºddd\½zuâĉ¿vÎ)S¦ÜqÇ#FŒhÚ´iDD„äTàoØ@s:§<ù₫ûï]çLŸ>]ñæ›oj}&„ˆˆˆxóÍ7£¢¢>ưôÓóçÏ !®^½Ú¹sç^xA«F!DíÚµ{ö́)„8~üøÏY³fÍùóç·iÓF«FÉ©ÀßpÅ@Ó~ÖĐä„ÂÂÂÜÜܘ˜˜–-[₫Á6mÚ¬\¹̣ÀíÚµûóŸÿløüñÇ/¾ø¢¢ǽƠ«WơêƠíT <"XYNNöăââ<àº6yêÔ©ÿûß;wî??ÿ₫ư¥¥¥÷ÜsáÇ :$ó) ojùå—2•ê•G7f̀˜²²²1cÆ|đÁîƯ»»víÚ¢E‹³gÏ9r$44´nƯº—.]ºÁ©ÀqÅ€Å9iÓ¦½ơÖ[]ºtÑ~%Lttô˜1cV­Z®óúë¯ÿå/©_¿₫Î;Ïœ9Ó¡C‡U«V½øâ‹IIIAAA;v́ĐNKNNnÔ¨ÑÑ£G>,„hذá‡~Ø­[·*Uªl̃¼ùđáĂ 4˜?¾̀ơB™©Àß8Üï₫üZ?ÿüsAAAÆ ‡êY ²Â[ƠB8@ á)„#¤B8@ á)„#¤̣ÿˆƠ‚Īj¶IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/fuzzy-logic-toolkit.png000066400000000000000000000304561463010412100243670ustar00rootroot00000000000000‰PNG  IHDRȦŸ¦À´ pHYs.#.#x¥?vtEXtSoftwareAdobe ImageReadyqÉe< IDATxœí½y”\×}ßù¹¯ö}íྂ¤P²(SEb±́3ÇYY93'<‰”g Œ%’¢%G²“È:ÉLNg2˜86IKD*EZ$J$.@7v ÷®}¯÷̃?^uuUuU£«»ª»¨ÏäĂ}÷Ưzïơư¾ßïwWè̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºÜøˆµ¾.«ËÁĂƒ´ư¦D¨EU¾áq[?|öđG…µ¾¯N¥+|SŸƠb₫ByXÀ°”¼zÁ1̣ŸF[ëû[âéư;₫‘‚xAp>YNIxKJy ÉñœÆ‡ßûñh~ín³³¸érèÑÍöŒÓr«0É= <,#ÄÀ\S¾®¨Úï}óGçϮɮ€ƒ_vû¿Cˆư×Í,å´ü\êâ¸~́f̀Í&ñOléµê–]BÈ=±¸A ^f“IÁl2‘/ç’RºÔÿå‰äè÷C]µ»^>â™};~K ñÇBp:ĺyà.ü^ÓQ&¦f™˜Êdë— å4đ–⸢iÇ&̉Ú‡ÿ籋¹U|†5å†ÈSOl·Ù¹Ă$L»r·„‡b»K½ü»pĐG_8@OÈO(àC‚“œáăÑKH)đ3M/|ơÅW.~²ªÔÿË-}4ÿ‰„ßB€m›yø₫;°Û¬Uy¥”$R&§#ŒOÍ21!Î"ë”+%3ù–—B;6•ĐOßÈ‚¹¡̣û¿>’EÇ.v !ö÷!DO½¼¢àó¸è ûé è đº(R·́ñ©Ỹ8qD2 €”¤r$Î₫ñ³fM>°ưï(Rù7úv+»wƯÉæ ư”´²(RJ’© %ÁLNGH5 0̣m©s\â˜;Y8ớ $˜u+¯îÂâؼ̈́e7‚‡…»¥”;…¶zùm6 ဟ̃°Ÿ¾p€PÀ·àKz=E•wOᣑ*ḳ&ü½çÿzäă•?ƠÊxê‰í=³øc!øM À–ávﺇ½îkY•‚™˜.Y:ÓH0³Ṛ¶̣¸ÔűâlæÔw~~µÿÖù¬|cïÆ€n²Ü‹Tö Ø-¤Ø%‘}¢Î'QQ·‹¾P…uđ¸0™ê[‡fŸåͧˆ—¬ ’´”̣YGjä;keMîÛùe!ø>‚!»ÍÊĂ÷ßÁÖK²Í ¥$™Î09-»d©tY_1³H̃‘èÇuMÓ¢ÙÖ“`:R ‡Åœ÷nÛ¬"V¤²[ñĂ­ᨗßfµô{é è  ëĐêQIQUùÅ©³|xöbÙ« ư÷^ü«ÑÚöĂ5|íñ A«Ơñ"‚ß³›†úؽëN\NûªÜƒ”’T:[å’%FJ"̃AêÇ€ăE{îưïî\Át„@zb»×®(÷(&¹)ö äÀܼ!—ÓˆBzĂ~|^7f“i î&¦#¼qâ≒5Af€g£×F¾óƒw).víJyzßÖ'…búw1 ƇâS÷ƯÎöÍCmư8\JÁL”,L#Á ‰"ä;è☆~o2‰?6X-fº÷6vnî¨ÆbH)Ig²L”b˜É鉂‘È’qLÚq§ù峫(˜V¿QñÏ¿¸mƒÙ®<ˆ.÷EÙ Üxêe6›M}#.ơ=¸öu󇮇ªªüâô§Ï\¨ˆMäÛ¨Úï=÷£ó§–[îÁa2ø-„üÇs—Á¾0Ÿ~đ.Ëú°Í29åw>([‰̀ )₫ut́́ ÍZ“§÷oÿ¬"ÄAl°˜M¯»Ôï`4·º]›₫·†5áô'çç­ œDç+Ͻröư¹„Cn¶g½–?ˆ XzĂ>óĐƯø½î5¸óÎÇL¾ä’ƒ/ †‚w¥®—‚cédüƯÅSUùîßù×Bđdm&‡ƯJ8à+Ç¡€«Å¼®ƒéµbj6ÊïTX)s:̣›Îs£ßÊnƯy¯Pø!FĂ&“ÂưwîäÎ[¶t?>MP)˜‰©ăÓ³Ä\2’Hù®⸮ëG¾ưÊèÏ+O–kø×öí²yE!ÜNCưá² <.gˆitUÓxïĂQN}r]/ÿÑÎ[(Y O?tAƯÀ.M ¥$›ËW¹d±Dª`¤.%ß|₫å‘ÿm.e^ oZmÎIÀl·YÙ½ë¶ ·~O—y¦gc¼qâ"±d9MQî»c;wƯº­ûQjeÁ̀DË.Y…`BËơ}ë¯/GÊuoKd?½#è–°GÓtqñÊñd₫àºé¨[o¸œvvlÙ€Àp½‚~/_ü•غqEé~˜Ú…‹ÅLÀçax°—­›™œ‰ÎäLf̀ßûÙÙÙ$,lÅOïÛù? Á÷çf 9́Vvß'›‡—6— Ë̉(DbQf#Qñ¦344HoÇê 2́©L–Ÿ¼~’H,QJ‘G{iäKsçëÖøöø¦«Íú}ø¹´­Ù½kál´.K£¨ªDc1"‘(±Xœl:ƒIL‚‚‚ªËfŒÁ˜n7}=azĂa‚?¦5ˆy£3‰ó“Ÿ$“5æwIä_Cô·i¦́ó.fÄÓûwü]ø7óÖÄVMº,¦iÄâ "Ñ(±hŒt*eAÔ2'Z̀f3á`€̃zĂ!\Ng×’·€Ë×&9öó_RT…j$ú÷‰Ñ¯ƠÎç¹î›>x`xPHÇŸ ø̣\ÚÖMƒ́®3·ùfF×u≤!ˆXŒT"…²¡ ji$Z\N'½=aúÂaBÁK·3¶Y><{·ù1RJ$RCʯ?ỵ̈èwëå]ê§H<°ưï!•ï–WÇ°ÛØư€1ÏùfDJI"™"ÅI$ éKD-KH%&E!đÓÓÛÆëñt­Ë"èºäí÷>⣳ç’RRç>ÿÊÙ¿ltMSoókûvY…ü·•ë+m+YÛ nMŒt™r ‘ˆÇÑUmÙ‚¨e9©Ån³ÑÑ×ÓCO(ˆÍ¶üyè7Ţʱ·̃ặµÉ¹¤1‰úkÏ¿t₫äb×-ç/+îßù€ï̉ }sk-mê[FqK&›%ňÇâ¨E“mùJ·B •!đ{½ô–‚ư€ßwÓöƧ39^}ă$3‘8>ĐÔâtá̉ơ®]ö_úkûvYùïÁKÛ¶iˆƯ»nÇf]ŸÖ$ŸÏ‰Æˆ•QÈÚ&ˆZZ-Z, =¡ ½%ẁéè¼™‡í`6à'?;1×ÇDí7Ÿ{ơ||)ׯô//¾±Ç?’ˆ?[Đå°³çÁ;Ù8ØùÖ¤P,‹ÆˆÅâÄăqr™,Ê* bÁ½´Y µxÜ.z{zè ‡ k6§¿\Ÿâ¿ÿí/)K SR₫ûèØÈSÍ̀ÇiIMø_÷í* ₫L˜KÛ±yŸºÿ¶²&ªª‹Ç AÄâd̉iÖFµ¬¶@*1™LFSrɺ¸]®x'+áăÑKüüƯKĂG¤.u¾ñü+#/4[N+ß‚8¸ûï"Ä·ç&Q¹œvyà.†{[ø3KGÓtâ‰D9†H¥RIG₫ñ×R µ8öRËXáPë:jJ–ṚÎ{sú̀…¹”Œüö·^ù¯Ë)¯å5åàÛ7`V₫LÊƯơ;·là¡ûnÇÖæ Tº®“L¦J"F2™]v¤ jé$T"„ è÷—ƒ}¿ÏÛ±ïSU5¿ơ¯N ’ E‘_₫æ_¼½Ü2Ûơ¤â™}Û¾‚¢¼ÂFḷé‡îfĂ@Ư¥r—…”’T*M)%'?8ĂŸ›KÈéRüÎ ¯œư/-¼e bFájñæ™ÈÉGn ŒÑÁ^§•;†x́f63f³‚®é¨¾Ú·¶¦hºNNmëZ×k±B–é™Y.\¾Â¥+WI¤RèºƯfCYâ˜6UÓ8₫ó÷8sị̂\ÁÓºĐ÷¾đ̣èÛqß«nAŒ}>lï İɤ°oÏ­x] gĐ *ñT–D2C"•CÓolÁÜèd1„ø}^úzzŒ¦d¿¯î‘Ù\Wv’©ÙŔ-ù¤PĐöçȹÑvƯÛªO6—&ÛŸÎ-×ÿÀ-CuÅ`µé zè zJ«ƒçI$3ÄSY2Ùî¶̃7RJ¢±8ÑXœOFF±X,ô†BFßK©)9Lsôơ$S™¹k ÙßøÎ‘«‘ṽÛªZƒû¶ÿ}¡(ÿ`¨ÇËçîß¶,?´XÔH¤²ÄS©,ªº₫­ËÍlAa1›ù^×üJÿß1L,™!‘ÎÜ‘Énÿmưa»ïiU,È!P²v¾*às̃·•Ὰk^¯UƠH¤s†;–̀–çw:7›‘R; »„}nB>7~Ó"Ét¿}†|A(H'Ÿǻkí¼ÏUÈ3ûw|!^ؾ!Äî;7­ÆÏ–+îX2C*“o´üäs³Äă´̣yûܼ.,ææR§¢)^=1‚¦KDUUÿô‹?nßmÈ×l¹Û$Ío#„Ưă´±wÏ­M¿”V¡i:Étx̉ˆ]J_¢àFˆĂf-Y!Ÿ«%V/ŒExăƒ‹Hä9=§ïùöÑsS+.¸mÈSOl·9-Ê à.!àñ‡v̉èŒÊ¥”ä jY,Ét®rÜUçFˆƠb&äụn“kû³/Æ£ă¼?:{Ơ;…Ï?{́b®Ơ¿ÓÖ ƯiQ₫̉Jåwníïq€Ñön·Y°Û|ô…}hºN:'2b—\₫Æí´k%f“‰€×U#<ÎƠÙBï®mư$3yÎEđHÖcùÀ߇ֶѴíI¾±Û¯J¡a ùœ|éS;×Ơ¢ùÂ\́bX­Í=ûëÁ‚H)1™üngÉerăs; ¬Û‰¦é¼zr”©¨±½‡@₫«o½4̣/[ùmHmoù̃Ư·âs¯ßơfu]’Îæ w,™%“k}ó{§ Dđ8å¦×€×ÙQó×s•¿yë ÉLºDüîó/ư¿ZU~[rpÿ?BüÀC·sËÆÖM’ê E•D*K"™5:*[`]:I .»Ïˆ#‚^7¶ßh5Îqä­3ä‹Ú܆D_záåÑă­(»åyzÿßR„øsXYoùzÁØ`2O"™- ƒÉ×Ưïûz¬¥@́V A¯›pIN{ç,´±T&"I^;9:×Đ2«¨êo₫èüÙ•–Û̉û̀¾­æ÷lV3û¹ ‡mưLøoEU#™2Ä’Le)—ÖQ¹±˜M½®rávØnˆØ¹k³üí©̣ZpgUG^|ǻ̀JÊlÙ[9JnÿΣǿ}[ÙØ¦̣̃ơ‚ÑQ97 &K:“¯ÜÀ³v Ĥ(ø=ÎRáÆ{o¸ú̃ȧΕm@¾)Ê/~ïÇ£ùå–×2ç2{`ç׆8¶ …nzq€Ñ”́tØp:l ôøQ5T:G¼»´«£R×i'ä7k¿§³ëvrÏö’™<Ç£€ø§Eüø–ÙüÛ RƯ[neïÛÖ¬·|½ ¥$—ŸoJ&Ó̀¦–·ß½œv«1„Ăo á°­£µ¬Zªé¼zb„éX]ê‡^xyô–SỌ̈;n¶÷y¬o!¸GøâC;éí Áơ‚¦ë$ÓY¦cI¦cI©lCw ŒÑ!¯Ñ9̣¹qج7DÑ*²ù"óÖRÙ ut₫ás¯Œüy³å¬øÜ·ưÛBQ₫½›÷î\i‘]€|Q%Oqq|†H"…Ål&àu ¬öº³îº̀Ke9̣ÖY ªÈ,ºøâs¯œ}£™2Vô†¿¾Û¯*B9*Öioùz൓£ô]ܶ©¯»-ô2ŸIđÓwÏ•¬±œ̉¹ç…¿=·Ôë—ưÆÿÙ—7ûM(ÿQ L&“Â#wmî£Å$̉9ÆfŒ^¬Áê7a/Ư>\ú—èxùko.ơúe×h«nù>BlØuËĐºJ̉©œ½b4á'3yÎ\^ă»Y¿́sÇc;!ÄmV«óÿ=t;Kê ]–@9°óï"ù{Ca/;‡ĂË)¦Ë"UsWgËÿ>5:A®Đa¼\îÛ98ßơ x,»m矲»Üt[́?ÿµmĂT^B8m3¿úÀv¬–n“n«9wm–Ë“óKËjºDƠt6ôøÖđ®Ö/B6ôz™˜M’É‚û?½#”{ó́́¢A{³DX¤̣æö&|øÎ8í7o{{»R–]*§ƯBĐh6¹2C,ys®<Ù ̀&Ÿ½.‡á]IE₫ëƒvüÆb×4%¯ïÛ₫YŸ‡noy;™¦ˆ%Éq;‡Ắºũ=s­cçƠ¯œ6 Ÿ»³ 0 Ä7Ëß”@E”£ÿL®À¹k³d»3ïZÎ'%ë¡(‚í½N¶m06“`l&±–··n‘R’Hç¸:ÇbVJi,Ú¢ƠÔX,‘Ñ^ĂiÆg“ŒÏ&QA¯ßÅpŸŸ =>\nîJHç \)Å›úưåÑĐ÷îä̉D”¢ªóî'×yºÍêK@JI2“ç̣dŒË1"ÉLƠtü¿»¾©èúÍóÑü#·x_AWº0ÉdÄ“ơđíË₫²Ål"™LIÈÚV3a¿k-oµc‘R’ʽ:Ë»Ÿ\彑1Æg“̃ÔAœùGös#p|†s–]{çÑÍö^¯i·Ê¯ƒØ+‘[D¼.z} ÷ú ù_¬‹1ë/&WPñØḾ}äv,ƒÏ?ÏÉs1 Ø,&~í3w`³völ¿Ơ$•Ése*Î…ñ‘D¦fâÔ‘|,%!tíđs?:%ŒđmÉçưÑG1ïrm»ÇlR¾,̣NUjpÚ, ơxîóÓtß4Ă¯›áüX„7Kë=Ư2èæ¾Û¶T äÂ…ó\›IraÖøàƯº©‡o®WÔMC:[à̉d”K1făé*QH)¥@œAÈÿOC=́zéÂég¡©ùÑíđÄï?¹u‡n2ˆ/ ÁƒPƯkiµ˜yÙØçc ́íø9Ï«Å₫ 3ñ “àáA†$N32¥’*H!Ø÷éÛđ5X!ÿF%•-pu*Æ¥‰(3±LƠ¨ç²(ĐÿB×Äá‹?9u˜Æ.Ôơh{€đµ};‡¬ OJÉ—|A•ăl2)ôÜ ÷ùêñáZ‡ó¡[ÁL<Í~€a[û\ô÷Ôä™LLẠɤáOoèññ¹]ÛÖäW“L®À•É8—&¢LÅ̉UMƯRJ)„‘R₫7Eןs{ïđáå‹¢’U ¿±wc@*Ö/ įK)¾8×á8‡"!Ÿ³Ü"æuƯs¥—›§.r₫±ƠÅĂ;Ø­¦†Bpq¶ÈlÚđ{`;ƒaïÜw;Éä\qq<Êt,½`~ŒD’ÿ&tưÿi¥(*Y³Ú÷Ơ}N¿â9-`K½óđ¹ílèơ3Üç#èũ°ór…"ÿơØit]öX¹s£1œ¤¿¿¿J /^ “1æ­58=–G—à÷8Ø»ûVeư¿Ÿl¾È•É—&bLESơDqEJ₫‹âđ;©³¿8vŒ¶.°¼fÎÿ^Ï<à)œ&ú}f¢XF#W”H –ÊKMpúü.‡• =>†ûüôú]7Ô܈ѫ³åu7„\ï; „Àj†~Ÿ™±˜J,™eôê ;×éúcÙ|‘«S†û4M-X#ÙjV(”6I’’g^xydѾ‹V̉ѱà±›đØMl B¶¨MkDÓé‚ñb̉Ùg.Osæ̣4v«™Á°Ñ"6̣¬ëùïº.9{ÙÖî´™đ»æb°…*BT¸œ‚¯™™¤FA“¼?:Îæ@Ơ–ÚL®`ˆââD”ÉÈBQØ-&úüúƒ,fo|8Ñ ¤ö̉oSQ®N« §ƠÄP ª$Q‰¤4’9 ‰±Üäù±çÇ"˜M ư!{ư öx×Ư:\W§ă¤KK™n:æ°¨af8háÜt\AåÔù vƯ²¡í÷¼\̣µBIc l…^¿ƒÁ€ŸÛ†"ŒçLçÖn›ÔÖQv3lA¿ÏJ¿TMÍhDÓ*ñŒ&,®NŹ:G‚€‹á^?z}xœíYz¿•œ¹dŒ»2)‚₫€ÄbÚUB‚n3“ •T^ç“KÓ́îé¨çÎT®NîÓÄ́BQXÍa)n[)2ÑxÔµ«:D ónC}ÿÛH·˜½^…^¯M‡xV%’R‰eTD—’ÉHÉHwÏ\%àq”Åđ8:®E,–Ê2I0°c®«ê¹XóçʆF6†¬|4f́ọ‹3×ǿ}[Ûzß×#_T¹6à̉D”ñ™ä‚-¼­f…^¿~¿ƒ€Û¢ˆºÏV>^Ă¿[g¤ä.Ô;ÑH0f„ÜBn º”$³:‘t‘HªH^•H ‘D–H"Ëû£ăxœÆ°—}~Â>WG´øTN£ 9©Eă:QñNJn©Çn"ä63›R¹<c"’¤?èiÓ]×§PÔ¸6ç̉x”±™D]KÑă³Óçwồ»OuQs¼–©ÎÈ·$µ(BÁçTđ»̀l鱓ÎëDREfÓE2yăë•̀äùøâ_œÂa53T#Ọ̈Ô|¹W‡‚ª•û=‚n+.›yÁ³-|ÖjËQ™¶1d#VÑ%¼ûÉUÜ}kÛ-fQƠ ÷i<ÊølrÁ*÷“BÏÆ@û´P ]ªÊăµœ₫̉aiNở…¸ífÜv3ĂvrEHJe6U$™U‘@¶ 2zu–Ñ«³X̀&ÆKA₫j {9m¶\¡6„5ÏÑ b7€Í¬0è·r5Z ’ÈrîÚ,Û7´~­€¢ª•Ư§±™DQˆyKQE½=«Q)ÅĐk7#f]¬z_W£œê4‡ƠÄPĐ̀PĐFQ“DREf’Eâ™"º4₫à—&Œ)“"è ºÙØëg¨·}Ă^*§ÔÚ­&¹ ºöj›.æßSm°0´1•(RĐ$©?Đ’&đ¢ª1>“àâDŒkÓñ¢0›=^;}~;A Sƒ@{9⨸pÖï^´#y‰¢Ñ¹z¨—W`5 úư6úưv4]'V™Iˆ¦¨ºDÓ%ă3IÆg’ˆ¯̣Ă^†{}øÜ<›Áøl’DÚXp|CÈYQé>Wí3-V©L l Û̀’Í«œ>?Á};‡–uª¦3>“àÂx”±é8ÅZQ(‚°×V)L× ´«w©W±́)}߯IDAT•Ú—CG¤ô*Ú$Œúç̀&…¯•¯ ]Jâ™"3ɳÉ"UGJ˜‰g˜‰gøåÙ1|.;Ă}ós[VâßÏYEÀP°¶ç|‘F^Q¿%«̣¸×ka"V •×øøâ;†Ă¸KköU5±™—'¢\NPT«‡6™Ê¢°Z‚¥¨<®µÍ¥¤ÓLEoV×/Ç$A·• Û́‡dNe&Q`6Y S0*I<#~>Çéó“8í†KA~oĐƯÔD°T&ÏƠ©8ưGynổZ°æÎ/t¯*·ô:8u%…¦K~qfŒ_¹wKĂ²TMg|6Áå‰W§â¥ulç1)‚°ÇJo(ªà+µ,7}3oÍX‹Fù—W€¢€ÏiÁç´°µÏE¶ 1“̀3(̀=º™\‘3—g8sy«ÅÄPá^ƒaïu}₫3Wæ7<»h,ŒF1Ùââ×a&́±0“,ĂĂ£=U+îkºÎÄl’KQ.OÆëZ{NÖV¾f*{åqóV£̣¸kAD­o]>1zIé,«œFç„—ƯŒËnfcØE^Ơ™Mæ™N䉥HŒöÿ c.ŒE0)‚—á>z|Øk†½¨ÎèUC ~—£¶iwñªĐLåÜ̉ă`6UDJ8ùÉUÿÔN&gS\˜ˆ–¢fk8E@Èc£Ïg#è±a65wjße›ÅQ‘¶t†@¨ÿơ\n|±”rê§7:g”m·Ør2t¢j’ÙTéxHª€V ̣¯Nǹ:Gèơ»¹-¥a/Ç#å9vU}ơË¿´,÷ªúÙ…ƽí\™Í1ÏpøµÚ€ ÇJ¯×NÈkŬ(-©́­ÏzX#ƒf…Ñ|œ²œtDơ7LÅ,88ĐtI$U`:g&‘£¨=ù“Ñ“Ñ'?1†½̀‰Ăf6å5ç^U§×GơñpÈÁT¼@^ƠËâP„Ñ1Ùă³öX1™É)?ărƯ¨Êă•YÚ㵤c̉~ë«o-*Åuó›döxíôú́Hé#–.0Ï1È“+ùÑ%C‡{\åÉ_~{i–²^Ïúü±Ù¤pß/Wgs¨ºÄï².¹OUÖ«ƒÄQ/MƠṇÂ깋WôVÅ Óë[‹fËBpÛ¸mÜ2$IfU¦Kb)j:}~;›û܈qn©â˜;o³˜ØÖïnke_ñ”¢©UIVJGÄ`í⋹ÿ-ÅZ\·œªt×iÅë´²m@–Ήë\S¾đw[ô•o©ƠXâo–Ÿs™âzU¤c²´¸£ÙJÛ(½‘(–YÎ"ùçωé×ûƯäúÁz{+̣RÊ[z9‹ç]ô¥´™HơWu}Z‹êôf¯Y1έÜj,’§|/+G+âăxíÄ"ÑèE4+ŒëTÜ% ăúh•`‰EŒ9éóy×Î¥ZYÅ¿¾;U-µ”Hg¤Å*I3‚U‡Í£UVa9¿±”æê»TÍæ_®8?^ :H *íbç©l D±̀rÉ¿ôk–o©jówj¼Ñ—ª₫(çƠeM" Y>^²µht®‘0–YÎ"éÍ^³̣rjY_.Ở‰£kA*Xæ×vÉÂX̃×±ôFçVZNí½ QY‰ÖCólkʨ]ôa5é ,^¡Vô&…Ñ>Á4úå—ÓøËyc»TµyÖrGƈ Éʶ@̣_§œẸ/ưÖ ¯~ysyÖ̉¥ZJ•‰£®`+̃€ =SûVÚIG¤ºr4#ŒF•ó:å,’̃́5­*§:½¾å0\¬Úß^-q4c}Z+Ê÷QÔoâ¡&°Ra,ÿ«Ưø¢Ùß®/ŒêkÖ»Kµ”ă…–e­è ”¿Œ séµi\ ×W|ÑX‹Ơ‰VXÊrËo¶ÚpưRịéLơï/ëxaÅ_zkCgh,ùs7^|±´ôêó+ÇbVÁl³áëïĂ7Ø W(ˆb2£k*ÿä§D¯\ƒ Ü«Q?ÏZĐ9i`- u_óf¯Y­ø¢«u.•Àâ°ăëïÅ?8€¯¿¯$ ˜}`éK˜ƒ(© ÜqÑ+cuËYÊo.~¼Đ²Tw-HUU2₫[÷¥,OÍZ€Ơˆ/–.¾…¿Y{íR+¡ƠaÇ7ĐgbpW0€¢˜ÁKOIaPj– 2y0™Í-©øË̉ÚÑ1iüBO_xnù‚YƯø¢yK"DuëY«Ó°ÿà₫Áœ?b³ßƒµ̀aP–º‚dóVĂø÷ʬLwm^¯´‹[«ôês­J¯Gưª˜M„7o$04„°WÀP,†…°ö¢0‡Äs“½₫æ̣g±ăÚƯ§V“È<Ëû7{ÍZÇở¯‹‰Ăb·q߯íÅÓcÄ Ơ‚Xá®[RE+ª ~sáñÊ­FƯr*^‡YÊ›om^QúĂC»ÜœùôΉ/Æ|¾êy₫xËC»đômÿc`r7.d…´?̃XX^%Å›qm^h—û3®=iiîR£sÍ»W•„ªcÿàØ·´Y+¯́Í—?­{„¦é´ÎÍiOzơ¹ƠM¯<ßĐ5ÑeĂëZI3V£Q¥W—³vY[Hˆ¤̣¼w!BØk#́µc·˜X‰`:;¾XZ₫Æ4j½jo +X=—ª;Ô¤„̣O€ÏêR˜fyfy Ça&́µÓăµăuZ*ö\0:1¾Xºˆ«óƠ‡XPFK‘*ªVüf{]ªyÖP$«¿9_Ï¿4̣~UJ~(‘W¤4Z¼“Y• “)̃™áơ'9u)ÊD4KQÓ*Ü ˜«ở€é‹«ucª+zuúbçZSNưzQyΘ‚+Ú¬æyW.ă=̀—·–6dÍcç^yxưĐ£˜³̃­÷J”½e/p`-¨:ă‘,ă‘,ø]Vz|vz|v\vsÅËnÆ*T§WŸëŒôFy[6!uPc3Y¨A»]*!¹‚J,5¿l«4ߤĂƯŸ=† çO'g>±}ƒbዱģ@@—’H*O$•ç̀µ8.›™°ÏN¯ÏAÀm,Ä<Ïê f5„WÍBWG×t£2· ©Bq²gÑr¦Î.£²7›_ é’X2Ëøl’±Ù$‘D¦ÜQ(%UWZ÷×g-­×’9´oÀ™Áơi“{%<`ˆ*÷ĐbRzlôú„}v́–Æ{o´>đ^Y9óéƠiN§¥b÷ªh4ªË×W–uÏ'đo{Ü÷/¸—%!uĐ’P˜€â§‘Zt$Êå¿ 55M³•}±ăÊ2̉¹"“‘$ă³I¦¢iruáíÁŒúW{yô¯–÷€Ëc]¤’C äöo¿MJñ¤PØ<¢j‡M!Àç´̉ăwĐësàuZç}u#µùë¥7:תræÓëçw8ª‹E)‹ÔC¸{ÿ2¢ç¡8…q(L‚¢É’˜˜$>6Nb|’b&C}a4{<ÿŒª¦3Ï01›d<’"‘Î-o%Q|,ÑJ£éTüoÿôØtjé×Ö@jyê‰í=N‹̣˜Dî’Ï#D_m‡ƠDÏA¯ßIĐc/ï Øl Ọ́Ư¥Fç ÉHw85‰Q,ëV»÷éú‘¨QĂJÆA ©̉3âׯˆM‰Æ¥UDV&ˆùc $Óy&¢)Æg’̀Ä3 ¶’.ƯऔâRÑtơ§/₫è¥Ƴ:¬{ṬÔÛmN“̣ ‚½ö·Qg™AĐc§/à¤ÇçÀi›ôÛ_̀Ÿ[Zz­@âñXÙ‚Ô^SW R‚™w› “H=G.‘$>6A|lŒäÄ4j¡° ¼V×Ó±4‘“‘é\‘…È,R¼+…<.d5ưưïưxtU‡’\J 5ˆóƯ±EWä—Ê>ŸªÆaÀí´Đçw̉pásÍíâÚ₫øb±ssåØíµ‰WXăº¹ëoü1B;ö€çAP#%·i´j>GbrØƠqâcăä’IׯøÍX M׉¥rLDRL̀¦ˆ¦ruFáJ]Âà5àˆ¦‹×_|ǻ ̀,*zb»×fæs`¯âq Ă¢¦›Öf1\±¾€“°Ï‰Í2¿cm«ă‹¥”c·ÛÄ̉VÔĐæÜúùGQcl&%vuŒØµqR33HM«úÍVˆ#+25¬Ät,M¾fcP—R¼‰”GLˆ££³#‡S/cGrÓ¤’Cbθ·ß-±WÀ^÷U“$!xlô\ôœxÖ:M˜åU•ߌ0+§¾@ÔeÍ;ư>́^éÙÅlvÁùåÏßÓ\p=M3I“̀äp‘¨RÈÓÀOĐŽëÛG'WuÓ›VrS ¤–ƒnDׂ½ >‡ X›Çe·Đp̉tô8*öŸgyÂhœßf³U $‘˜Hk+~#«¡KHf̣eÀ&² ‚kÆ¥”ÇâˆÓ~úGGÏ­j_E;é ¤†¯îpMî=Rg/B<ruú\Â>ưA}[ư IÍ£^̃…I,jA–~ÜXù¢Êt,Ăd$Íd,M6¿°Od8¡ëüDèÚß\¸x₫ƒĂ±ª™V‹®@á(Ù½;nÁ$RîF{e!Àï²Ñt3tásÛË;ØÖæ+ƠI¯Ÿßj­/z¹‚ÑuI4•3¬D4M<•G¯é”RJ£Rđº8R,f^ÿΑ«‘¯í†¢+&øưdžBªĂơy!Ø+à úkó8¬fú.B.züN,æ¹@¿ù8ÅjµV $™L®À‚̀ÿV:W4¬D4ÍLùAç;…}Rđ¤â ªÙK‚ ×Á`ØĂ@Đ×eCQW sD—’h*Ït4ĂT,C<“_0àOJ)…#ÀOĐơ#ù”ú³ï»kÿSß8t²Ê<ưäæ~a¶>r¯â±F}.ƒa[CôÜå{r&ÊÄl’©x–Ùx–bư>‰(đº”úÑ¢G½/;ÿ,¬Ưf뜮@ÖCn¶gƯÊ#B˜÷OHä-µĂ_¼N¯ƒL®ÈL,Ư(¸~ä:“êÛÏ»˜[µ‡¸Áé ¤C8JáÉ­Û¥IÙ+QöÜSÛçRFrMÂO‘ú³¢½ú‡/]˜\åÛ½iè ¤CùÆ̃]X²ÉCÀ5„<ª«=‘9}́ơº¸»té̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ºté̉¥K—.]ÚÈÿû¿€́₫)»IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/gauss2mf_101.png000066400000000000000000001414601463010412100225300ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwXWàß*̉D±HF±°÷̃b‰{7j¬Qb‰ƈ¨QcÆnD,ØÆ®QEù,1FÅ‚ˆ ØïŹ—ê²íÎ́÷Éóä̀́́́™]awnQ©ƠjB!„̣)V¢ „B!Ê@…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­PáH!„B´B…#!„BÑ „B!D+T8B!„­ØˆNÀ yzzNB!Æ%:¨p4 ËüÇD<==飷LôÑ[,úè-–Å6Ñ­jB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* 1˜½{÷NˆA½Å¢X* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢Ñ B1[¢S D+QQQ¢SP* !„}ù£¿p´G·ª !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B!„h… GB!„¢* !„BˆV¨p$„B!Z¡Â‘B±h¾¾¾*•J¥RµiÓFt.†7pà@ÍƠ-ZTt.æ€ GB!Ä̉yyy­[·nĈÍÇûûûçÏŸ?õ¼5kÖܾ}{Ï}ụ̀å€+æààP»víÓ§Okóµk× Êâ€>ØØØ¨RË—/_fÇ_¹r¥S§N ppp¨T©̉üùóôêƠkƯºuU«Vư› Ñ B!D0ww÷®]»jâ°°°fÍ•,Y²[·nvvv[¶liÛ¶í¯¿₫˜₫‰qqq•*Uºwï^ûöíƯÜܶlÙ̉¸qăÇûúúfñr/^ëúRcÔ¨Q/_¾<}útåÊ•5ÏêÓ§ÏÊ•+÷íÛרQ#Ñï¨Y‘Å¿QB!D&J”(1räÈE‹9;;ç̀™³lÙ²ăÆ{ÿ₫½tÀüùóË•+gooïêêZ¥J•ơë×§yî¹sçÊ—/_¾|ym>|ø˜1cmmm«T©²{÷îÄÄÄñăÇ{yy9::úûû_¿~]sđ›7o¦OŸîåå•;wîâÅ‹>zôÈà—ÿîƯ»k×®5õ\S5°··¯U«Öƒ̃¼y“₫ø7,X°GÍ’%K¶oß₫èÑ£ÿ₫ûoúƒccc5jôäÉ“Of¢)K•*¥MÚ‡ª]»¶¦jÔ2d€ˆˆƒ¿EZ !„˜Ü»wxúTd… gñàæÍ›ÿù矦M›–/_₫ôéÓ³gψˆ8räˆJ¥:ujPPP@@@ûöíß½{·}ûönƯº9::¶hÑBóÜû÷ï7jÔÈÉÉ©Aƒ>yüºu묭­'NœhccóÓO?µoß¾bʼn‰‰ưû÷¿uëVHHÈW_}ué̉%6l¨_¿~»ví®^½ºjƠª«W¯jÙ¡P{ÖÖÖ—/_vss“ö$&&₫ư÷ßåÊ•³³³Ksp\\ÜÍ›7»té¢R©¤Ë—/?}útú¡6îîîjµ@TTÔ_|‘u&ÑÑѹråÊ“'ÏæÍ›Ÿ={æăăăçç—3gÎôG&&&<¸R¥JüλwïÈ•+—aß51´̉¥K‹NˆqçÎÑ)1è£ÏL¦¿CCƠ€Èÿ2÷ÙgŸ˜9s¦´g̀˜16lØ V«K–,Yºté>hzñâ…Í Aƒøç%%%iö|̣øœ9sFFFj6ç̀™ |ụ̀ïß¿×́©Y³&€¸¸¸øøxkkë={JYơéÓÇÍÍíáÇúL*T¨[·núư«W¯¢££“““ƒ‚‚Ú·oŸ#G?ÿüsäÈ‘­[·¾zơªt=CGéׯ_tttHHˆ‡‡‡i4¨p$„BRñññáo‰ÚÛÛ{zz̃¾}€‹‹Ë©S§ÂĂĂoܸqëÖ­k×®iæ|‘xzẓc\>y<SXS/¦ßÀÎÎnÁ‚ß|óM‰%|||ªW¯̃¸qăfÍ¥¿uûúơëÖ­[gvijµZû÷áÖ­[ U«VŒŒ̀Ÿ?úä_½zÅ‹àêêªç§päÈ[[[é<½{÷~ûöíàÁƒ·lÙ̉§OŸ Ÿrï̃½!C†́ÚµËĂĂăÀzæ@̉£Â‘BˆÉƠ¨CwÎ3*›×¯_¿{÷®mÛ¶aaa•+WnذaË–-«U«V±bE₫Hggg)Öæxí <¸]»v¡¡¡‡ [¶l™§§çÑ£GƯƯƯùĂœœœ²Uf-wîÜơêƠ›5kVçÎẃØÑ¯_?₫Qwww++«4#]>}  p–½HµQ¨P¡4{6làÚµk¿aÆ₫ưû;88,]º´wï̃R+/1,z[?áÎ;M4Ù´i“4>Bˆ¾œQ¥è$2uưúơ>H­}õ¼‰ŒŒ¬[·î‰'ÂÂÂ,X0|øpéà4-ˆ¼́Ÿ…ØØØèèè̉¥K&''/^¼xèĐ¡K–,™2e ¤·ªwï̃ƯºuëuëÖuêÔIÚ©éh˜¾µ±±ñöö>~ü8¿óرc*•ÊÇÇGŸàîƯ»¡¡¡^^^̉NM[f†7ÍwíÚƠ½{÷;.Y²$Í­sbXT8~ÂÚµkE§@!Ĥ€••UƯºuÁƯË–èy«ºJ•*~ûí·;Jc¥W¯^  ZµjéïÛ·ïđáĂCCC›7oàñăÇ[¶liĐ A‰%ôù́́́F]¹råƒj®199ùÇ´±±Ñ WOsQcÇ-Z´èÚµkM3ï¦%£Â1c)víÚµqăFѹB1©‚ N<ùÔ©SåË—ˆˆ¯V­Z= •*U*S¦̀¬Y³îܹS¦L™¨¨¨={ö¸ººvé̉%Í‘z̃ªvss›8qbPPPåÊ•5j¤R©ÂĂĂÏœ93bĈråÊ¥?¾gÏ+W®́ÚµëàÁƒW­Z•ơZ‚™™={ö¬Y³~øá‡äÏŸ?((èÛo¿ơđđh̉¤‰³³ó¾}û.^¼8sæLooï4OŒŒŒ¼q㆗—Wú)ÊÛ¶m+Í|D ‚ ÇŒµhÑ«B‘¿*UªŒ9̣»ï¾ûùçŸ ,8zôèéÓ§[YY+V,,,lüøñ¿ụ̈‹»»»¿¿ÿ•+WvîÜ9~üøŸ₫9}!˜Ưă³3gÎ={öL™2åàÁƒÛ¶mswwoĐ ÁäÉ“ơlØËĐ”)SJ–,beeåååµqăF₫Î5ÏÑÑñèÑ£cƌٲeËóçÏ«U«¶~ưú¬×̀̀Û·o_¼xñîƯ;ÍæØ±c?ÿüó9sæ¬[·ÎÖÖ¶\¹r{ö́iܸqú'j†~GFFFFF¦y¨T©RT8–Ê€]hÍɉ'4ÿv×­[wêÔ©lơqôôôŒ}D€˜˜cü'r÷öí©Ù;̣¦ë±÷đúËB̃©& I|—l“+íz]1çbKTÊ«ÍλŸ÷ưôHƠ»Ÿ÷uÑæ„î|“·H…Ê9` Jü}X¢D‰ *lß¾]t"¦ăëëë́́|øđaщQ—.]Nœ8qÿ₫ư Ơáªÿmµ8fL3ç*ó₫A"„d[x8öîÅ̃½¸~À|Œ…Ÿ€Îzœ±„~;xÂ\¹Đ¸14AûöÈ›„B…£Qxzz¦Ù³wï^ÑI£Ót„'æ*ÿĐ¡öÜ`Ơ(x~¢“2®wï°s'vîÄ€°~ư¿Ơª½1ÇÿñÇ… –ÚM̀ƹsçnß¾­Y0 111Y<á-rËD…£QXfó5@·ªÍĐ?ÿÀỊ̈ûá̃}™©uíZÀ÷ßc̣dÑ©S“&M4+Z”ëׯwîܹuëÖæW8®X±bÉ’%)’ÅaYÿöNÿµ¾…ÈBPáH!™øătN{º?–.C¿4;›{ߘ53í¯ÓW_)ằïùđ6)‡mÚ¹B¢ÿ-U%¯6;ïœ{V²̉§û8Æ\x^¢¢‹6'L¿3æÊ«ßưûÑ0³ó÷¾ûÁ\ï£,^¼Xt ¦vñâEÑ)QHHHHHˆè,̀„’‘/¾@º6̉&,X"&&Wúæ íÖöiUJëZP÷Wñi…æ“}G‡„`JÚù±g*ûöA¥Â_ÁÏO‡7—¢TVúŸ‚B̀Ê¿ÿB¥J_5₫̉æP=W¯¦¹ƒm.„Z“˜ŒÄ|5TÏàZ*]ñY¥ 2Ÿjb†¨p$„ΰaH·B.NŸ†Z=l»¿´ăÇ¡VC¿5ƠdïÏ?¡VăăÚ!.x~«ÍXµ={¦:jçNéBˆù£Â‘B>R©đË/©ö¨ƠP«Q¥ ?¤̣ë¯1z´èTM&9™Å?₫à·ß VcàÀTG©T*!Äø¨p$„`×®´ífÍ›ƒ[aß>öȪU¢³5±I“X\¦Œæÿ‹#ÍTÊC† paÑ©BŒŒ GBˆÅ;q-[¦Úṣ$ví’¶ø’rÓ&ÑÙ̃´i,¾vMê×Y¤Ôjđ>¤ÛÖ„˜9*?aúôéQQQÚ¯7HQ˜cÇP«Û̀• j5ªW—v¤™t¦CÑ ÁâÔí·naåÊTÇRíHˆ£Â‘bÁF:lsÔ(¼M»2J“&,°(U«"O¶ùë¯üƒ½zñwơª 1_T8B,ƠÁƒ`›b̃¼4‡ ÆâêƠao/:gââXܯ_úÇƠj¸¹±Mª 1KT8B,̉₫ư¨_Ÿm>z„‚Óű>yRtÎÂuêÄâ6m̉?₫ä ̣çg›T;b~¨p$„X½{ѨÛ|̣îîéâ‡}LŸ.:g9ظ‘Å;vdxÈÿ¡@Ñy’ḷơơU©T*•ªMF(ƯÀ5WW´¨Å­/o T8B,LXXª~‹±±©î°~tçnßf›'N[&Ö¬aqΜ̣ï¿̀¡NdÎËËkƯºu#FŒH³¿víÚAAAY<ñÇ666ªỘåË—Ùñ/_¾0`@±bÅj×®}úôé,N~øđaÿüùóçÍ›·fÍÛ·oÏâà+W®têÔ©@•*U?~bb"€^½z­[·®jƠª¢ßc3AkUB,É®]©f̃yñNNøùç,¾pAtỤ́ѽ;zôH‰?|À©îøôÏ?(ZˆÎ–hÍƯƯ½k×®iv^¼xñäÉ“ơêƠËâ‰111IIIƠ«W/Y²¤´ÓÁÁ!Ăƒăââ*Uªtï̃½öíÛ»¹¹mÙ²¥qăÆ‡öơơMpXXX³fÍJ–,Ù­[7;;»-[¶´mÛö×_ Lđ;wêÖ­›””Ô¦M›bÅ8p`Ô¨QÇÛ¾}»ŸŸŸŸŸ_hhèúijbh¥K—ăÎ;¢S Ÿ°ÿââ2;*>¥R}ú¬–ơÑÇİwÇÅ%‹‹SöïĂÄÄÄÄÄDÓ¼Ö»wï’’’D]i… êÖ­+m~øđaß¾}S¦LÑ4N:5‹çî̃½À´y¡)S¦Xµj•fóöíÛÎÎÎ₫₫₫\®\¹ ¼xñB³_¬X±"Edxp«V­¬¬¬Îœ9#íéƯ»7€½{÷j6;wîœÙsƠ:}q+úß¶>èV5!Äbđƒ5–/O5¿Lj;²8,LtÚróÙg,~₫<‹ï̃ªNJ”(1räÈE‹9;;ç̀™³lÙ²ăÆ{ÿ₫½tÀüùóË•+gooïêêZ¥J•ơë×§yî¹sçÊ—//MœơñÇ3fŒ£££­­m•*Uvï̃˜˜8~üx///GGGÿëׯk~óæÍôéÓ½¼¼rçÎ]¼xñÀÀÀGăˆmÔ¨QPPĐ“'O>yptt4€R|à̀mܸ±`Á‚=>6Z—,Y²}ûöGư÷ßÓùîƯ»k×®5õÜéă={{ûZµj=xđàÍ›7éÏ|èĐ¡ÚµkW®\YÚ3dÈü¤ÄèV5!Ä2đeb³fèÓ'‹cùb‘_¥¤>?ÿœỵ̈ †m̃¼ùŸ₫iÚ´iụ̀åOŸ>={ö́ˆˆˆ#G¨Tª©S§´oß₫Ư»wÛ·oïÖ­›££c‹-4Ͻÿ~£Fœœœ4hà“ǯ[·ÎÚÚzâĉ666?ưôSûöí+V¬˜˜˜Ø¿ÿ[·n…„„|ơƠW—.]¸aÆúơë·k×îêƠ««V­ºzơjÖ}uăîî®V«DEE}ñÅY+W®>>~~~93êÿwóæÍ.]º¨¸?á–/_~úôé4ăr¬­­/_¾́Æơ?NLLüûï¿Ë•+ggg—æ̀‰‰‰ƒ®T©¿óîƯ»råÊeđ÷Ç̉‰ṇ4CÛ|M,ë~¥²ôé“ê&u–ÎeúùiuzKüèµ{?3û}ê¦ÿ/ Ÿ}ö€™3gJ{ÆŒ`Æ jµºdÉ’¥K—₫đáƒæ¡/^ØØØ 4ˆnPPtßù“Çç̀™322R³9gÎåË—ÿ₫½fOÍ5ÄÅÅÅÇÇ[[[÷́ÙSʪOŸ>nnn>ÔÿĂLs«ZrăÆ |êVu“&Ḿ́́\\\¤ºÂËËëܹsé¼yó&€‘#G̣;8`é̉¥Y¼ÄêƠ«'O\±bÅ|ụ̀…‡‡ksE±±±~~~ÖÖÖ7õỐ¡[Ơ†B-„s+ØfEN̉áïS[âÊÔpssûæ›o¤Í)S¦„„„lÚ´©sçÎgΜ±µµµ±IùöŒ \°`ÁI“&YY¥ôûäñ~~~R«¿¿?€.]ºäÈ‘C³§^½z'NœHHHpttT©T'O¼{÷nñâÅ,_¾|ụ̀åé“OLLÔô;̀P«V­ û^EGG'''µoß>G₫ùçÈ‘#[·n}ơêU§Ô#Ï4WíèèÈïÔ£y[23mÚ4Í ñ h®=kGéׯ_tttHHˆ‡‡‡a¯—PáH1w ²øåËOĂb-¾¤,Ở¥èß?%8!!¢2$₫f«½½½§§çíÛ·¸¸¸œ:u*<<üÆ·nƯºvífΉ§§§T5js<7VS/¦ßÀÎÎnÁ‚ß|óM‰%|||ªW¯̃¸qăfÍ¥¿)üúơëÖ­[gviêOưá”]G±µµuuuƠlöîƯûíÛ·ƒ̃²eKŸÔB4×ơêƠ+~g\\ééºuëVBBBDDD```ƠªU###óóÍsîƯ»7dÈ]»vyxx8p €_„³ÆˆY¶ ©[;̉ă§)́ÙSṭrÖ¯+—,ÉnáøÙg4Hô%d‡Íëׯ߽{×¶mÛ°°°Ê•+7lذeË–ƠªU«X±"¤³³³ks¼öÜ®]»ĐĐĐLJ……-[¶̀ÓÓóèѣ¯wrr2xu˜…Bé&ílذ!€k×®¥Ùïîînee•fÀÍÓ§O.\8ëWÉ;w½zơfÍƠ¹sç;vôËhÑË 6ôïßßÁÁaé̉¥½{÷–Zy‰aÑÛJ1_|ƠX¯úöưä3¾₫Å¿ư&:™+P̉¨̃Ç‘I#P†||,:ÿ̀]¿~ưÇRkß›7o"##ëÖ­{âĉ°°°  >\:8M "/»Çg!666::ºté̉ÉÉÉ‹/:tè’%K4sÜđç7Ù­ê»w†xyyI;5ˆéï)ÛØØx{{?~œßýØ1•Jåăă“æàƯ»w·nƯzƯºu¸….5=)3,‹wíÚƠ½{÷;.Y²ÄñS}PáH1S3f¤Úxđ &“äääüÑÆÆF3¨<¾}û><44´yóæ?~¼eË– ”(Q"Í‘UªTđÛo¿úØQ…½zơjƠªUKQcÇ-Z´èÚµk­­­ x$=* !fj̉$k÷e9~<‹gÏ¿üƠªÅâ£GEgcH œû¬uëÖG­S§““Ó_|1zôè·oßj=zôhơêƠ>ÿüóÀÀÀ'O,_¾<_¾|5’ËŸ-[Çkæk\¾|¹´GÓ¾øèÑ#µZ}ÿ₫ữ½{/^́ëëëçççççúàÁÑo³YPC+]º´èˆwîÜ‚e¨][ ¤ü§Ç›µ5;è£gÊ•coë‡₫}˜˜˜˜˜˜h×z÷î]RR’¨+­P¡BƯºu¥Í>́Û·oÊ”)†Ă©S§fñÜƯ»w8pà€6/ÔªU+++«3gÎH{z÷î `ï̃½é.W®\^¼x¡ÙŒ/V¬X‘"E2<ó”)S¬ZµJ³yûömgggé€Î;gö\µN_Ü₫·­ºUMQcÇX¥óih¥A£P₫¤<%J”9rä¢E‹œsæ̀Y¶lÙqăÆ½ÿ^:`₫üùåÊ•³··wuu­R¥Êz®7§æ¹çÎ+_¾|ụ̀åµ9~øđácÆŒqtt´µµ­R¥ÊîƯ»ÇïåååèèèïïưúuÍÁõ¼™>}º——Wîܹ‹/øèÑ#c¼±±±5 ẓäÉ'PSŸ¹C‡Ơ®]»råỂ!C†ˆˆˆHsä»wï®]»Ö¼ys'''Í{{ûZµj=xđàÍ›7éϼqăÆ‚ öèÑC³Y²dÉöíÛ=zôßÿ5Æ[dÉèV5!DQd±¯¯Î§¹}›ÅÙ_Ưd®eKÏ•jq娼yó?ÿüÓ´iỌ́åËŸ>}zö́ÙGQ©TS§N hß¾ư»wï¶oß̃­[7GGÇ-Zh{ÿ₫ưF9995hĐÀ'_·nµµơĉmll~úé§öíÛW¬X111±ÿ₫·nƯ ùꫯ.]º 00pÆ ơë×o×®ƯƠ«WW­ZuơêU©'Ÿ¹»»«ƠjQQQ_|ñEÖGGGçÊ•+O<›7o~ö́™ŸŸ_ÎŒÆ%&&<¸RêYúï̃½ W®\i¶¶¶¾|ù²››ÿô¿ÿ₫»\¹rvvvi‹‹»yóf—.]Tܸ₫€€€åË—Ÿ>}Ú,Güˆ$ºÉÓ Yló5¡û•¦ ƯƠï×W—.́4/ê›}ô©pŸQf¿CƠ¡HơYú¿,̉ÿ́³Ï̀œ9SÚ3f̀6lP«Ơ%K–,]ºô‡4½xñÂÆÆfĐ Aüsƒ‚‚¤ûΟ<>gΜ‘‘‘Í9sæ(_¾üû÷ï5{jÖ¬ ...>>̃ÚÚºgÏRV}úôqss{øđ¡₫ŸX[Ơ’7nàS·ª›4ibggçââ"Ơ^^^çÎÓæucccưüü¬­­õ¼™Åa«W¯>>Ơ«Woܸq³fÍ̉ß~ưúuëÖ­3»4µZmØ÷êÈ‘#¶¶¶®®®Í̃½{¿}ûvđàÁ[¶léÓ§O†O¹wï̃!CvíÚåááqàÀ€€€¬_âÖ­[ U«VŒŒ̀Ÿ?ú÷đ?E@JŒ „…h̉„ÅăÆés¦;X<~¼èë2?Ü´,™ÉpÔâ\raccóúơëwï̃µmÛ6,,¬råÊ 6lÙ²eµjƠ*V¬Èé́́,ÅÚ¯½Áƒ·k×.44ôđáĂaaaË–-óôô>>¼^* !ÊP­‹gÍ̉ódW¯²ØÚZô¥™¥iÓ0a‚è$t÷äÉ“ùóç;V³9}úô¸¸¸6mÚhf拤-[¶¼~ư:³¾́Ÿ…¨¨¨5jLœ8qúô鬬¬êÖ­ î^¶Ä”·ªí́́F]¹råƒj2INN₫ñÇmll4ƒÊÓ¼ôرc‹-ºvíZëOưàU©RÀo¿ưÖ±cGi¬ôêƠ«Tă|Ô·oßáLJ††6õÀăÇ·lÙ̉ Aƒ%Jđz ¨p$„(?çÈ·ßê¬ZÜS%:?^Ñ…cÁ‚'O|êÔ©̣åËGDD„‡‡W«V­G<°··ïÛ·o×®] .qèĐ¡|ụ̀8qbÏ=Mø̃ÿlŸ…J•*•)SfÖ¬YwîÜ)S¦LTTÔ={\]]»đ#ÆÿVớÙ³gÍơĂ? 0 ₫üAAAß~û­‡‡G“&Mœ÷íÛwñâÅ™3gz{{§ybddä7¼¼¼̉/ử¶m[i~" 77·‰'U®\¹Q£F*•*<<ǜ™3#FŒ(W®\ú¬zö́¹råÊ®]»<ØÙÙyƠªU Y/–HtC€BdÿZ²DÏ“MŸÎbºOM2T¥J•đđđ/^üüóÏ÷ïß=zôáÇ­¬¬+V¤H‘_~ùe₫üùvvvW®\ùá‡âââ~₫ùçôçÉîñYÈ™3ç={¾₫úëS§N}ÿư÷GiĐ ÁÉ“'MߢööíÛ/^¼{÷N³9v́Ø-[¶¸»»¯[·nụ̀å...{ö́ŸQßaÍÈèÈÈÈUé\¹r%ưñS¦LY½zµµµuHHÈ’%Kræ̀¹qăÆùóçg˜•££ăÑ£G;uê´eË–ü±T©RG¥ơ©AeÊ.´ÂÓÓ3JƠ,ˆrÅÄÄĐm£à&ơ…̃¿² z²ôÑgÀ×—.y–.­¸ß‡%J”¨P¡B†«'›+___ggçÇ‹NĈºtérâĉû÷ïgø¨_Üû]O-„yăÇḷÓñ™û₫{ÑB ú8Bd́̃=đKÍră+uó÷ß,6ôDÈ$µÔ]Öˆ̀=~üø?₫(\¸°f­srîܹ۷okÖ6$ú£Â‘"cüŒwüt<ºZ°€Å£G‹¾:"KM4ѬhQ®_¿̃¹sçÖ­[›_á¸bÅ%K–(R¤ˆè\̀ơq4<‹í÷@¨£›áºC¢1:8‚>ú̀´jåyăư>$̣G}µG} !rU¶,‹ùµ¥‰R &:BˆQáH‘+~îÎơ?¿`ǧVÇ%†P¯è !F…#!D–øe'~úÉ §ä'Σ¶0BÑ„Y:p€Å#Gä” ²˜†TBˆ¨p$„ÈO,₫¸^°₫îƯ}]„¢pT8BägíZÏmđÓ»»‹¾@BQ&* !2óí·,î̃ƯPgåg>\ô5Bˆ2Ñà„™™3‡ÅkÖê¬42FOOOÑ)B † GBˆœđK»Ô¯oÀó-öö¢/ÓbDEEaà@,Y’²}í¼½ ur#Mç-4÷;±4t«"'üêđpÑÙCàxù†_½U¨ÀâuëD_&!– GBˆlüñ‹}| xb~|ø­[·D_!f‡Ÿ…‡ÿÚ'ÙÑlùí×x­ç₫ÿ“âaÜD6 ¸†›[ªÍ·o{5„X&‹(çÏŸ?ỉ¤Û·oW®\ÙÁÁaëÖ­ưúơ{óæMfÇ'%%}ươ×sçÎ}₫üy­Zµ .¼oß¾V­Z¥/6B ‹ÿ1üâ ƒŸ₫Ơ+7m*úbƒ¯öꢮgè€R̀× †W»n„ñ1vïfq¥JF¼B,–ùQQQË–-swwß»wï²eËöíÛ×£G+W®̀;7³§üñÇ.\h̉¤IxxøÂ… ×®]ûÛo¿˜4i’è«!ÄŒøû³xƠ*c¼ߪe®#cøûˇqX‡3đÓ:̣w½Ë8íüŸ|?Bˆ¡˜á¸iÓ¦äää#FäÏŸ_³gܸqNNN{ö́INÎxê² .øúë¯mlR¦¨¨V­——×ÿ₫÷¿gω¾ B̀Å‘#,₫úkc¼_86l(úz :ªKñ·Đ},ñ\°?¤=àaČ˖5ö{̣Ưw,æG^B Âü dzgÏZYYƠåzJ[[[×®];66VS ¦W°`A|¨V«_¼xaee%•’„½đ3¦ d¤yüXÿsÈ—êDH›³0KçS}ƒo¤8Ñǜ>Æ7ü®YcŒW b1?×!Ä ̀¼pT«ƠÑÑÑ®®®®®®ü₫̉¥K¸ÿ~†Ïj̃¼¹­­íŒ3"""̃¼yóđáĂÉ“'?xđ C‡¢¯‰³ÀÏÑĺWă'j1VÜ/đ­Đw½”c8&Åü\âÆ·h¤iÄ­¿Ư­›±.…Ëdæíg IIIÎÎÎiö;99!u›"ÏÓÓsíÚµ={ö́É­kÛ­[· &hùºiö́Ư»Wô›AŒîÁƒ¢SP»£G |ŒƠvvÿ‹‰1Æ«?n¤¼‡GBL̀Æ»"1} úÆøÆ@¯·±đ'üûîßÉF™ ‰½HBBŒq>ú”,™̣:ë×cÚ4£¼ưÔ[ˆÆ‹NA.̀¼pÔ ¶··O³ßÁÁÀË—/3|V\\ܬY³^¿~íăăS¶lÙØØØ'Ńر£jƠª 4Đæu£¢¢D_:£D‰úŸÄü•,)…ª'OJ¤û 5ˆqăX¼ukîû̀ÚÚúÖ­[jµß¯éßPªT)ÑDˆ’ñë…đ·, mçN›ßd~˰L¿†§Àü ŸIñYy¹,cvŸ9“Åóç÷:±æ_8vèĐÁÊÊjÑ¢E~–-[öôéÓvíÚåÈ‘C³çơë×111Áqvvvµk×¾{÷îÂ… ¥ÂoƯºµxñâœ9súók]B²kį_o¼×á[²̀¬pŒ»’ù ~₫£`Ưë@ÙƯË”aña]VƠ!„¤e棪*Th̀˜1³gÏnÙ²e­Zµî̃½{úôiŸ¾}ûJÇ=ztäÈ‘¡¡¡¦OŸ̃¾}ûÅ‹‡……y{{ÇÆÆ?>99ỷ¤IŸ₫¹è "D±ø¹WŒ2Ơ‹$4”Åf6m?¿œôz¾ø.†bRüoô8SæYiÿÏ?(\Ø(¯=¼yS․¾DÑ…ù·8èƯ»÷ܹsK”(ö́Ù³nƯº­Y³&ưä77·°°°₫ưûÛÛÛ9räÁƒuêÔÙ´iS×®]³ñª„4j×fñ±cºŸÇ²…‚Åü8hZ„ERÜ ÿ& ơÊ„P©éO0Cóôô¤y-SLL Íè–•ÅF₫Í#½TíÚ©ff1“}ô7pĂ ^¸Ê]Æe#½ ́ĂRĂ–ô -{÷ŒtV¯†´’CӦؽÛÀç§Ÿz‹e±ßơ2mq|÷î]ttôéÓ§ïß¿Ÿ””$:Bˆ̃ø©ùå„€Ÿä'0Pô…Ÿúwün¼j¶lß:¬3â%e²ô«¡|Í 3êKbd×âxüøñÅ‹_¼xQJ,GÆ Sʈf‹ư+„PÛCVLØÜX¿>›óÇ4¿áLöѽ!Đd¯eoii#HíÛcëÇ¥¼CB0`€!ON?ơËb¿ëåƠâ8a„ÀÀÀ .đǻ‡öíÛ×¢E‹7N¢~­ö/¿4ö«ñ3E“C8$Åả•sù¡Ü†Áws¼u˨ÉoÙÂâúR„˜?Ë–-Û*ưUÈ“'êc+Erṛ÷ßæ̀ÑiB²¯IÓ°]™́>µF8Â¥¸6jëq¦Œđ}Œ9>F#gNÿó±_s&—Âñưû÷Ë–¥Li[¢D‰E‹]ºtéܹs—.] Ѭڒ””´n1»ÚBL wn“½Tc“¶ÊƯ#<’b¸ûåêƒ-iøQ8åÊ±Øø…#-]Mˆ¡È¥p|üøñ«W¯äÎ{Í5 4°³³`kk°fÍçÏŸ)!$›ø9QŒßá„/B̀id ?B¥7z›æE‡a˜×DMc½̀ӧƾªUY|û¶±_s&—±H‘"‰}||̣çÏŸæÑ|ụ̀•-[€ƒ‘' &„̃óç,îd„ISă ÇvíD_»átGwv0zÆÏ`KDÄIŸƯÍÍ4W¡ñí·Ç„l‘Ká V­Zîܹó₫ưû4}øđáöíÛüüüD§IÉ•+Yܾ½ ^0"Bô%›—B($Å7pçæÇÇ\¹b́ ™5‹ÅsæûƠ1[2*ÇW¬X±ØØØaÆưûï¿̉₫Ç5êñăÇ… ¶ñăYïÆñăY¯GĐO½Å²ØïzºUM1´U«Xܶ­É^Vª͉T5[5(€R|7 sR~đC‡Ls!?üqLù$Á·ªƒ‚‚ØÛÛK1!Dñzơb±ˆ¾%Væøq~äöc9”ÓÄ ÑđøŸNÚ§ÆŒI‰W¬@@€i®¥pavŸúÆ 618!$k‚ ÇÎ;gB”*9YÈË̃¿Ïb¾ KÑ‚ÁVÆ5OX À`«]\XüûïX¿̃4ײ?||R↠qÏp~1oæø‡9!D ~X̀öí&{Y³ĂÏà8D§£1Z¿Ăw¢ÓÑ? ÿW!$k²›ÇñÇ·oß¾{÷nR&Óy4•ưrÛa–P7y@ØTüä|¦ÿ­f¤^38"«qñâÇ3î2ÇẮkâL˜€:­‰C?ơËb¿ëe´rŒZ­^½zơ¼yó̃¿ŸÅạ/ ±\}û²¸MS¾²T58ÄIq5Tă÷ÿđŸ&Gx4Đ÷Œ}ú`È”xî\Œ­×Ù´6k+gÎÔ±p$Ä̉ÈèVơ¶mÛ~øá‡¬«FBˆ¬ñ+lÛ&$¾ÅSÑä°̉`†va—‚!–íуÅưeÊk±µeñíÛ¦|eB”JF-kÖ¬‘bkkkwww•Ù|BŒ‰on8Pt6² ¤Ø­z†S•¥8Ñ8c<,̃²Å”×_ß”¸Y3ܸaÊ'D‘dT8̃½{€µµớÙ³ëƠ«—;wnÑB²£}{¯]kÊWæ₫êLƠzEŒd † Dÿ„ŸFa”èŒtT¡‹-²»!Ù&£[Ơ%K–àééÙ¢E ª Q~ÊFÓ®ÍUªˆ~ á".JqwtNZ‹±X ³"?ÈÙ´úơcñÏ?‹Ê‚ÅQáèççàƠ«W¢!„dßÁƒ,®^ƯÄ/n~mE²íà˜¡7x£ï)ø†âˆS&¿t)‹GŒ0å+¢H2*X²dÉû÷ïó !ÊЬ‹wïâñPJ@³½́û”›¡™gºpú@ă3 Éà>ƒæ7ƯÜÜîܹ3cÆŒ7/^Ü*£…Ă‚ƒƒµ=;!Äd̃½c±³³)_ùí[wê$ú}°MÁfF;ŒĂú®`A¯YƒS^ËŸ¢eË”¸Y3„‡›̣Å QÁ…ă2ÜûöíÛ45!J1r$‹gÎ4ñ‹›ßÈ˜ÍØ,ÅS1Ut:™jRËèfl9oB‚©/¤‹3ùR"„¤Ñ­jBˆR-XÀâñăMüâ|áhëđùXn₫ÄŸRÜơ=]₫ü¯…ÿ—#hRB”Ap‹ă A†˜<–"ĐÍ›,.ZÔô¯̣¤èwÀĐ"):zôÀܹ)ñÍ›(]Ú”/¾{7›:¾];«V¢‚ ÇáÇ‹~!ú¡a1Fó9>Â',Å̉₫诉{ Çè1®…/׬Áôé¢/’ºUMÑO4·vHÙ²©WOô[a ±P‡`ˆg2…~`³ ®…~³¾óÿxD ¬^̀æ¦Dï̃¦}B”Av…ă;wÖ­[÷ôéSÏ=7n\½zơÚ´i³xñbZÆÙùé'‹X́ŸtÜ!Ê £%ü₫ûïÓ§OOJJªR¥››ÛĐ¡CÏ;§yèúơëkÖ¬¡¬ ‘‘o¸UCøS1¿!ƠwpGt Ù³» £°&n†fÏđL÷sY[#)Iൔ-‹¿ÿN‰ÏœŸŸÀ\‘)µ8̃¸qăûï¿Oúø[ăÊ•+RƠ¨qæ̀™­|ó!D¬7z¯¢·?ÿÔÿ2•yE§ •B($ÅÏñ\¯sñµl¬é¯…ï£ÛLïIÍ 1K2*W¬X¡V«Ô¨QĂÅÅåĐ¡CưåÊ•û₫ûïsåÊ`M“@ˆ|аC;6‹àp(f́à$L’≘¨û‰øÂq­~=&uÂÏ đô©é_ŸQá  |ụ̀+W®tss;v́˜fÿÈ‘#;uêàÖ­[¢Ó$„|t˜[/Dô *ˆ}}Ăà;8Ă0Ñéhk¦IñLè1|Ưº,´đ ?éD=j`B̀•Œ Ç(W®€§OŸ^¿~€££c•*U.\@‚ÉW „dlË7o.$…£GYlC*ÅNpN6¸ÁMÿÁ?8ăÅ‹B.„_ùÈä« ¢2*<|øÀÑ£G5·­ëÔ©cmm àåË—\]]E§ItàÖ—ÛµKH æ72F¹fc¶·DK=Î$µ5‹é†5!iȨp,Z´(€“'O†„„üúë¯ơêƠpï̃½Ă‡pww&!D.øÂ1¯2F’då!JqgtNöô›ùđ.è~"~ƯhA>v°€–Ê® 1<-[¶đöíÛ ÄÄÄÈ™3gíÚµŸ?̃¸qcÍ̀µjƠ&!à åª6­ÄDÑïƒAñS+¨ƒ£¤:I±î“‹ vmGhbJB̀†Œ Ç:h:8̣{́íí“’’4sôØÚÚvé̉Et„ $„Å2X8´HÑ?2¦ª‰N'Û6b£÷€®]Ú·g± ñ1Ú´añ¦M¢² Dd4¸ÍúơëCBBNŸ>ưîƯ»5kÆ₫ævss Ο?¿è4 ±x7o²ø³ÏDeqơ*‹Í£ƒă[¼‚̀8 ÿ9t³m¤µ&:uBÇ¢ß BdCF…#€œ9s>|xê GGÇ;vxzzZYɨ}”ËÅwû7·Œ) ‘K~ëc)–öGMÜ ½~­ÜGˆ¹‘Q)öóG÷S¯R3gN///ª ‘‹¨(—Vâđ…£§§È÷Ă0—v= ú;~è'Å«°JdzT¯.ú:à—_XÜ¿¿èl‘ Uc[·n]¼xñâÅ‹Ÿ=Óc©SBˆQ-YÂẫ½u?̃₫ûOô[aP|Ç>è#:ƯyÁK/ă².§à÷́u!C†°xÙ2QY";2*Ûµk§ îƯ»':BH&dñ¢³;;Ñ‚^SØÈÉŸ`½Z¡•.§à Gqăc|₫9‹##&BˆŒÈ¨p2dH›6m,Y²äñăÇ¢Ó!„È×£G,6³Ö°Öÿ$•B))¾‹»ºœ‚ÿS`ăF]Î` |^Đ‘  ÑŒ¡.P @tttÆ ½¼¼\\\T̉À¶‚ƒƒEgJˆ¥â—®['03sç¤X¹%ƒ18)¿¨`ÁŒ‘¼½Y-:BäA¥YÙO<µëßÅẁ—%OOOù'IŒ!&&¦D‰¢³0&₫9¡¿:Ê”ÁµkrH$…}ôf̀₫₫WÅE_¾T`ÿTÔÈ₫'äéÉf}ú÷ë‡ ™aÑ" œöóÿ©'™°ØïzƯª&„ÈÚ©S,®\Yl.RƠhøuV̀ j4¾ù̀‰đĂbøá2„X,ƯªÄ/bF‘yLßHa+¶¶CÊxÇ–hɘÑJ˜4)%^³~~¢/ˆ’BF…ăp,\FÉTl,‹ ˜È‡,₫8ƒ‚% A¡‘èt £-ÚJñ.́Êöó‹eñ5X´HàµlØi±Ûví°u«À\O¦·ª£¢¢öíÛ·qăÆøøøÄÄÄ—/_ΈË6}:‹¿ưVl.f62f!J±ŒŒ‘ÔDM)>„CºŸèƠ+±̉¹3‹·m› !âÉ®pܺu«¿¿Ë–-‡ 6eÊ”gÏÅÇÇ×­[wáÂ…̣ÇCˆÅ™<™Å³f‰Í…/Í`’~êï&h":ƒáoOë̉’7¯è+`ªVe±ĐÖOBÄ“Wá8kÖ¬ &<|ø0Í₫„„„ààà   Ñ b‘^¿fq®\¢³Á±c¢30¨Gx¤ÿIdÈ.RœˆÄl?¿87Hèöm±×²s'‹¿ûNl.„&£ÂñÚµk«V­̉ÄÖÖl \i*Ç 6œ={Vt„XVÜú¿ư&:³UEơ?‰¬ŒÄH)‚)Ù{̣̣å,^¿^́…äÏÏâçÏÅæBˆ`2*—,Y¢V«­¬¬&O|₫üyi¿““ÓÂ… mmm¬^½Zt„XƒY, ZµDg 7₫~®9upÔø ?Iñ÷ø>{Oöơe±ĐÙæ5ø½3fˆÎ†qdT8FFFhÚ´i·nỨR¯>Û¨Q£:uê¸qă†è4 ±0{ö°¸AÑÙ¤J§[7ÑÙè3 ĂD§cx¹‘[ă§ăYnƯ}©zöJ3bdT8ÆÆÆÈl ~OŸ>&!¦ukïØ!:›TmOfP8kÍÍ¢Ó1¼Ø!Å­ÑZt:záºPáƯ;ÑÙ"ˆŒ GÍ’ƒöbT«ƠgΜP²dIÑibã¿gqîܺŸÇ@~ÿ]VéOhÖJ}‡³÷äX̀Ï̃)ÿwßï—‹"£Â±lÙ²NŸ>=lذ'Nhṽ¿ÿرcC† Ñ̃üó„c›0Åßg³ù”đ{ÀCt:ÆÂÏų»³ñL¾IYƯ›7gñ¾}¢³!D•|&G|úôi«V­²¸íèè¸sçÎB… ‰Îô,vás“Y_ ¥ú8§Èăw…”Q‰¸sGt6éöÑOÅÔ ¤̀2ˆª¨Ư3(Â;¼³…­&¶†uö¦æ‘>Tƒ´ñ÷Ç‘#)qx8ê×7ÇŸz¢‹ư®—Q‹£››Û¼yó\]]3|ÔÑÑqö́Ụ̀¯ 1üƒ¢³€¿ÿf±tp\†eRl®U#€\`s&!Idz̉cíĂáïVó½ ±2*T­Z5<<|À€>>>¹sç`ooïííxđàÁ€€Ñ bIø/F~dq̀ld̀¿øWt &2lÉÊq':Ư99±˜ŸŸË!£[ƠéÅÇÇ;88ˆÎ"Û,¶ù˜ÛM+ùƯ§.\̉ÂṚÈ(…n½ )ï° \á™è‹0.éb¨¡ơ‡W­NŸ₫ø4Y|äß}‡iÓXܳ§yưÔ­Ýw½¼Z%III÷îƯ»víÚ½{÷’’t½µAÑO TºåH́2.Kq_ôÑñ+>ÁmŸÖ½;‹}@êAb4`ŒX ÙÑÑу._¾|ƒ zôèÑ Aƒ̣åË6,&&Ftj„X’6mX,ƒéÓ°±̃øưĐOt:FÇOèØ ZOfĂ÷HX»VôE¤àW¨xưZv_£„•¼₫Åoܸ±eË–øÀMÙơáÇ}ûö5kÖlëÖ­¢$Ä"ñ‹óâ‹ùv(…ú¿Jñçø\t:FWµ¥8Ú>•%ƒy4ø¿ưú¹‹N‡“’Qáxö́ÙiÓ¦ñ7¦óäÉ#ÅIIIS¦L¹pá‚è4 ±ß|ĂâÙ³Eg“‚oo2ƒ‘1 ~Fkk‰–R¼ Û²ưüädÑW‚_z3"ÂVt:„˜”Œ ÇuëÖ%&&(^¼øÂ… /]ºtîܹ˗/kºøđaÍ5º|óæÍ:tđơơ­Q£Æ„ ?₫ɧüư÷ßC† ñ÷÷¯\¹r·nƯ₫úë/Ñï!¦̣ÓO,;Vt6)øö&sbÁŒ§₫Nc'XK];´ÓöiEˆN< ²8,Lt6„˜Œ Çóçϰ³³[½zu£F́́́ØÚÚÖ¯_íÚµöööÎ;§Ă™çÏŸ?ỉ¤Û·oW®\ÙÁÁaëÖ­ưúơ{óæMO9tèP—.]:”?~__ß‹/öèÑă<&#ĸø(ụ̀‰Î†9sFt†slœ‡%tpÔ ß¼|ă†èlRđw«iùAbQdT8ÚÚÚ(S¦LÁ‚Ó<”/_¾råʰÎ~_«¨¨¨eË–¹»»ïƯ»wÙ²eûöíëѣǕ+WæÎ›ÙS^¾|ùí·ßÚØØ¬]»ö?₫X¶lÙ† ræ̀9ỵädÙÜ+!ÄXJ—f±<¦o4?üÈKR-ù?JqETÔê92[xPĂ–»A˜¥pQ:¾¾¾îܹó₫ưû4%&&̃¹s:­U½iÓ¦äää#FäÏŸ_³gܸqNNN{ö́ɬ ܺuk\\Ü€¾ụ̈KÍråÊ5ỉäéÓ§ó+Wb–øy«UMê×̃6c³;ÁI3)̀hŒ–⋸¨Ơs||X,›Â`³9?^t6„˜Œ Ç1cÆ+V,66vøđá=’ö?~üxäÈ‘ÿư÷Ÿ••U```vO{ö́Y++«ºuëJ{¬­­k×®›ÙP›cÇ©TªÖ©×“3gNTTTụ̀åE¿O„Ó°¸Ö½ĐŒŸÈ FÆX²( Åđ {O¾{Wtú̀¤I,5Kt6„˜àÉĐ̀o:998tèбcÇ<<<ÜÜÜ>}zëÖ-Í ‡•+WJ­€ÚP«ƠÑÑÑ®®®i–À.]º4€û÷ïWªT)ư³®^½êââR @sçÎ]¼xñÅ‹_|ñEưúơíøÉ»1K;³xËÑÙ0üj3˜‹GRƠE§`j;°CZ˜»ZÇyÑéÎÙ™Íơô)ÜÜD'Dˆñ .d²@bbbdddqqq²¹r@BBBRR’³³sư ơÙ³ Öøzÿ₫ư«W¯J•*5uêÔ 6Hû‹-º`Á‚2eÊhóºiö́Ư»×øo'́Áƒl6ŸÈ¿t¬fƯß¶¥v÷®ŒÓÈÖG¿Ëa>:jư¤uL¼́.Ḳ̌#¿ôḯ.hóÏ,_«V»Û₫ïÚ5uîÜ¢/"EHˆm—.)̣7~»y³¥,>n7n,:¹P₫̣ Ỷ ÖŒÈæi–À~ụ̀eú§¼zơ @ttô“'OfÏ]·nƯ·oßnÙ²%88xøđá¡¡¡Ú´;Zæú•€²W­2„Å ÈöZ䙘öYñk¨ŒÉ72¹n"ĐAêåyºÄé.ẹ̀‰' (Óú́Ä ôï/ú R”(.s?̃Vÿ2‰A¤ÿZOßBd!ƒ 2êùU*UBBBưñññøØî˜†íÇÁr³fÍ ø8YÜ!C>|¸uëÖƯ»w·oß^́›Fˆ±³xøpÑÙd́‹/Dg ·Ă8,:Á6a“ *Mü¾útáØ¨‹×®•Oá ^½„ƒSZ@·oOµT'!fIpá8ÜÈ_N666NNNé[ăââHă¬yööö¶¶¶*•Êßߟß_¿~ư­[·̃Í,b„ǰhQÑÙ¤ÂÏßJ#c,ƯÉ“¢3Heé̉ÿJ•JihlÛjµè„12ª6ww÷ØØXM¥(ÑôªqwÏxÑüùóçÈ‘C¥Rñ;5w¨iÂ.b®øiø1̀2ÀÏÁ¢ôÂñ-̃J1¿Ÿ¥Yˆ…R<ƽơdTVæÿ-JH*̣ú'æ̀™=zT­ZƠ;sÙ=g½zơ’’’?.íQ«ƠGuqqÑ̀™¿¿\\ÜÍ›7ù¹{¾0ƒûd„dèÊWÔnffSá ÇâÅEg£Ÿ_ñ«[̣1C1TC̣é'Ô©#:åLÍ™ĂâQ£DgCˆ‘ɨpÔTươ×óçÏ“2—ƯÓvèĐÁÊÊjÑ¢E~–-[öôéÓvíÚåÈ‘C³çơë×111̉¸È6mÚ˜4i’4́úï¿ÿ^±b…““S~q{B̀¿ üW_‰Î&­ØXÑ¿fL34HÅÁ₫¸ÛŸ8oj̃½[tĂâùóEgCˆ‘ɨpüå—_ÔFèR¨P¡1cÆÜ¹s§eË–S¦LéÙ³çüùó}||úöeË|=z´qăÆ Đlzyy5ệåË74hPÏ=;wîü₫ưû   ¼yó~Ÿ1‚¯¿fñúơ¢³É”ƒƒè ôvWE§ ;Á´l…O­÷,Ë…%|¿§₫ !Æ$£éx¤±îíÛ·oÖ¬™-¿¨~z÷î/_¾;v„……,X°[·n#FŒpẸ̀+¨ÿ₫nnnkÖ¬9uꔋ‹K½zơ†êáá!úM"ÄâpËH)¾ƒ#á•[ˆë®}âh₫aăFp“́ÊÁlyÎÖ­qö¬è„1ööö/_¾twwŸ6m•¡û·hÑ¢E‹™=Ú´iÓ¦M›¦ÙÙ®]»vrZrcáZߢEo3Ó2§‘1ü {}ĐGt:âuC·uHù€WaUOô‘ªVe1? !æGF·ª5Ë@;88¼j$„deùŕ°!|áX£†èlôĂwp´ä‘1’µ`KIöB¯O]²¤è|³ÂÏđ»q£èl1•h={ö´±±¹}ûö5kŒÑÙ‘’~j̉R¥Dg“Ë—Eg`8üj?ø‰NGiøg~yؼ™Å]>5£9!Ê¥’U‰¶fÍ3fptt̀Ÿ?™5BCCE§ù ´ä e‰‰Q̃c_|éŸëƠ«đñPZü¯9ưºJEË^Z.€r½ÓZ†eư‘²Loô^™ ©£ùèÑøñGѹ©?zEü[%†b±ßơ2jq¼yófÈÇ₫UqqqÑÑÑ·2":MB̀ ÿ‹O~U#¯ysÑ+\E§ ü-û•X™Ơ¡|‹¸üVøùg,:BŒCF…ă’%K¤y !¦ÀÏÂÓëS=̀DX´ˆÅJs¥˜:8̣J£´ïÂ.­Ă¶—aĂX¼x±èl1ª>÷q(ZƠªU7nlÀéx!ăçư^¹R÷óÍ=,îÔIt6úá;8öE_=Îdnvb§¼4ñHŒlúO¤¼yÙ|ơ·oăóÏE'Dˆ¡É¨p´¶¶àää´bÅ %F%,Lt†Ă©. Y6±/À–rưÄ2}ú`ÅÇNO _>ѹ§uवl[¶ÄµOMOIˆâÈèVơ—_~  `Á‚T5b ü̉‚«V‰ÎÆü%!Û+¦Z₫̃}0‚3=®G¯] ù©PÅׯ‹Î†#Qá8lØ0—›7o=zTt.„X~í ¾³£,Uª$:Ăñ­A•ÖR,•â!’éqµk³˜ïh!'üÓ¯¿ê~BäIFm{sçÎ-P ÀóçÏûơëW¦Lww÷ §ă Î₫¹ !©ñk¢ñ$rrđ ‹»w~ă¸÷FoÑ阹Îđ¹jV¯N‰ûơKµ0!f@F…ă¾}û¤øêƠ«W¯^!æ«eKÿù§èl2ÆßäoQ*?=!ÚˆÑY·C»­Ø*:#BHdt«b:ül&E‹Î&cü­HggÑÙèg5VKq~äu6¿ Û2=®U+Ñ™~Újöi§êKLˆQ‹ă AƒD§@ˆe˜=›Å#GÎ&S´ö†¥©‚*á/M|Çk¡Vuï;Sâ5käÙƯ£ëé¸a~ÿ]tB„¼–4» Q̀’ƒ YMJ³xqüÉ̉'?zi±A/x]¶ÍØcGÉ®½{Y :›¬<~,:"ˆ́¤8qÁ7AËxUÊyóX<~¼îç!DVdT8.Y²D­V[YYM<ùüùó̉~''§… ÚÚÚXÍOr@É.~*¹NߘFîÜ¢30œ²(+:ǿ_fKdÔ=Pö J¬¸ïØ·oEgCˆ!ȨpŒŒŒĐ´iÓnƯºÙÙÙñ5jÔ¨N:nܸ!:MB”Œco/:›Lưû/‹•̃Á1áRLµQơ¥ø(2Z–ÿ‚ظQt¾Yáÿ:S”„|Œ ÇØØX™MiáááàéÓ§¢Ó$D±¾ư–ÅÓ¦‰Î&+üÈ¥©¦‘1:h†fR¼;D§£Ç…°ëÀ₫ư¢³!ÄdT8zzzȰ£Z­>sæ €’%KN“Å3‡Å“&‰Î&+üíG… „ÈÔøCá(:eØ 6̃¿ ÚdpDé̉¢sÔV}Ö~={DgCˆ̃dT8–-[ÀéÓ§‡ vâÄ ÍÎû÷ï;vlÈ!ÂÑÛÛ[t„(ÓåË,ΛWt6Ÿpíè ˆPÖ°₫Ä|yäïV7m*:Bô&£Â±ÿ₫nnnöíÛ×§OÍÎ̃½{÷íÛ÷ÀiYBBtÔ›»IúóÏ¢³±D¾đ‚’´E[)‚!iæ{0đ=ä'u}BOF…£››Û¼yó\]3ä̀ÑÑqö́Ù… &!Êtá‹»vMV>|`q»v¢³Ñϰ{“ÔÁ1[¶b«#8íĂűX̃«‘zÇáĂEgCˆ~dT8¨Zµjxxø€|||rçÎ À̃̃̃ÛÛ;00đàÁƒ̣vùZÁÆgȼjDê2@éCªidŒ>J‚ujÏjoÙ¯IËK[¸Pt6„èG%çuüâăăDg‘m»đ9‰‰‰ÉlZÁø5©eü#¯Q·.~œƒEöɦÈ́£W½ój(äbd#‘̃Hé×^%îàNª‡óæÅ³g)±¸(Z₫Ô/{÷Râ7àé)*_b0û]/¯Ç4”X5Bôtô¨₫ç æÀ ^Rƒ˜´óƯcb´:£8»w³¸ysÑÙ¢Á…ă‹́ư¢4|?Áơëu?ÑCeT‚"ñĂbæbnªÇ”³~ €2eX-:Bô øVµgöÛëåß2l±Í×D¦·ªuŸÏ·vmÅ´>føÑïÂ.iż„ ÀÑi*RV·û¥+Ÿ.ªÓ₫§~Đ „„¤Ä?ư„‘#…äK Æb¿ëe}«¢¯ƒY\£†èl>ŸôNé#cVb¥ÓÈYqßS HÈø Û·E§ùi‹³xÔ(ÑÙ¢+* 1kü’g|7+¹2§!ƠüZy9‘St:JP)æ—"TºwïDg@ˆNlD'B¥R}₫ùç*T(W®\eoo%­X₫£ßí̉¢y¿â×@ÎQÙ2"#ư‹©R§O›>±́₫Ô7k†°°”xëV´m«ưS‰¼X́w½àÇ2eÊ”)S¦k×®^¾|yåÊ©|ụ̀%€/^9räÈ‘#¬­­=<E₫Ó&ÝÜND.ó8*púFùóăÉÅe"ÍGŸé¤ƒDo¼·Ơ«³™œL₫OGçŸúI“0ăcƯ;n~øÁĉ}Ýw½|GUBtÁLVÔäÂRƠhNê¡è̀MâhD@o®éöí¢ÔÖôé,5Kt6„h GB̀Ë×_³xëVÑÙèBéCàÖ€Ơî´`ŒÁíĂ>)n„F@êÂqåÊlŸQ~Î)~ú,BäLpÇPåôe&„Od$‹{+|̣ ¬âÎè,:sS夸î`+±@IăćÛ‡²eSâF#:!B´ ¸pôđđưbF6eñ¦M¢³É¾Hé…ă1‚™ °@OÇôIP̀°4Ê”añÿ₫':B´C·ª 1#{ö°¸CÑÙd_8z{‹Î†ÈÛ|̀—âɘ 5kNJG£F±øûïEgCˆ¨p$Ä\lf“N£IÑÙdϳg¢30D$Jq ´Ùr‚“ÿƒR5SoÙ":»l˜7ÅS¦ˆÎ†-PáHˆ¹à×̀ ÜÜDg Ÿå`ëÇÑÈăÙ‹½RÜĐ«{LQăcz4Øưû¢³!äS¨p$„vơ*‹•̃Á‘Ó-E§c¶ª¢ª_õTñ6”`/«SM̃Oˆ@®\, !™<ø»w‡öÙg¯^½̉́Œ–«ÏHµjƠÄæLˆ¬å̀©ÿ9Lẹ́e+½ƒ#?2¦>ê‹NÇüùĂ_Sơ.Ư¿_tjÙ¶w/ü?^M£F8G}e‰\ .óæÍûøñăsçÎă~Jzö́™ÅS¢¢¢ÄæLˆ¼tæµ[²D÷óbN#c®ƒ†6˜Zôÿa<Æÿ :!]ñ}LΟ !™|«º’»3" |w®₫ưu? |áXª”èlˆ̉¬›C`ÂLÑÙè‡ƠöË/¢³!$‚ Ço¿ư¶K—.ÅË;·fgî,‰~Ç‘“Ư»Yœ'èlt/:y„GRÜ ½ô8ÑƯsi2íßK¶ñóh &:B2!øVu|èïïàâÅ‹¢ßB¢ys?~,:½*$:ưĐÈQáP4qÀ!\ô¬\‰¯¾Z¶å̀‰÷ïSâGP €è„IGFó8ÚÚÚÖ¯_¿~}êQNˆNlmEgm.°Xéù‘1ƠQ]t:„"s©ÂÇèàAÑyéâĐ!ˆÎ†ŒÈ¨ptuu Öl&''?ỵ$))It^„ÈßܸfèltaN#c₫‡ÿ‰NÁr Ä@)9At6z¨QƒÅ‘‘¢³!$#2*5^¿~=õ¼-ZT¨P¡fÍåË—õ¼ùœ9sâͦ'!†Âwṕ̃]t6ºà Ç%Dgc ¶P^Ó¯̉-Æb)8Ct6ú>œÅS¦ˆÎ†täU8={¶aÆ˖-»yó¦fÇ>ܺukÅ7>OS"á;̉·l):½y#:¹gsOû èt,‘ܤøfiÀÚµ¢“̉Å‚,₫₫{ÑÙ’Œ Çøøø1cÆ<}ú4ĂGŸ|øë¯¿N“HHœ=Ëb¥wpÜ”g“W@ÑéX¢²(+Åÿh ¯#GD'¥#"CäLF…ă•+WØÙÙ­Y³¦ÿ₫>>>nnñ̃̃}ûö]·nf–G©‡ ơ—IX˜èltdN#cb­iuañ&c²œ/:=”.Íâ'ODgCHj2*õ¼ ÀÏϯ4ÿCđđđ¨^½:h½AB4₫ú‹ÅMˆÎFG|áX¬˜èl Ä®¢S°\߃u \0Bt6ú™>щΆŒ G̀æßINN`mm-:ABD›7޼B‰4ѱ̉]ë†F#cẠ̈‚—Ÿª¬Z%:#MœÈâÑÙ‘Qáèéé à́Ù³ÿưw‡®]»ÀĂĂCt„ˆ6z4‹ÛưŸ÷Ùg¢3Đ­#i‡È(ù¤|y>,:B>¼ä Ï××÷Ô©Sï̃½ëÙ³g=jÖ¬™/_¾'Oœ8qbíÚµoß¾Ơ#:MB„ºÇ¦}QèâÔ§O³Xéù5cJ£´g"ú*¶Hß»\Àñă¢3̉Ư¡CÈ›7%€Z-:!BȪṕÛ·ï®]»îƯ»¿xñâÅ‹§9 hÑ¢ưúơ&!BñĂb”¹¨†9Œ‰-O # ±p†iâîk¡È¹®Ô]–È’ŒnUÛÙÙưôÓO…ù ¬8… úé§Ÿ4c« ±\·o³¸reÑÙè/3ù¡W"(":‚¡*Å뺉ÎF?K–°¸cGÑÙ@V…#€²eˆ…… 6¬\¹rỵä'OråÊ :tÏ=åÊ•Óù̀›7oîĐ¡ƒ¯¯o5&L˜đüùsíŸûđáĂ/¿ür̀˜1¢ßbñªWg±ÂÿAÍ*ô«°JidŒLÔzʆÈLÚ­àNưû³xófÑÙ@V·ª5lmmqBt6zá祣ɉ1„6gq ÔÁ<~,:bñ̀¿p<{ö¬••UƯºu¥=ÖÖÖµk×½páBOLLL;v¬‹‹Ë¸qăD_!©I³t(Ó®],Î[t6RUE§@˜fÙ„pA3‰ẃ‹k˜O L”Ề GµZíêêêzbͪ†÷ïßÏ⹿ụ̈Kddä?üàèè(ú:ˆÅă›7l I±«¥x¨íTN ₫3Ûñ¢̉]­Z, ±x²cX IIIÎÎÎiö;99xö́YfO¼té̉¯¿₫Ú­[·êƠ«_»v-»¯«Y‡·wï^Ño1ºé̀%¸1Uª &Fôµêîí[đ™&Hˆ‰ùOtFº›_h>r¥Ä5cjÆ@ÁŸ‹¹qv^0?OÙ…YưbŒ2 °ñ~êyC‡ºụ̈‹³&î̃=îûïcMđ¢„׸qcÑ)È…™õ¼`ooŸf¿fØÍË—/3{ÖØ±c‹-úÍ7ßèöºQQQ¢/ˆQ¢D ĂŸ”?̉«—Q^„ø¥¶¿ù&·¢/ç2.K±¢/Ä\yE"̣ằ<1%b ×é2a‚~áBụ̈KJ¼năÚµt̀Ổ­§o!²2½Uµoß¾7ÆÇÇ'&&fVá}’³³³J¥JHHH³_3½¦Ư1½Ù³g?xđ`Μ94ß8‘…‰Y¬äµw5ø‘1M›Î†˜1“\Àz¨':!½Tá†́ïØ!:bÁd×â¸uëÖE‹=|øP³Y½zuGGGÿ^½z :T¥Reị̈llœœœ̉×qqq¤qÖ¼3gÎlذaĐ Aåùæ åÜ91‡…IøµoíøŸw|Ơ ^9ÜL è2j”è$ æäIØ|üÆnÓ†–®&ÂÈ«ÅqÖ¬Y&LªFIBBBpppPPçtwwƠT’˜˜ÍCé¿uë€Å‹{~Ô¶m[₫ù§§§góæÍµzUB …Eỵ¤èl )Â+­°¶Ón¯h†=ù4ÀØ:¨#:'ƯY[§ÚLw#‘Q‹ăµk×V­Z¥‰­­­“>.I&µ2nذ¡Y³f•³¹>o½zơ¢¢¢?̃¬Y3͵Z}ôèQ_ß –¢*^¼¸t¤ÆË—/Oœ8Q¨P!__ß ˆ~Ÿˆ…yÿÅʼnÎF_çϳxà@ÑÙèg1Kq™weD§C̉É• @ÇMèôGÊc8¦Ïù„Û³M>.NT£.^±H2*—,Y¢V«­¬¬&NœØ®]» *hö;99-\¸ṕرoß¾]½zuv Ç:,Y²dÑ¢EuêÔÑŒ‰Y¶lÙÓ§Os|\́́ơë×?Α#G‘"EjÖ¬Y³fM₫ ×®];qâD¥J•~üñGÑo±0| ÷¯¿ÎƳZKñSǃV"U†>+°âă*âÓ1}&‰ÎHGü¸̃K—DgC,•ŒnUGFFhÚ´i·nỬŒJiÔ¨Q:uܸq#»§-T¨Đ˜1cîܹӲeË)S¦ốÙs₫üù>>>}ûö•9zôhăÆ  ú= $µƯ»Y¨ûydƒÛS¼¸èl äs|.:’‰V­,ç~t&c²èœô2r$‹Ç ±H2*ccc‘ù¼>}ªĂ™{÷î=wîÜ%J„……={ö¬[·nkÖ¬I?¹#!̣²p!‹;v I% aRLSË×Ç₫Åî±}gpFtZºûé'Ó=0"„ŒnU{zz^¼xñ́Ù³éR«ƠgΜP²dIƯÑ¢E‹-ZdöhÓ¦M›f>/ˆÍËH>œÅü¡ûyd‰Ÿ[D‰ø1đ‰Îˆd¤Q#ÍÿOÔdµc Ôø€¢3Ó]™2¸z5%>pơë‹NˆXµ8–-[ÀéÓ§‡ vâÄ ÍÎû÷ï;vlÈ!ÂÑÛÛ[t„˜“Ú\ZÇ׬a±̉GǼû€́@¾Ê]Qn}ÙD$NG/üä ˆÎ†X•Z6“A=}ú´U«VYÜŒvttܹsg¡B…Dgú ÔBi™bbb ¶†„½=›oăüyT¬(úâ  Z5œ>ËæT`sʪ¡6äGO ËÙ/_˜> “§¥́ @ÀA4Èé…|ôüŒÆoßj†S³Øïzµ8º¹¹Í›7ÏƠƠ5ĂGgÏ-ÿª‘Ăàgi3‹ª`U£̉½Æk)nzœ‰ßÇÑû“¦³}‡pHtZz eñ—_ΆXªV­>`ÀŸÜ¹s°··÷öö sC̀À ¬â(x¢7w÷T›õˆNˆX±±±2›×ÀĂĂ@ëÊ¢xoß²ØËKt6†´k‹ííEgc UQUt Dk,‰é̃̉Öaœ^øƠIi2pb2*===dØ‹Q­VkÖª.Y²¤è4 1~( Í®!W«ÁzËPG%áº/Fêo ƈÎOwM›²82Rt6ÄȨp,[¶,€Ó§O6́ÄÇ^¾÷ïß?v́Ø!C4…£···è4 1“'Ỳ÷åW>₫ö¿â…ñ#cº£»g"¦Å¯Û Á̉¹˜+:?½L›Æâîô¯’™Œ Ç₫ưû»¹¹Ø·o_Ÿ>}4;{÷îƯ·oßptt¤ô~ơ„dˆŸèÛ́æƠàgpTúO0? Qª×)KWAißFl–î&Mb1?£!Æ £ÂÑÍÍm̃¼y®®®>êèè8{ö́B… ‰N“#X¸Åóç‹ÎÆÀfÍb1[“*U*ÍÓ8-Å]ĐEt~ziƯÅíډΆ˜5ªV­>`ÀŸÜ¹s°··÷öö ̉C:~ôÄĤ‹Uªàôiq±"X÷G5²ư(Ÿ̃Ó7o¦ÄÛ·§jƒ$Æ`±ßơ6úŸÂP~₫¸ÖfÛ¶m‹- @‰U#!Ù³g‹‹áñc¤Ùwꣾ&ö‚׿øWt–:²²‚›ÄàüyÖ‘…Œú8¶ûØ¡÷̃½{¢s!Ä$₫æúTi~ë›Ó§ơ?‡,ü‡ÿ¤¸%ZN‡è„ÿÛåĐ!Íÿë¡´ï‰NQ/üß•*‰Î†˜)C† iÓ¦ €%K–Ff‹`΋ơë¥Gú£ÿR,ƠÄĂ1ügü,:Wu邯¾J‰¯\ 1;²\¡,vRP’©€Í}̉o/¢âÇ™• Hµbµâ¸Âơ9kâ 爖Ï,ĐäÓ2ÿéS=¤ådạ̀üèç̀Á·ß¦ÄÍ!4TtBæÈb¿ëéV5!&×¶-‹§M±̀etïà(Uļ5›WơGü¨Ç™;–Å»w‹Î†˜µ8J+Çd-₫üeʔə3§è”3f±…mÛ, ¹Ñ̀®Rjˆ*ƒ2®h,Ïf'’±.]°qcJƒÏ>ằn££l?ú¡C±hQJ¬ô&y²Øïzơq\¼x±ö{xxüôÓO¥Íqbæzödqÿ₫¢³!Ÿö•KÍÁèѬpœ;—•W€r(w)`ÁŒ®~ù…]Ù’%T8ƒQê­ê[·nuï̃=>>^t"„dÓêƠ,^²Dt6Æ̣¿ÿ±¸sgÑÙè‡Ó=D§CôƯėnbà˸,Å#1Rt®ziƯÅæÛ)†˜Œ Ç~ưú5ỉDçÍ›·U«V hß¾}‘"E4;«T©̉·oßÖ­[çË—À‹/VóßÁ„Èßĉ,vwñ•>ơ÷Ü1)₫nu(<®d;7­Đw߉Ά˜ Ư»w¿zơ*€::thΜ9#Gœ1cÆ₫ưûüư÷ß-Z´˜={ö₫ưû«V­ àĉ¢³&$;fÎdñ#e¯›5¾‡oßQ´Â(,:b ²øåË4¾Á)n¢sƠKƒ,1Ct6Ä,Ȩp\°`Áưû÷óçÏÿư÷ßÛÚÚJû­­­G]´hÑ„„„E‹È;÷رcüóÏ?¢³&DküŸüÍ›‹Î†he#6J1up4ü8¾y ¹̣"¯´¹{´;©íßÏâI“t?! .le•6+•JU¨P!—/§ô>É“'€çÏi ¢|'£]»DgcD| N£F¢³ÑßÁq8†‹N‡Hưú,₫1ƒiwîă¾ósô(¿.Ơ¬Y¢³!Ê'£Âñơë×®^½zưúơ4Ư¹sçÊ•+¤ÉƒöîƯ @ÓÙ‘ bñǾ¼æÿ"VzÇó8/:bdï̃¥ßg;°U2÷aŸè,uwđ ‹Ç Q>•+WđáÇ=z,X°àܹs÷îƯ»|ụ̀²e˺víúæÍ*T4õ<E‹5!Ú™:•Åaa¢³1.₫Öß²£h¹‘[t Ä øe?3r÷¤¸1‹NW/uë²xÎÑÙ…“Qá8v́X¯^½ éÚµkƒ :v́8õ¼gϰ±±éÑ£€‹W¦oÓ¦è¬ ÑÂôé,æ{囩ŒZp‰og …·’4øn?ư”₫q88ÂQÚ<€¢3ÖƯáĂ,––"$D72*‹/’?₫ Í‘#ÇÔ©S+s#~ùå—M›*»ë ±“'³xŸ‚ïye—ŸŸè ôĂwp¤‘1æ¦Cÿ˜ñê‚|OÇhđ©3ÊZ­Z,7Ot6DÉdT8đơơ=pàÀøñă+T¨àää W®\Ÿ₫y—.]öïßßáăÏyÙ²e‡ ²råJÙ®:HóĂ,®WOt6FÇ')½ƒ#ßÈäÑé£Édn,G8̣Ÿû!¨îc±̉0‰X2Z«:½øøx{{{¿ä­X́¢¼́hBëIDATú•$ăUkÍiÍf-,Ⱦ…•~¹Ú/[,Û‹IV<<g̣ơ9»ÂUÚLÿÏ@A}8u*%?#FˆNHá,ö»^^-’¨¨¨}ûö…††¾~ư:11ñeº Z Q†Ù³ỲwP7_f3¯ùœ‘â¡*:b|7Çß~Ëđ¸ØÁNÚ<£¢“ÖƯÉ“,©́ʼnH²+·nƯêïïß²eËaÆM™2åÙ³gñññuëÖ]¸p¡œG ÉØ¸q,æ;¨[Ñè‡:8¿~ưXœnp ?¼º.êNZ/U«²xáBÑÙe’Wá8kÖ¬ &<|ø0Í₫„„„ààà ~&I»>ôüđê :i½đóWf2œ¬È¨p\²d‰Z­¶²²đ‘â…PđĐ’?ÿd1 ‘!Ù%£ÂÑÓÓ@†½Ơjơ™3g”,YRt„há÷ßY¼b…èlL„Ÿú»Y3ÑÙˆÜD§@Œ¬N?~œÅWqU‡CÙ-u²¸½²ÛO‰©É¨p,[¶,€Ó§O6́ĉ”?÷ïß¿́ر!C†h GoooÑị)ü÷Đw߉ΆdÛÏøYé>µùă—’ç›Í3̉l­ù±PpÁÅ‹Y¼UÁ=6‰2Z9æéÓ§­ZµÊâf´££ăÎ; *$:ÓO°ØÙäIʶTŒÆ_±)âzö̀l6eeȃ<ñˆ×ÄY/#QĐ̣!$Ùù™M³r?ú3X\¥ NŸ̉X́w½ŒZƯÜÜæÍ›çêêᣳgÏ–ƠH,Ư石x©‚ç{Ë.sêà(U„¤× ½¤¸+ºêq&Á&Ndñ_‰Î†(‡Œ GU«V 0`€OîܹØÛÛ{{{ec÷n4m*:#Ó‘îơÙÛ#^É v½Ñû7¤Üh@DUTƠæYʽ_IàƠ+8:¦Ä~~ŸlûßMCJ»z•·UNÛ*ø./—₫Å 89‰NH9,ö»^^-i(±j$–+:U€EUË–±xºÂ“HU#-«F¢xỵ°˜Ÿ ;ßă{)₫ËVÙwyù{Î΢³!J`#:æÍ›7çÏŸ¿råÊ“'O4mnnnåÊ•«X±¢½½½è́ù_º$:“â;8!:BtP¨>Ô₫đ%X"-)ä[¸%útT/uwŒk×àă£ă©ˆ…Eáø₫ưû 6,Y²äÙ³géµ³³kƯºơđáĂ]\\DgJH&øE”//:!“ẓDt†0)₫߈N‡˜Đôél®₫Ę1Ỹư¥Â1Ñïñ>'r¾EFÂË+%.SÆr¦‚ :ßÇñ̉¥KÇôèQÖ‡¹ºº†„„T¨PAl¶Ú°Ø~ï(ôô)̣ZĐZ#ÏŸC ¡zuœ<):!=TDÅ‹¸¨‰`;-ŸH}ÍôSœ3'̃½ûäá¡m¶xŸ–37É“µ5’“Sâ?₫@Ç¢R‹ư®ÜÇñÙ³g}ûö嫯9r*TÈÛÛ»P¡B9räà́ׯßóO- Eˆüô3̃̃U5"ơ}j¥wp”ªFÚWÄÜđ•3×ÍùÍp„‹Î[wII,îÔIt6D̃k×®‹‹ÓÄ 4X»víßÿ}øđáíÛ·>|øêƠ«¿ÿ₫{£F4¼|ùrÍ5b&$ụ̈0×®‰ÎÆÔø%(üưEgc ÅPLt Ää4aqLŒ6Ïx‰—R̀/*£Dü|wƒ‹Î†È˜àÂQZZ°]»v‹-̣óóSñ·ü€/¿üráÂ…?¶›KÇ" Há«® ˜ü€¤˜V´D|ƒùäÉÚ<ẴïÙB¸“¡Ơ³äéàAó ’†àÂñ̃½{`èĐ¡Y6|xÊṛwï̃›0!iq³Y°ÍÎE'$?†:“u敟‡¯%ZN‡2~<‹ẃĐ̣I °@ᘢ‡W:Äb æG´%ë•c‘µêƠYüÏ?ºŸÇ,¸¹‰Î@?ü}ji59bqø̃&|sú§lÅV)¶ṚkñmZÏÄ‚Èbđwï̃EDDd}̀›7oD§Igöl—*…B…D'$ÀÏ?³Xé÷©7a“—C9ÑéA¬­YœÚ¢-¿yG•{Ï:16Kƒ6mh>p’–, ǧOŸö́ÙSt„dǸq,¾¥ÔƠÆôÄ·Èôï/:B ¢T)DGëđ¼'x’ù4q]ÔUî kkkÔ¨Áz¡Œ…Ÿ~‘·¨"L³f,––)³û ®Hqi”}1º«XŸÎ6ù›×Ä’YJá¸yóæ:øúúÖ¨Qc„ ÏŸ?Ïúø7õ¬Zµªyóæ*T¨U«VŸ>}Ṇ3ËT«‹ù ̣̉đ_¦K^kÂ))Vnă1–—/³ûŒ²(ë Ois ƈ¾ƯñăËgÍ ‘‹(çÏŸ?ỉ¤Û·oW®\ÙÁÁaëÖ­ưúơËbbÈÄÄÄ={₫đĂ?®V­Z©R¥₫úë¯̃½{‹¾"ΣG©†®^-:!‘ø;öMˆÎFÿ€ÍÜ^åE§Cdƒï·ƯgßÀ )‹¹¢/F/ü”µ´– %QQQË–-swwß»wï²eËöíÛ×£G+W®̀›éó¦M›.]ºôå—_=z4$$ä·ß~Û¾}»³³spppdd¤è "‚đË©SóóG¢3ĐƯ§&ẳ³·À<̀“bG8¾ƯËâgÏR­IH,“ù›6mJNN1bD₫üù5{Æçää´gÏäää Ÿ²wï^'N”Ñöđđ0`@RRƯ°¶PßsS´*”j±AË3r$‹•~Ÿ:lb‡ª¨*:"ỵ°øÎN0 £¤ø^íĂ>Ñ—¤;¾o—̉ç̃"ú3ÿÂñ́Ù³VVVuëÖ•öX[[×®];66öÂ… >%&&Æ̃̃̃ÇLJߩ~ÿ₫}ÑDD˜2…Å¿,ơ‚,îÚUçÓˆ÷o¥¸(N‡ÈL£F,>^‡¼Â+)nŒÆ¢¯GwÎΨ_Ÿṃ3] dæ…£Z­vuuuuuå÷—.]™WK—.Ư¸qc×®]P´(}»X"EXœÍ ‰œñ÷©C":"3zß­v€_/¶C;Ñ—¤;¾Ÿç¦MºŸ‡˜Y¬Um< IIIÎÎÎiö;99xö́Y†Ị̈ööN³çôéÓË–-Ë•+WëÖ­µy]OOÏ4{4·¿‰âØ:U€kbŒéÑ11™üàÁÑùƯ/¿8.ø»ïbcbâDg¤»Ơ%Ø'ïïÄè|*Køè-›ñúܹ˜L~đ³₫ècqÉ%5ñ6l»sÛJ±í5‹Ù’̉ăK¥Â;ºÿ¼(QăÆ n36,3/5C§íííÓ́wppđR‹y’’’Ö¯_?gΜ¤¤¤yóæ¹¹¹ióºQQQ¢/HÉ’,~ø°?D&#%̀}u~áÚ  ¼€9 ³̀ÜúpfÿÑ[¢Ê•¥µ5K¨Tǿ³ Êú£ßímĐF—*QJ ¥Îÿ:x0† a›”èÛWtN&”₫k=} ‘…PêŸ>ZrvvV©T ülÅ€øøx|lẁÂ_ưƠ¢E‹3f¸¹¹­X±¢iÓ¦¢/ˆ˜ÿ'fÙ²øTƠH„»@ă©IÆô¾[  5Zó­ŒS0E·óÈ¿èA¿~¢³!‚˜yáhccăä䔾e1..€4Î:½÷ïßϘ1ă믿~øđáĐ¡C÷́ÙSƯ²̉Z¢›7±yåî§2‹³x‚¿₫`>XÛiwt‘¥Y¼O÷aÑIH’âïñ½Î瑾›w®\¢³!"˜yáÀƯƯ=66VS)J4½UÜƯƯ3|Jrṛ7ß|³fÍzơêíß¿È!̉¼<Ä‚đ·!¨j ̀b&D,ßY%N÷½Ë±\¥Å¬•ˆÿ‹ñư{,]*:!bræ_8Ö«W/))éøñẳµZ}ôèQ__ß Ÿ²víÚưû÷ơƠWÁÁÁY´JsÆÏÄáï²eE'D ifH1ßôHHZ†¸[  úäFnis2&‹¾0Ưñ7¬ơxKˆR™áØ¡C++«E‹iú5X¶lÙÓ§OÛµk—#GÍׯ_ÇÄÄhÇ©ƠêuëÖåÉ“çÛo¿;äÆ ́ßÏ6i©?EßG^‰&a’ÀÑékĐ€Å6ès¦×x-ÅÓ1]ô…é…_áă)±*µZ©#¼´·råÊÙ³g.\¸V­Zwï̃=}ú´··÷Ê•+¥izÂÂÂFéááúøñăZµjÙÙÙ}₫ùçéOƠ¦M›nƯºeưr4ªZÙTܤ«W‘z*ø,ÄÄĘñĐZggH½…•₫kƒ¿WhQ®æưÑ[:¼x‘§û§Ÿ­₫7üÖ½¥Må°Fê_“ÁÁ4HtB&g±ßơæßâ wï̃sçÎ-Q¢DXXسgϺuë¶fÍô“;jhÚß¼ys5#ÿư÷Ÿè«!FÆ70h_5=-f¯R~®oEß1$&Âß­:TŸ3ơB¯<`‹NÄDÑצ;¾„æ{?³g-&f±…˜ƒÈHđÓ¿gó§ĂŒ›ÂĂѰaJüƠWX¿^tBz0xs#̀ú£'@êæµÔ¿tøèñ/Pˆ™31ñcéke…¤$½Î¦8û]o-„h‹¯¯_Œđ]à—Ф‡„èaVI±¢GXO˜Àâäd,Z$:!bT8̣Q@‹ëׇ——è„däÎçÉ£ûy„ăçưËë–Et̀b=Oö5¾v[~ÂlnXëwŸ(„ÂĂqøpªṂÑÎ,ÖnÑMùâ'ß F°g"–„úqäˆ₫ç{R<3ùMÅùá«Ü~J´E…#!Àzđx₫\t6̣̉º5‹ÿưWt6„‘›ÍÂÈYëá J± \D_îÆƒ«+Û́ÑCtBÄȨp$$ơŸÉ“'#“÷€è ôĐư¥x!N‡(ÊŸ²¸E ưÏ€€Æh,m~/D_¡îbcY¼v-₫₫[tBʨp$÷ak›jf[’ºß̉¼y¢³ÑÏ2,c×êE²£^=Ÿ8aSîÁ)BÔ ¬}‘º»y“ÅåʉΆIJƯ¾j±Ơ7oD'$;üHÉQ£t?p×pMK¡”ètˆµlÉâÍ› rJ~:@¾BƯyx o_¶io/:!b4T8ËV+ .]́ܺÅââÅEg£Ÿ–`ßú»°Kt:Døab;ê¬|C¸¢gçYÆ® ˜:UtBÄ8¨p$,_>wị́åE'$;|W®] ¯µî€M)¤è₫dÄ̀ôE_xH›ÍĐLtFºăgç Âë׺ŸÈÄRÍ™ƒ§OÙæºu¢’#~Y„²eEg£‡Ÿñ³Ä@ÑéÅúå÷ï¯ûyR» ÖC0 aGpDôuênï^;8ˆÎ†ÄR}û-‹iáÍŒ,^̀â@w¾€Á® ‹u?±pC†°˜¿5«·§`ÇúCß9ÆjÔ(Ơ8"ếh~¨p$‰ŸgÛ6ÑÙÈÔàÁ,₫ơWÑÙèAÑËÙñ`·•qíîçI-/̣~ ö׬¢;;8Àâ„ÅÏÆ@̉ Â‘X9X\º4Ú´1®`]5·b«ètˆÂzBGÉ,̀r›J»jˆ¾TƯñwqFƽ{¢"†C…#±0_}…ÄD¶Éwâ#¾œ₫ăÑÙèg7vKq[´Q¸/¸‘U11†=w,ØTÚ§p_!SqÎe±̉çd <*‰%Ù¶ 6°MêÚ˜¹;Xl¸‰G[v¼êˆN‡˜…l|•ăo¿öÜ|ÏQu÷E_­*UÂØ±l“–±6T8K̉®‹©j̀ÜáĂ,®¡àÛe@êûÔ4}#1 nàX̃iÓ ~ú¿đ—C1ÑW«»Ù³Q²$Û¬TItBĨp$ƒÿƒ×@«>˜+¾ăß¡K‰̃áçAÑésdè¿Bưà7c¤ME”¹}›ÅçÏcölÑ ½QáH,_5v́ˆöíE'$kü´½®®ºŸG¸±`·Ê¦Áđ-CÄrmåFYtˆŒÆ̀)̉feT}ÁºăëêqăR•’D‰¨p$€Ÿ>ĂÊJñc=ŒläHO™":ưüˆ¥x&‰N‡˜‘¶Ü(«Ư»u?OæøµÎá\t}ͺ»x‘Å¥h¡x…£Â‘˜»ß~Ct4ÛLJÜ-XÀbE¯66d>̣éq&B2R‡kÅ&3~ ̀Fl¼«¢¯YG*`âD¶Ie GbÖ.^Dï̃l“Ä|JX‹­₫ëÁ̃R¼ D§C̀_,m:Ø‹`ue¡àu?§O‡›Ûä§Ó%Ê¢đoB² V£bE¶I=k´Đ¬‹ăăEg£‡·x›Œdió+|%:#bvœakË6/\0Æ‹T@…?Àz×(z ̀“'°±I‰QYÁư6-Ä|ñ-fÛ¶¥‚d„_>ÍÊ vv¢̉ßÜÈONˆ!]¿Îâ/¿4̉‹tDÇ ˜ m*ºvüđÅçÎ!0PtB$û¨p$fïDóƯw´® 6Ê”a1ÿ…¨D1`Kz4ESÑé3U¢DªÍØXÏó)30ƒÿg¬èÚ‘ï1´b-É&*‰9â«Æ–-$:!xơ*Ơ¦§§è„ôPu¥x1ë~"B>å_~1*ooƯOô)»±»0 K›œ¯‡Åñă¢"ÙA…#1;… ±¸xq́Ü):!eà¿̣öí~â¨Ä@=ÎDÈ'¼­R…m<~lÔ×z€R|÷ùU‘ç¿ÿX\»vÚ?\‰œQáH̀Ké̉ø÷_¶ù¿ÿ‰NH1°¯$4l(:=ô@)‡q¢Ó!`ơjyÄ?AO(B‡`ˆè‹×Q₫üØ¿Ÿm::Nˆh GbFzơ­[l“&ßÑ¿ ơ¯¿ÎF?k±VÀ¢Ó! û[çÎûƠøÚ1Á ±Pôơë¨À™Ă6irG¥ Â‘˜‹₫ư±jÛ¤ª1;Nb±¢Ç9NÆd)¦)xˆéLă´4₫¦|í8Ă—`‰èë×ј1đña›T;*Ä, ‚eËØ&UÙñW_MRø²|Ó1]×c½ètˆÅàrøe¬†¯bàJ¬ưèèêUŒÅ6©v”?*‰̣…à`¶IUc6ñ£BùvÅù́.{ ÔĐăL„dßVÏ—BFĂ×}ĐgÖ‰~ t4o†p}5©v”9*‰Â‡ùóÙ&UÙ4=Â÷ÔR¢~è'Å'pBt:ÄÂđ½ƒù_JÆÄ×ƯÑ}6‰~tôË/èߟmRí(gT8%ûî;̀Í6©j̀>₫ưădž*Î~°!EQTt:Ä"ñó,X`×äkÇNè´;D¿ :Z²½z±Mªe‹ G¢X]º¤º±JUcöớÉâºuEg£ŸFh$ÅסđuoˆBñ3 i²—MB’·AåN&°r%ºve›T;ÊD™¾ü7²MªuÂ71>,:=lÇv~Ó¢3"–_sépV°zƒ7̉æLè…^zœO¤uëĐ¡ÛT© :'’ḌäÁ… l“ªFtéÂâV­Dg£Ÿ¶h+ÅđAt:Ä‚Ư¸Áâ Lö²¶°=6…ä*¬Rîø°M›àáÁ6ííqé’蜇 G¢4*âăÙ&Uºâ[lẃú¢¯×C=؈ΈX¶ÁƒY\«–É^öK|™ŒdióNåC>Ñï…ñÄ@n­P__lRê°3D…#Q”4}^¨jÔ•³3‹—(ụà˱\à€ètˆÅ[´ˆÅ'NàÍƯO•M*¨ø±2OñT¥ö\¼8ƠØôN”=Y˜9¡Â‘(Uræ ^¾d›ü,S…¥xæ‰N‡ÀîƯ,ÎÛÄ/Î×”[;°0¶ùƯwè̃]tN„ G¢ aa©ªÆR¥¨jÔG•*,¾wOt6z¸ëñPÚS̀ºLȧ5mjÓ$kÉđ̉×wqWô›¢‹&MÍ6×­ƒ““èœ,DöúöE³fl³Y3ܺ%:' b±§'*yÆC°en#):B8ü·Æ_½:ƒ×‡ºH›Ÿá³X úMÑÅ矧z/ăâhÁ¨p$̣–7/–³lđđ@h¨èœ”mêTó@g.æJqù_ˆÎˆÔê×g1¿ ¡©ÜÇưÜ`7ÊGbdmÔư¦è(ÍM&• 'OÎÉRQáHdL¥Â³glsưzܼ):'eăoR›p~b£ƒ1R|÷E§CH:áá,^±BH ¯ñzج@Çq\¹]ÓÔ5kbôhÑ9Y$*‰,>önDB¾úJtZʇ3gØæO?‰NHb~‰jBä…ÿ1+THH 30ă,Ị̂{TP½Â+¡ï‹Ôj4hÀ6çÍCÉ’¢s²Â£ m¾Ă;T'pB`JºqwOû{́»ï`«È2Xy¨p$̣P²$úôIµç¯¿0dˆè´̀_¯^-:=\Â¥UX%m¦¹ûFˆL½xÁâS§Ä.Ÿ‚ØÈï©…ZÑX`J:S«ñå—lóƯ;¨T8~\tZæ G"Ú;P©Ăö(µ~~¢33Ơ«³¸bEôè!:!=øÂW£­Ç™1-¾}¬S'±¹tB§4tíĂ>…¶>wÛ¶¥ÚS»6+² V *‰P•+ăóÏSíY´ÿ₫+:-óñLjˆ`›çÏ‹NHüÛP ưŸëq2BL_ĂZsX«¡¡üT0ߤڴI{Ûzß>¨T¸rEtff G"ÈîƯP©pî\ªj5™YéÜ™ÅîÚ8 ĂøÍ…X(:#B²iđ`xx°ÍFD'„…Xø₫ă÷¬À TJ\‡I­Æ°T¿$P¾<Ê•–9¢Â‘ˆàâ‚æÍSíi×NÙu,ñÁÁ¢³ÑĂmÜ₫¿H›Ôµ‘(¿„Á₫ư ̣#¿ê²H5ÜÛ̃•PItjÙöóÏxü8Ơ¿ÿ†J¥́Ư2D…#1­3 R¥ê* "[¶ˆÎ̀Ü4lÈẩ¥1hè„ôP ¥¤ø.‰N‡=¼yĂâfÍDg“â ®üßù=çq^ƠlZöä˵U«¦ÚÙ³§º˜*‰©\½ • “&¥ÚÙ¾}?åDo»w§Zí,*JtBzàÛí…^åQ^tF„èÁÖ³f±MÙT4]ĐE uETäw~…¯”¸̀LDnƯJ»S¥‚——è̀̀Ä$rçÎ`æÛ·o±y³è̀̀߀oàPœ±û́Vb¥èŒÑ۷ߢ`A¶Ù¦è„˜ó8 ×̉́t„£7¼E§–=¥JA­Æ€©ṽ¸• ?₫(:9…£Â‘YơêP©̉/Ó§C­F®\¢“3O|ƬY w:¦ÿö;º6óñđ!‹ẃƠ,ỸđVCƯ½ù‘ˆTAƠ]Dg—=!!t;*•²—]‹ Gb4ƒA¥J5 ''¨Ơ˜8Qtrf‹¯øß~+:!]ưŒŸ'c²´IU#17|E³v­ÜÖ;X HH³s#6ª Ù¢³Ëµ:ƒVƯF R¥LC´A…#1‚aĂ R!$$í₫¨¨´ĂbˆAñUăøñ7NtBºú ¿Ài“ªFbøÚ18&ˆN(;Ø©¡̃´Msă0Nqåă¶mP«SMO¦áîkëT PO¢Â‘T÷îP©đË/i÷ÿñÔj”.-:?sÆWƒcæLÑ éj+¶̣·É¨j$振ø!Ơ¸yh€j¨ç`Nựq”ôçé† P«Ó‘INFÉ’P©pñ¢èü‚ Gb ÍA¥Âºui÷O˜µ;ÎÏ̀ñUc©–¨P–p„·G{i“ªFb₫øÚqüx,^,:¡ ŒÁ5Ô_á«4ûgc¶ ª₫è/:Ál¸~qq́¯X*Ÿ́QáHôóä \]¡Re0“­f¨3D§h₫øª±ukÏv;‚Í?‡8=NFˆrđµăàÁhÛVtB[ơj¨ưà—fÿ2,SAU•E'¨­} V§]yÁ‘#©ªÆzơ°}»èœtU µf‚Ư_€yGtR„˜ _;nßâÅE'”©¿đ—êFH»dâ9œSA¥‚* âWÄÑÆ€P«q₫| • ₫₫¢S”%*Iöµm • }údđĐèÑP«±|¹è-B¯^©~¯U®ŒDç¤+T'pBÚ¼ë…QXtR„˜Ö‡,¾wO>sƒgh/öª¡îŒÎéj†f*¨AËUU¬µwîÀ*]A¤ùË<Ă;j–Œ G¢µ”Ÿ¡ µêׇZM3«ŒJ…U«Øf¹r8sFtN:Ñ´Rđ{vb§h…byll̉ĐP©d~ëf6¨¡ö„gú‡B¢‚ÊÖ[ €eK”@R?‡Mjúđ7hÁ 6 D…#ù”ƒáæ•*ÓƠƒZj…;bL/^¤m‰øé'\¾,:- Á4ư¢ÔP·DKÑy"H… ig¬n×-å₫q7ÔPo¦ô%#¹:¨ ̣‚×\é'8;ăèƠÏÈ~à@J—₫ÁƒE'*$gÎ O¨T¨_±±Đ¢Ôj¨Ơ¨UKt®¤A¸¸¤Ú‹‘#E§¥“<ÈŒ`i³$J̉jB@­FƯºls×.¨THJÖ't@5Ôođ&ĂQ27p£<Ê« r‡{4¢E'û «WC­Æ¦M?ºx1T*ܼ¥Đ¿ØơD…#ImăFäË• Uª >>ăc:w†Z?ÿ«e ‡J•¶£Z WWÑ™eŸ¦"́X‚nă¶è¼‘ÇñÛo©öØØ vmÑi}-lÏàŒê:¨“áñØ*¨<áYߪêĐj5̃¼AƠªP¾¼èE Â‘juÊ *ºtÁÓ§6dHJㆠ¢3¶,IIP©Đ°aª=zd°«üiº=¥éótw¿Ăw¢S#DfzöLûC~ü8T*L*:3­Á5Ô™  p7¢¡ ªœÈˆ@ÑùfÊÖP«qẹ̀å PáhÁ~ưE@¥‚•UVs6j„/ Vg° 1¾Úµÿß̃½ÇEQîÿÎî.·A( DK6 ARÉ7…(ç ₫ä¨dr2³—ừôUj^N…Ṇ̃–yég5̀“¦Ṣ‚¢v°/€ÈMMDW–ùư14®Ë. °Ÿ÷‹—¯ÙgùÎîÎî×çy惵ẃè~“5æPÎ -YbÈÍ躪¦ÿAüç?‰aèøq±#»€&̣^¤uV¨£º-´…›Êçza7í;dƯüư©´”X–¾ü’ˆ¨ÿ@±#Góå—ô ‹³fÑơëÍÖœ8‘‹‰eéçŸI¡;nC4h1 8ñXá!IJ%vpm‘A’c¢–™4³ ¹$r%­”‘¬åúT‘H‰ĂhØŸ¿|Œ7y¯¢UY”%ö¡ô|H›µ{÷îÈÈH//¯—^ziñâÅ¢OŸ‘AL¡¡Z†|}iơêVzŸy~~´cGc²xû¶^è,ùùô׿6¾‡ï¾«»—Øÿô“ر¶fíp †˜4àߤă.Nät•®²Ä¾@/ˆ,@Ч±,UTè&9™<=‰aÈ̉²ơ§®ç}z¿ê¸$̣KúRà÷Æ9:·”–zŸJ*HñWúëôÅEº(ö1ơ( Û§ôèxŸ}öÙÆÍ̀̀†ZTTTXXèáá±}ûv¹\̃ês•JeNNN;wœ“C¹¹tæ ¥§Ó™3ÍΤ(ƒMŸNááÍNBzUPPĐ¿ÿæÖîÛG[¶Đ₫ư­l¤:v¬K/-§̣-´e mɥܖkÎ¥¹‰”(v¼¡å·z°.ñÖ/_N|ĐJGG‰¡˜zæ‘£m¯oéÛ3tæúæƯ{’íØùø/ùº“{_êÛ¾í<Ño}w†ÄQ‡œœœđđđ>}ú|ÿư÷vvvD»}ûöiÓ¦-]º´Ơ§7ûaª¯§ÜÜÆÔ07—₫ưoR«é₫}}†nfF«VÑôédc#ö«hˆ4B._¦ädZ¿._úô¡CéÜ9±A—#täI¤ÄjªRߘŒ̉Á ;đÎÓ%²CzëÏŸ§‘#éÁA•éÍ7)(ˆ‚ƒÉÈH́ĐÛ£˜¿¡o> j©V›µ!{²I#]ÈÅ…\”¤HuÖDâ¬\¹̣Ûo¿ưđĂÿöçÈ?µZ=|øp™LṿäI‰¤•₫ư*©Ô´¡¡3;–&L ‰»ïÿ »»̣rỀ¤̀LúưwỀ¤ÿ₫·Í[05¥øxză ±„(̣2)ówú=“2Óa9¢&̣§øæ¦jëÙºPö«+¾ơyy´`A{nî%•RHyx§'yx««ØG̉6¹”û#ư¸ö¤“°;‰J¢¶́ê÷́Hu˜0aB^^^ZZZo»¹-X°`ÿ₫ưÿú׿†ÚÊóFÏI$ô?ÿC@]íª›«ª¢ÊJª¬¤û÷._&†¡²²G\:¨Rés¿VV”Jƒëmƒ ÔPI•÷é~%Ur Géhê_öØ¡”ưJ¿ªIƯ@zû C̀"ZK±ú|uº¡®˜=@§èêoư‡̉?ÿIês›2 B¶¶ưPP™›“…Å£¥R±Ÿ.Ñ¥J9JG÷Ó₫zª×ïÆ s&ZÙ“o¢‡aYöÊ•+½{÷îưø=€]\\ˆ¨¤¤¤ƠÄ‘Ñÿ©h'nô×L‰L‰́4JÆuÆnïy‰}èí6¦ÅP̀#v ĐE‹hÑ¢Æå3ghËÚ²…°O¬¾ÎœÑQ®sb±¹¹½Ù¤ü¾ñ¡ßS¦ưîI™bÚ} qÔVUU¥V«­¬¬´Ê Ư¹sǴ:S½ÓKƠ/¨1¢z„EĂcÓHPØÑu!×®è=$ ;½ơvvy$SS#?yR–&?ỷ(?_́à:›Å} :BAG­đĐ„r””ëB¹.´u&9S¡3ơ£ƒŸ‰£¶êêj"233Ó*777'¢{÷èb.€.Åœ̀ûQ¿[tëUzƠƒ<¸¿ÇjȈ,ˆºÉÄăâểư•Đ‘ºñ[ïêJ¯½¦£üâÅÆáÛ[¶ĐSOQQ̃oŸÉC̣È$L"¢Å͵¥bO5Ç&¬¬¬†©ªª̉*¯¬¬¤?Û[Æ9J› ́P+îHï=Ö÷Ư`\#©í¥U­₫©k²›Ï*´¹%+·¬Hª&µ´ưÔUH ḰcC6ëí₫•>Ưî ²FµLñc¯Œu™́®­Vµ:ûkF·=—5Zkw͸ôÍ"ª7y`TköX5Ó»&ƠVüCnF¯J«k÷á§¿ä₫*L¯ÙÔ<#‘Ăÿ¯Jr×±""†÷QI•MR§b*v"§Æư₫Y³ˆ-rfœ¹‡ÜNˆè&Ưä¦9ä ̉C9É%$‘„!†[¸H=ÈCB)I¥$å2(Ă—|Ȉû“‘̀ˆŒÎĐ™@ ́E½4ÿŒÈȬ̀ÉÜœ̀-Èœ̀ë©̃‰œŒ¨[^/ brs#772Ehï³ZMùùÔ«×cÆïß§[·ÈÄ„jjưefRÿ₫T_OuuTW׸pú4½ø"54ZMjuăBf&¹¹QC54Ë6.”–’­-q×fps«Tdn₫è!·PTDNßÏÄ_ÈQ\ü¨wëÙÙ=V³¶–Œµ«]»Öô"Ôëׯ·s"Ÿn‰£6™L¦P(¶,ªT*"²³³ku ÇÊu_¢/°Ùæ™'+́4ÓU¨óŒt¶A/uo]…f¤G…]{˜<@GJÉÅÉ :[€Riˆ“ñàÎ1:ÙÛÛ———«¿Œ¶  €[%vtâ@â¨C`` Z­>qâ_²́±cǬ­­½¼ºïµ°O‰£‘‘‘‰díÚµ•̃ñoÓ¦MeeeFƯs†}€'‡1:888,\¸0..n„ #G,**JOOwwwMçƠg†‰£n3gÎ́Ó§Ï̃½{ÿóŸÿ<ưôÓÓ¦M›7o7#€aBâØ¬°°°°°0±£è*0ÆAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@$z"v ¼ơ o=$ G‰#‚ÄAâ‚0,ËCO£T*Å:VNNØ!ˆ‰#‚®j‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄAâ‚ qA8€ H@™ØôW¯^ MJJ̣ôôlºv÷îƯIIIW®\155=zôÂ… ­­­Åôl̉¤IYYYZ…¶¶¶iiib‡§¶aÂÉnhđ¯ ‰£~|óÍ7Í­ú́³Ï6nÜhff6lذ¢¢¢={öäååmß¾].—‹5èSqq±\.wvvÖ,´²²;.è(8µ NvCƒŸxMHŸˆJ¥ÊÍÍƯ¿ÿ®]»tVÈÉÉÙ´i“½½ư÷ßoggGD±±±Û·o_ºt©Øáƒ̃¨Tª{÷î…††~₫ùçbǧ¶ÁÂÉn8đ¯Æ8>‘°°°©S§6÷‘"¢¤¤¤†††yóæq)"zï½÷ ÅÁƒÄô¦¸¸˜ˆ´Z  Ă©m°p²üÄë„Äñ‰ÄÆÆ®_¿~ưúơ~~~:+œ;wN"‘Œ3†/‘J¥£F*//ÏÈÈ;|Đ›¢¢""êׯŸØ@'Á©m°p²üÄë„®ê'2bÄn!55µéZ–e¯\¹̉»wï̃½{k–»¸¸QIIÉĐ¡CÅ>Đî·ä?₫ˆ¾té’©©©››Û́Ù³u¤†î§¶!ĂÉn8đ¯Z;PUU•Z­n:bZ¡PÑ;wÄô¦¤¤„ˆJKK‡nkk›•””$vh 8µ Nvà́÷Z;Puu5™™™i•›››ѽ{÷Äôæ?₫ËåóçÏæJN:5{ö́Ơ«W1ÂÁÁÁAŸpj2œ́À1Øï$­«¯¯ÿꫯø‡R©tÖ¬YBheeÅ0LUU•Vyee%ưùŸè^û0|ươ×Z5ưüü¦OŸ¾yóæ#Gđ?0Đ3àÔ6d8Ùc°ßH[WWW§9킉‰‰ÀÄQ&“)¦ÿíP©TDÄ_„ƯH›> ̃̃̃›7oÎÍÍ;jĐ3œÚ '»2Øï$­“Ëå999í{®½½ư•+WT*•¥¥%_XPPÀ­ûÈ Ít~X–mhh`F"ylаT*%" ±£ưĂ©m˜p²ƒ&ĂüÀÅ1+00P­VŸ8q‚/aYöرcÖÖÖ^^^bGúQTTäææöÊ+¯h•Ÿ?ˆ”J¥Ø‚₫áÔ6L8ÙA“a~ q́X‘‘‘‰díڵܠ"Ú´iSYYYDD„‘‘‘ØÑ~8;;2ä́Ù³»wïæ ÏŸ?¿uëV‡qăÆ‰ èNmĂ„“4æ÷ºª;–ƒƒĂÂ… ăââ&L˜0räÈ¢¢¢ôôtww÷×^{ḾĐ@Ÿ–-[ó₫ûïïܹsÀ€ׯ_ÿí·ßLMM?üđĂ|ÇRC†SÛ`áda~HW¬X!v =AJJÊÅ‹###Ÿzê)­U^^^ÎÎηnƯ:ỵ¤L& ‹‹Ó=€­­mXXXEEEnnnvv¶‰‰É˜1c\]]Å : NmĂ„“Ưá'^Ă²¬Ø1@7€1 G‰#‚ÄAâ‚ qA8€ H@$ G‰#‚ÄÚ¬¶¶vçÎ3gÎ9rä AƒÆ;kÖ¬­[·ÖÔÔßÈ®]»”J¥R©Œˆˆè´Èọ̣́”:}ú´¯.©©©G=zôè;w«³gÏ.l777•JƠ´‚¿¿?WaÍ5ÂwÀ=ëÍ7ßûe€n‰#´Í… BBBV¬X‘––VZZZ[[[TTt́ر¸¸¸±cÇ₫̣Ë/bØừŸ?Μ9sæ̀ÉÉÉi®NPPT*%"µZ––¦µ6??ÿÆÜrhh¨Ø=Ghƒ‚‚‚iÓ¦]¿~/á²έ[·æÍ›wụ̀e!›233ëÛ·oß¾}í́́Ä>¬n@¡P >œ[>v́˜ÖÚăÇs }ûö4hØÁ@…ÄÚ ..®ªª[ˆˆØ·o_VVÖÉ“'cccÍ̀̀ˆ¨ººz̃¼yB6–’’’’’²aÆ'́Úµkµµµ¢¼&¶k¾)ñøñă,Ëj®:qâ„V€€Ä„:uêTjj*·“&MúôÓO¹U………ܲæ:µZ0jÔ¨„„jfŒc}}ưÎ;£¢¢FŒ1xđàñăÇ/\¸P« Ss›eee ,đññ ôóóÛ´iS;Ksƒ*•ê£>ˆˆđ̣̣8qâÆëëëÛ±ëæÆΟ?_s$â'Ÿ|¢T*ù\|ÆŒJ¥²ººZgœ|ouyyyvv6_^]]}îÜ9nùå—_æË~úé§éÓ§ûûû4Èßßúôé?üđƒæµüj´9¯¬¬,66vÊ”)^^^AAAsçνpáÂ~̉ Ë’‰t;wîä Åo¼¡µv̀˜1£G.--%¢œœggg­ K–,ùá‡ZØ~mmíÔ©S333ù’¼¼¼¼¼¼ưû÷/[¶́ïÿ»VưÊÊʨ¨¨ââbîáưû÷?ùä“ÂÂÂƠ«W·ïU*Ơ”)Ṣó󹇗/_¾|ụ̀¥K—¸L·Cw-„•••¯¯/7Àñرc|—tzz:×äéèèèîîÎן?₫Áƒù‡7nܸqăÆÙ³gSSSơRzzú;ï¼SVVÆ=¬ªª*))INN1cÆ{ï½×q/ˆ- TFF·0v́XSSÓ¦6mÚ´wï̃½{÷7NkUvvvËY#mذË{ơê8}útOOO"bYvƠªUW¯^ƠªŸ^\\lcc3lØ0>={öđư¶muö́Ùüü|OOO®đçŸÎÊÊê ]ÇÄÄ$''Ëårîa\\\rrr¯^½«Â-h^„ÄpỐ§>xđ —52 ăëë>pà@nƠ¡C‡̉ÓÓÛ÷iª¬¬|ûí·¹¬Ñ××wîܹăÇ—H$,ËnÛ¶mÏ=O¾ èjĐâ‚Ô××ó Km}úÍ›7Ÿ{î¹Ù³g;99ơîƯ[g>›™={6ߢ9sæ̀´´4µZ}êÔ©h=Åßß?11ÑØØ¸´´4::º  €ˆÖ¯_?räÈöæ̉¥K§M›FDW¯^ øđ!eee5½âD/»¶²²²²²b†{hooïääÔBưààà+V¨Ơệ̣́́́rjf€#_øê«¯¾ûî»Ụ̈ß₫ö7®9;;Û××·}/﫯¾âæ7nß„éååµråJ"Z»vmgN´- Hee%¿Üë årù¶mÛÂÂÂ<==›Ë;¹,ˆöíÛ·gÏ.O]³fÍ8À7¶ñ¤Rẹ́å˹̃yç®üüùóü¦ÚdàÀ\ÖHD :t(·¬yyíZ kkkooo"bY–K KJJˆ¨_¿~nnn|Í—_~9>>>>>>::+©¬¬ä'Ú¼wï̃“Ă禓'Oæ #""¸˜7nÜhav!è¦Đâ‚pMsZ˜§º9®®®­¦›#FŒàÚĂ /^̀0Œ››Û¨Q£<<<Öwqqyúé§5ŸÎ-°,[RṚÜsϵ5H­Ö>…BÁo°£w-\HH7uù/¿üÎ÷Sk^ǤR©Nœ8‘}ñâŬ¬¬è1®‘•ˆbbbtV(,,T*•÷R@çC‹#bdddmmÍ-7măÜ¿ÿîƯ»wï̃mz]0ÿܼơÖ[S§NåñˆˆeÙ .lذ!22rêÔ©M³U[[[͇r¹Ü‚[æ{ƠÛ„ï2Öù°Cw-\pp0פÇơàós:jMÄSWW÷ÑGùúúΟ?ëÖ­éééjµëÚÖ‹ÊÊJ₫bđæTTTtèK‰#åååÅ-¤¦¦êœ̉%$$ÄÇÇÇÇLJ¿₫×BÆ“ÉdË–-KOOÿüóÏĂÂÂ,--ùU¿₫úkÓ;é•——k>¬©©áûÓûöíÛ¡/…ˆ»¶±±áúĐU*ƠéÓ§¹‰xœµÚö6lذmÛ6µZíèè¸bÅü1##Ăßß__a˜››óĐ[·nMÖeüøñúR@çCâBñCÙnܸ±k×.­µ©©©|c7¯MjkkËÊÊÊÊÊjkkCCCăăăÓÓÓ·mÛÆwRóṢ̣̣̣¸Ù8§Nâú”ŒŒ:ô¥¾k­ûJkeœíĂ7.ÆÇÇsC*µú©‰hÇÜẬåË£¢¢”J¥T*½yó¦đ½´y¿~ư¸µZí¤A¡PXZZZZZ¶py8tSH@(???nyƠªUëÖ­»}û6ƠƠƠíÛ·¿t×ÉÉÉƠƠµ­ÏÏÏéOÜüˆR©ÔÏÏỏ¤I\ÍHN]]ƯÊ•+ëêêˆèöíÛü1W y#ÄĐê®ù™™™ütè‡>{ölË›²÷àà`‰DBD—.]âJ´ÇđƯÄ|₫wáÂ!³đœÿ0|÷Ưwü0ĐC‡y{{ûøøøûûëwH%t¸8Ú`Ñ¢E‘‘‘555,Ë&&&&&&Z[[«T*µZÍU011ILLlG̃¦T*mmmËÊÊÔjuTT”¿¿¿B¡¸~ưzJJ W!88¸é³>đ́³Ïfeeqʼn䭷̃ê„—¢å]óq×ÔÔ„‡‡»ººVTTđW“h±´´äÆ ®_¿>//ï•W^‘ÉZúr¶µµ:t(ŸÉ 0€Ÿ£‘cjjjjjÊmsÉ’%`æÄ‰-ß3¦­‘¿₫úëIII*•êÈ‘#ÑÑÑ̃̃̃yyyü˜ËW_}•¿ºz ´8@¸¸¸lÛ¶Móúè >ḱÛ·ï_|ÑæF"’H$ëÖ­ă:7ËÊÊvï̃½yóæƒr]±̃̃̃ÿøÇ?´2lØ0‡̉̉̉Ó§Os©7KN‡^Ô,p×îîîùË_¸åêêꌌŒ‚‚GGG¾•NkkÜÂùóç׬Y#¤ƯQsr¢¦ưÔ ĂŒ3†ß{JJÊÑ£Gííí}||¸B®©X'á‘[ZZÆÅÅq-ÁgÏ]»ví¡C‡¸¢¢¢æÎÛÑït>$Đ6/¾øâáÇ/^́íímcccllÜ¿ÿ€€€Å‹ÿüóÏ£Gn÷–œœœc÷ÁvñIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/gaussmf_101.png000066400000000000000000001344671463010412100224570ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\UåđÏœ ¢ˆRq¦ä£Ü9sÜ©¥åÈ\i?sd¦æ6+säÎÊ=RIÜå*.ܨ¨ÜßÏyØîxν÷ó~ơúư¾÷pîs¾çÜ/çüđCC… –}=́ G"""²ˆ̉¥K/_¾|È!†—?îß¿‘"EÜÜÜêÖ­{èĐ¡ỖøêƠ+]byóæMmÿÔZ₫àƒ–/_^½zuÙWÂ~¸ÈN€ˆˆˆ́“OçÎ qTTTåÊ•¯]»Ö¶m[ooïuëÖ5jÔhÏ=ÉßW³fMe£››[GI£åªU«V­ZuÓ¦M7nÜ}1́ G"""뉋‹à́́l…cÅÄĸ¸¸89iâéâ·ß~{ñâÅ%K–tï̃ÀàÁƒ+Uª4tèĐƯ»w'ßùâÅ‹¾ụ̈Ëúơë›·e2‘&¾™ˆˆˆ́›ŸŸß'Ÿ|2gÎOOϬY³–/_~äÈ‘111Ê3f̀xóÍ7]]]½¼¼ªU«¶bÅ$ïưûï¿+T¨P¡BcösæŒaççÏŸOœ8±té̉9sæ,Z´hï̃½ïܹc‰+°jƠ*__ßnƯº^úûû·mÛ6$$äöíÛÉw6Å‹7{Ëd"̃q$"";ró¦̀£,˜Æ×®]{óæÍ&MT¨PáĐ¡CS§N=xđà̃½{u:Ưøñă'L˜P¯^½¶mÛ¾|ùrÆ ]ºtqwwõ¼¹á½×¯_÷Ưw=<<6l Ưư—/_î́́zæâŋٲeË•+×ÚµkÿüsĂË#FL›6mơêƠ:tX¶lYÉ’%·oßîââbø’··÷¶mÛ”Bpưúơ&L3fŒá¹sºû?}úôäÉ“¥J•àââ2bĈgÏ=z4K–,N:úäÉ''§Ơ«Wwï̃ư§Ÿ~2¼±wï̃¿ÿ₫ûíÛ·}}}Íxaî̃½«×ë}||Äụ̀åpÿ₫ưäû_¼xÑÉÉ©xñâ>4l)]ºô²eË*UªdbËd"DDDÖàíí=tèPåå_|1₫ü5kÖtèĐáÈ‘#Ù³g7T"##DGG+;ûúú*U#€t÷¯Zµª¡j  cdžª@ưúơCCC£££ƯƯƯu:Ư₫ưû¯^½Z´hQ‹/^¼xq̣äccc7õœÚ©½÷̃{iŸ»!7wwwq£‡‡‡’|/^ŒŸ0aBÛ¶m³dẸ́Ç|̣É'-[¶üï¿ÿ ïÊtËd"DDDÖP¶lYña«««k@@À¥K—äÎûÀ;wî+¾7 @ă’î₫̃̃̃Jl¨“o#G™3g:ÔÏϯlÙ²5kÖlÔ¨QÓ¦M“?~ö́YË–-S;5}·Z•£?ỵDÜÀËË+ù₫{÷îÍ=»̣¥={¾xñbàÀëÖ­ëƠ«—)-“‰X8‘1wç<‹rqqyö́ÙË—/[·n½eË–*Uª¼óÎ;-Z´¨Q£Æ[o½%îééé©ÄǼo¼¶iÓfÓ¦M{ö́Ù²eË¢E‹BBB’<üơđđH·:Lƒ““S’gÇ ¦Ô1´@I¶¼óÎ;NŸ>mbËd"é¸|ùrăÆ×¬Y£ d#""íªVMv©:sæ̀«W¯”»}ÏŸ??{ölPPPhhè–-[fΜ9xđ`eç$wEƯ? ‘‘‘/^,Y²dï̃½{÷î?õ¼>úhÁ‚_|ñ…¸§‰ª]\\Ê”)³oß>qă_ư¥ÓéÊ–-›dç«W¯nÚ´©^½z¥K—V6n"§gºe2 Çt,[¶Lv DDdîß¿?cÆŒ#F^Nœ81**ªU«V†¹©Å"iƯºuÏ=Kí_F÷OCXXX­ZµF=qâDNNNAAAe+L|T  OŸ>ƒ̃´iS³fÍÜ»woƯºu 6ôóóK²g9† V¥J•?ÿüÓI||ü´iÓ\\\ ƒÊ3Ư2™…cÊ Ăû7nܸjƠ*Ù¹‘=đơơ;v́*T¨pđàÁ;wÖ¨Q£[·n7nÜpuuíÓ§OçÎ ,xđàÁƯ»wçÍ›744tëÖ­7N̉Nppp†öOCåʕ˕+7eʔ˗/—+W.,,lëÖ­^^^;vL²§‰ªôèÑăḈܹóÀ===—,Y=aÂĂW§N:eʔɓ'÷ïß?_¾|&Lǿ³ÏJ”(ѸqcOOÏíÛ·?~|̉¤IeÊ”ÉhËd^œd˶mÛd'eĂ =ÁÉ\x=3êT¶S_y}u4ûÑ ½kFÂ( ¢Œ~0ºè«¢z»ƒăw©}¸wï̃êƠ« ,X»vm) üư÷ß—.]ºzơjº{†‡‡§ñƠFIÉ_ƒX8Z„c̃¾¶(>Z5/^O#ÄÈ©˜jb#»rîÚ•s€ïđƯGøHö9Ù ;û.mܸq±bÅdgamgΜéĐ¡CË–-e?üđĂ‚ Jo-Ê´¿ß’¬'¿Cä X8¥àc|<³ÓÙétYÄñÀ".—¯9BàqG‰ i´ù1>©#0Böù‘µÍ›7Ov ÖvüøqÙ)`₫üùóçÏ—…]aG"¢Dz£·º”«ÆkEĐn-tzĂË-¿Óu§₫Û¡W¿™¯Ỵ̈ùÉöç|K†(_E¿…x’+yŸá3tă1^ö‰e G"¢á×A÷~H²Ư¾×p :=^ź¶7ŒƠCw>¸ üâEoâÔ-ĐCW¼8`Q_¸GA§?‰“̃đN̉æLĐA'ûŒ‰ˆ2†…#´Aø'ÙØíôĐß­bÎ…•ÁÁزSXWcçN˜8QÙpá®{.áVcŸjõÇ}=ô5Q3Iû:èFb¤́S'"2 G"rtđHƯ¯øUÜØƯơĐ¯ÁAAˆOØîâ‚Ư•†«û*„ `ôhuă“'Q?­W^9‚aĂ`?öë¡o€â¦b*o=‘­`áHD­7zçFnqK0‚ơĐ/ÁĂ˱c¢~ơƠ+à›oÔ×â”Ââz mÛ¯¦OÇï¿'Ä;±S}A$#VéĂ·‰ˆ,…#9®R(•¤Gă?øg7v+/§MAC¯tÂƯÁ ’¶øÁj\¦Ll¬úªeËDè ÜX…D‹ÄÈvh'û’¥……c:&NœfüzƒDd+tĐ…A›­"*ê¡ o‰ûŒ¦Í‰JÖD¿~I·üø£Ÿ=ë́ q¹µ  Dû¶G{=ô9‘SÙ²ë !Ùæˆˆ$báHD(I·Â]ØuIçœ.te¬R¹r›6©›¦OO¹é† ƠøÑ£  äT+C¬[—t÷gx63”—7q“]‰H³X8‘c¹‡{I*3=ôơQ?ùbWÆ#Gs樛LùŸ}¦ÆsæxöLƯĐ.¥gÑC0D½¸…µ#i G"r ¿ăwø(/}ᛤbStï®Æ=z¼¶oW·fË–̣1ê 5èܹ†ÿ/]ZƯ–Ú"ÉkÇK¸$û‚%‘ˆÅŸø³%Z*/[¡Ơ-ÜJmç¥KƠø§Ÿ2{È;w ÿ挺-µ;•ôĐ—@ åeqˆ‡2/‘ u:N§kƠª•›ưđĂ Í.\ØôÖ(£X8‘C8ăâ_ăë$77Vcu|̀½{êÖöíÓ:XÉ·½ư¶O˜ê[Ïă|7tS^zÁḲ…#2Aé̉¥—/_>dÈ$ÛëÖ­;!ÀăÇû÷ï_¤H77·ºuë:tȰưƒ>X¾|yơêƠeŸœƒbáHDöï ®ˆĂ¥×`Íp OcÿmÛÔxª2»¢1  Ră; ÿ¿w¯ºmüø´̃ư3~ÊKöw$ÛåăăÓ¹sç·Å?›€ăÇïß¿?í7FEEU®\ù§Ÿ~ªS§N¯^½.]ºÔ¨Q£ăǨZµjç΋+&ûä G"²sQˆ̣ƒỴ̣̈oüöt‰•*©±8>&QáX§NZ‡ Ç×Ư´m«nN»̣\ˆ…‹°HyÉÚÑÄÅÅÅÅÅYçX111ñʪG²ÅÆÆîØ±cüøñï¾ûnºY}ûí·/^\´hÑ+f͵oß>N7tèPÙ'A,‰È̃yÀC‰wbg%TJ{ÿcÇÔ8ÑçÔC£»+Uÿñ‡®]«nNmˆŒ¢úˆkɰv´u~~~Ÿ|̣Éœ9s<==³fÍZ¾|ù‘#GÆÄÄ(;̀˜1ăÍ7ßtuuợ̣ªV­Ú+’¼÷ï¿ÿ®P¡‚2¯pÚûË›7ïÔ©S6l¨×ëŒ?₫ÓO?Í›7ïgŸ}öá‡>ỵ¤K—.7nT̃{ưúơwß}÷É“'†¾}éî¿|ụ̀Ÿ₫yôèÑ&L¸|ùrÛ¶mß~ûíƯ»w÷ëׯk×®!!!:u2́Ù»wïqăÆ.\øÓO? \²dIË–--qú>>>z½^¯×Ÿ;w.í=£¢¢ÎŸ?¬jªW¯^||¼̉Ó‘¤Ñ“¹•,YRv öæ̣å˲S°+s=¡‡̣ßư‚t÷øPxC’ß7ª_øæ›$oLá’¶l©îÿđa¢¬R;D*úêû'"û¢ZIÚߥiü/¯ơÿKƒ¡Õ¤I“”-ǰråJ½^ïïï_²dÉW¯^¾ôèÑ#—ˆï0aB\\œaKºûgÍớÙ³†—_ư5€ *ÄÄĶԮ]@TTÔÓ§O{ôè¡dƠ«W/ooï[·n™₫X±bÅ   äÛ …ăøñăS{ăùóç|̣É'âÆ]»vX¸p¡áe‡ *dz’™øàvØÏzÙ…+‘Eˆ÷ç&aR?ôK÷--Z¨ñŒ‰¿&tULÔ…15ƒá·ßâ9s0fŒ̣•  u ̀È‘˜2%–bá5N:ˆ8Đ:µ©¿EI¦ Ç={ <›:5ưÂÀZ¬Í‰œÏñÜđ̣¼³;¬qɬʖ-›5kV奫«k@@À¥K—äÎûÀ;wî+¾7 @©ÙßÛÛ[‰ ơḅ-räÈ1sæ̀¡C‡úùù•-[¶fÍ5jÚ´©˜§Á³gÏ̉x„­×›óCªO<7FEEđ̣âU’±p$"{Ó]ạ̀röó®U«ÔØ̀]¼’ 5È›Êđ€ë×à4ÆÑˆVî¡îÄÎY˜5ƒÍ|á́‚Ø‹Tû\\\={ọ̈åËÖ­[oÙ²¥J•*ï¼óN‹-jÔ¨ñÖ[o‰{zzz*±1ûoàÀmÚ´Ù´iÓ={¶lÙ²hÑ¢€€€q7óV‡iđññqrrJ2†&""@Á‚­“¥†…#Ù•UXµË•—Æ?ƠíØQ7lHü5ñ́ư÷M¥@ÜJyeM›P­ZBܬN4ª==ôJí8C¡ÙxĂ"Ñ–‰} ´æ̀™3¯^½Rîö=₫ǘÙ³AAA¡¡¡[¶l™9sæàÁêIî 2º"##/^¼X²dÉ̃½{÷îƯ;>>~̃¼y}ôÑ‚ ¾øâ qOk>ªvqq)S¦̀¾}‰₫äû믿t:]Ù²eÍx ÊDd?àIG¨ Ùú38ÓÁQÙsÔ¨„xǼọ́•ªUƠ½NÊ@"'p¢"*ââ(Îζå₫ưû3f̀ñz1¢‰'FEEµjƠêÆJ +¯[·îÙ³g©ƯáËè₫i «U«ÖèÑ£'NœÀÉÉ)((³l…5UèÓ§ÏàÁƒ7mÚÔ¬Y3÷îƯ[·n]Æ ưüüLn›L‘ˆ́‡;ỖôÛ±Ưø7vï®Æ &û²ñS‹ÄÂqαp4ñçŸâE‹Đ·¯QMV@…¯đƠhŒ6¼ä@Ûâëë;v́ØT¨PáàÁƒ;wî¬Q£F·nƯnܸáêêÚ§OŸÎ;,XđàÁƒ»wïΛ7ohhèÖ­[‹+`‚ƒƒ3´*W®\®\¹)S¦\¾|¹\¹raaa[·nợ̣ê(̃`ƯGƠzôèñă?vîÜyàÀK–,‰Nw•B²ÎăHDvBF=ƒßÁ;Æ¿Wœ²1…îÁă›R‰Ó€ ́,Y¢Æửđ­…Q5QSy™yM¹hdMƠªUÛ¹sç£GfÍuưúơaÆíÙ³ÇÉÉ©H‘"[¶l)T¨Đ́Ù³g̀˜‘#GS§NM<9**jÖ¬YÉÛÉè₫iÈ5ëÖ­[»wï~àÀ/¿ürï̃½ 6Ü¿¿ô{îîî!!!íÛ·_·nƯ´iÓ/Âơ©µ@gÍ? D@@@XX˜́,́Jxx¸ôßböÄ.¯çûx-fñ…ï-Ü2₫½G¨=ß|3¥‡Ê(èbż…T/©0}1’ư²Mó‹é«äođÍPØÛRli—Úâ¯Y??¿+nHÚÖzzzîÙ³ÇẃØ144ôúơëfi-ßQ¶øMh¼ăHD6ïü£T2T5hÖL7mJöeq@@Ú+L''ö {ô(ÉMÇ->¡†a¿fDD™Á‘ˆl^eTVâp„gôíâ˜éfÆÉÜȘäû‹íÚ·WăßÏđY¯Æj%æj„¤M÷îƯ[½zuhh¨Ûüûï¿W¯^}ơêUÙ'ç X8‘mˉœJÜư‹¡X†̃.ö¶ÿ́³”ö§₫Î=cÉ%™<q¤ÍÎkû}¼ÿÔ©û‚”±÷“u5nܸF²³°¶3gÎtèĐaúôéfló‡~èĐ¡ĂÁƒeŸœƒbGósØ~–c—}̣$²§ë9Æc¼̣2CŒÓïhhDWÄ´.io‚‡GBœ5+^¾̀đï5nÁ–ÆÈÀˆZ-³¿>¤éăh<̃q$"[ơ/L¬#"ÔØÍ-¥=ÄÇØíÚe&Ë̉ø¢¸oLLf†gJÜM2Ó‘ÑX8‘­ÊJ¼ ›2ÑB:Ăb`ZÇäïÚ‘ÂÓ“&©ñ§Ÿf¸ùœÈ9ă”—́́HDÅ‘ˆlRÔă¦h‰FVă·ßNi‰Ơ¸nỪ$*={&ÿú矫ñŒ™9ÂLȆlÊK²&"ËaáHD¶ç ΄B§ù₫ÊD#'N¨q₫ü©́oj®â4àÏ¥¸‹Î仄/đB‰§ĂœˆˆD,‰Èö”EY%>‹³™kD¼hÖÙBR—l*Gq™”Gva ÔVøÀˆ,„…#Ù˜÷đ×EƯR(•¹vöïWă7̃Hoï-wFƯº©ñ×_g²‘îèêlA_á+Ë%LD‹…#Ù’Û¸ư₫P^† $sí<|¨Æ¥K§²Sd¤¿ûnæ“®UË:ç9+ñŒ±ÎA‰È¡°p$"[Rế6û±?Óíˆk¦437`ûv5nÔ(óI‹ï½v-Å]₫÷?#̣1 ¨ăkøÀˆ̀…#ÙŒđ—C¹¨™é¦V®TăààTv Ç  ̀ç-̃­ÛŒîfnÚƒ!"¾œù™o‹ˆ(Dd^â¥8₫ă_ük–f]]Sÿ¸Ø )ªTQăT G3'B€–>9DdÄ‘±Ñ”¦Ä©Å¾“ºwÏü§‘z1Ú§o4éüÀ)ÁI u:N§kƠª•›ưđĂ Í.\Xö):"Dd₫µ`h†f&4†)SÔ¸GëI*S9‹Ô(&`‚ør;,~›“(E¥K—^¾|ù!C /O:Ơ¾}ûüùó»¹¹U®\yÆŒ±±±©½÷ñăÇưû÷/R¤ˆ››[Ưºu:dØ₫Á,_¾¼zơê²OÎA¹ÈN€ˆ(}â-´›¸iíĂ‹Ï-&kV5NeM<ÅS7$,¿Ư2±7‘é|||:wîlˆ/_¾תU«"ÉÚµëÓO?ư믿6lØüQQQ•+W¾víZÛ¶m½½½×­[רQ£={öV­ZµjƠª›6mºqă†́ósD¼ăHDZ'N÷ư2;Aökó…á"&¤¾ß;jlÊjăÆÖˆ£hN4逮p ‚zĐè™ù¶È¬ââââââ¬s¬˜˜˜xÓW?2“O?ưôñăÇ»víZ²dÉ—_~yàÀ={₫öÛoÛSêøûí·ß^¼xqÑ¢E+V¬˜5kÖ¾}ût:ƯĐ¡CeŸ±p$"m GøœQ^NÁ?7.ơưÄ3S&q4KÏK—RÛËŒO«́Á%₫ ?™Ú™ÆÏÏï“O>™3g§§gÖ¬YË—/?räȘ˜e‡3f¼ùæ›®®®^^^ƠªU[±bE’÷₫ư÷ß*T¨P¡‚1ûú¨nƯºŸ}öỸ¼y§NÚ°aC½^`üøñŸ~úĩ¼y?û́³?üđÉ“']ºtÙ( ’º~ưú»ï¾ûäÉCß¾t÷_¾|ùÏ?ÿ>^ééH̉èÉÜJ–,);{sụ̀eÙ)غ“ô“ ‡á¿‚ú‚¦7¸iÓëæ ïƠ+Í]sçVwMQ—Ti­E‹4ö*]ZƯñÁ3\C¨íáOưŸfhÑ*̉¾¤iüÏ×úÿ¥‘s±bÅL4IÙ2|øp+W®Ôëơ₫₫₫%K–|ơê•áK=rqq0`€ø̃ &ÄÅŶ¤»Ö¬YÏ=kxùơ×_¨P¡BLLŒaKíÚµDEE=}úÔÙÙ¹GJV½zợöö¾uë–éÿˆ+V Jí«‘‘‘U«Vuvv>₫|’/?À'Ÿ|"nܵk€… ^vèĐ¡P¡B¦'i‰n‡ư¬çà"̉®Q¥Ä7`†đâư´&âAâE Í+Íé!ç̀Aưúj¶ÂăÇLz€^đ2ÄơQŸ£d$̣öö{é}ñÅóçÏ_³fM‡9’={v—„åÈÈHÑÑÑÊξ¾¾cÆŒqrJxN˜î₫U«V-U*a÷àà`;v̀’%‹aKưúơCCC£££ƯƯƯu:Ư₫ưû¯^½Z´hQ‹/^¼xq̣äccc7õœÚ©½÷̃{Ȉ½{÷öíÛ÷âÅ‹óçÏ/Q¢D’¯NÄƯƯ]Üèáᡜ)IÄ‘ˆ4ª"**ñ§øÔ,m^¹¢ÆÙ³gºÓƯÚ’«WOùÅ …cnä®…ZỆŒưĐo!J:sGW¶lÙ¬ÂàyWW×€€€K—.È;÷vîÜyîܹ .œ>}:É<5JƠh̀₫̃̃̃Jl¨“o#G™3g:ÔÏϯlÙ²5kÖlÔ¨QÓ¦MÅ< ={–Æ#l½̃Ø?H®]»6hĐ 7–(Qb×®]ơÄïøÄÉ?ỵDÜÀËËËJÿZ” D¤E¡= u\ñtL7½Íÿ₫Să Œ~›é3ÈƠ5Ù3#¡Ê4à‹°È¾ Gw¸›̃ˆƠ¸¸¸<{ö́åË—­[·̃²eK•*Ũyç-ZÔ¨Qă­·̃÷ôôôTbcö7̃ÀÛ´i³iÓ¦={ölÙ²eÑ¢E!!!>>>ânÆW‡©Y¹re¿~ưÜÜÜ.\سgOåi>>>NNN÷ïß7FDD(X° …₫-ÈH,‰H‹ê Á³´Ù¸±Ï›æ®×¯«±éCª 6ÄÎǼ8g>x½(w»vX»Ö ÿß}Œ ±7¼#a“̉Çx,;…T9sæƠ«WÊƯ¾çÏŸŸ={6(((44tË–-3gÎúè£ |ñÅâ¦?ª̃¸qc×®]ßÿư $y „‹‹K™2eöíÛ'nü믿t:]Ù²eAR±p$"ÍYåJ¬ƒ® ̀3ÿ¶8[pÉ’iî*vC4WáØ¨‘Z8;‡×ưÏ’ëÑC-×­3ÏÁ?ÂGJá‰È‹¸XÅMk’2́₫ưû3f̀1b„áåĉ£¢¢Zµje˜Èºté̉ÊëÖ­{ö́Yjwø2ºÂÂÂjƠª5zôè‰'prr ‚đ,[aâ£j½^?bĈ… /[¶̀ÙÙ9ƯÄúôé3xđàM›65kÖ À½{÷Ö­[×°aC???óưƒPf°p$"Íé®JóO_œ#Gz{ˆ3æT­j£¾û.”Û·§Q8ZÈ œPº–@ ’±>__ß±cÇ8p B… ܹsg5ºuëvăÆ WW×>}útîܹ`Á‚ܽ{w̃¼yCCC·nƯÚX¼UÎĐ₫i¨\¹r¹rå¦L™rụ̀åråÊ………mƯºƠËË«cÇIö4ñQơÙ³gÏ;Wºté̃½{'ùRëÖ­›7odc=~üñÇÎ;8ĐÓÓsÉ’%ÑÑÑ̉²Ÿ¬„ó8‘¶ …:́T\ûÄD?ÿ¬Æéúl·ÀâÎâ#¶ôÚḯ\¸`ăW@…́P­…9SFT«VmçÎ=5kÖơëׇ ¶gÏ''§"ElÙ²¥P¡B³gÏ1cF9N:5ỵ䨨¨Y³f%o'£û§!kÖ¬[·ní̃½û¾ụ̈˽{÷6lØpÿ₫ưf¿±wñâEgÏ]’̀©S§’ïïîî̉¾}ûuëÖM›6­xñâ!!!\ŸZ t¦÷u¥$ÂÂÂdgaWÂĂĂùxÂŒ4~=•àxW¬X1\½úºÙt[¦6bo£/©̉¬N—öDä§Náơú èÔÉ c«Ơ,syÍ.íKj‹¿fưüü*V¬˜âº̀ö*00ĐÓÓsÏ=¦7•\ÇCCC¯‹Ư‘M‰ï([ü&4 ̃q$" ©unOđ‰[VªFMH¯}óM5₫ås¹j(±8M&‘1X8‘†ˆË+‹oÍƠ¬X§•/Ÿ‘w™óôŒ`ip@‰'c²́tÈÎƯ»woơêƠ¡fY@óµ¿ÿ₫{ơêƠWµơ· aáHDZ‘¹•x)–±eq^‘ô;8^º¤ÆæRñÖ„F̉^k&Ă`€7FR)7n\£F ÓÛ±-gΜéĐ¡Ăôéf˜‡UñĂ?tèĐáàÁƒ²OÎA±£ù9l¿ËÑxŸ<›£Í놰RP›·û]ƺ,Λ‡âăÇQ±bºí{IgÏÆÇ sâàÔ©´o~>{7·„¸jU>lÆëa=í¯#iû8w‰HĪñ?ügBK&‡<Q5f€xÇ1½Ơ®®j|Ä<3 «¾Ç÷JœùÍÜ:Ù/D$ßj¬VbW¸–…9‡§³I}cy ‹Äiǘñ'_>K%̉ê\zwq÷®YêHDd_X8‘|ĐA‰Ÿâ©yÏXG11Ö8ç]»̉ƯÈ653nÔya¢¨5N™ˆl G"’l>æ+q”1{û+Wª±8Íöơï¯Æ‰× 6ƒ–h)¾<²O—ˆl G"’Lä{§e§#hØĐümfϹ÷EF?—KPÇ"Đü "»Ă‘ˆdú _)qmÔ6{ûbEq‚›T;§Æ™ÿ„38¿8KT”™sñ‡¿3Ô©%ÿÄŸæ?_"²/,‰H¦1£Äû°Ḯíg¸ƒ£8fż“8ˆÅè±céî.ælö§Ơ"¡Ä ĐÀü "ûâ";"r\ŸâS%n–8„8‘8ÁMªÄ[”eÍ9¸;A’ỹz+íƯŧå3gbÆ 3§ă Ï|Èw÷ /×bm;´3ÿY[@@@€́ˆ G"’fÔ:èwünÑc;µ³ä˜DœÔzûv|₫¹eg„»¸«̀₫>̃׿|àI8æÄË¦Đæ´ÿd‹ø¨ˆäèJü>°Ä!Ä)lŒzN c–1ŸcöêÚU·H"ấë ±ĐzW€ˆl G"’ăgü¬Ä?âGKB́(Nmcgç ¾ÁR,ƯÍÀYœUâ₫Èè•""‘ˆ$h¦J<ÆŒvÎ “¦°±Äjƒ\¹2´»ø€qăFK%U5•x†Yê0DdăX8‘[°E‰¿Á7–8ăj,Nj“–ß…~–UªXêä+U²TË&ØưJ<Óe§CDÅ‘ˆ¬­ (q}Ô·ĐQæ̀QăV­Œ{O„:7 ÚYlpqûöj,.¤ºæÍƠ؈¥ 3)ÔDÿĂÿ,u"²e,‰ÈÚ¶b«ï‚¥ê iÓÔxøpẵsà€—1ÿ⇠jª…1uË–©ñ7¹? wqW‰Çaœ¥CD¶Œ…#Y•¸ḌhŒ¶Ü>Íø{Œ+ăL%.˜}đ 1ïđđPc‹ÎTơ”x*¦Zăj‘MaáHDV%Î×8­pÄ@ăa×´딪FW‰‘²Ó!"ÍaáHDÖÓj÷¾á0̣ùqf|÷Ọ́áÿ5rÇƠøŸ,˜QÔQbq†v""°p$"kZƒ5Jü5¾¶ÜÄ€:eüưY²XñªE,-×ÍÀ_øK‰Å5!‰ˆÀ‘ˆ¬¦+Ô%Pc°Euưºiï7v₫ë)VLW­²́±ª¡ÏÅ\Z""{Ă‘ˆ¬d9–+ñL̀´ÎAÅz+11j,|¶K·oC8¤Äƒ0Hv:D¤!,‰Èz¡—ˆ-z,q̣c'âAâq*Ö,ăă|“ø̀ựeË&uHÑ",²́ÁˆÈv8Já¸víÚvíÚÖªUkÔ¨Q>L{ÿ˜˜˜ï¿ÿ¾uëÖơêƠ¬S§NÁ‚·oß₫̃{ï=zTö©Ù¤²(«Äâ­G 1z¤rbb—'eSûP=#8¯Đüù–M‰ÿƠz£·ÅGD¶À₫ ǰ°°E‹ùøølÛ¶mÑ¢EÛ·oïÖ­Û©S§¾IưöƠ«W;v¬qăÆ;wîüî»ï–-[öÓO?3fŒ́³!²IgpF‰c±Ơ+Λ>kN©˜?¿œăfÄøO‰À²Ó!"M°ÿÂqÍ5ñññC† É—/aÖ‘#GzxxlƯº5>•®EÇĐ½{wĂ–5j”.]úÊ•+<}BD6f&(q[´µôá6mRă tp ë§;#…căÆjœ^3(„BJ¼ Û¬yUˆH›́¿p&Ná”́ @D’Ùùư³èè踸8OOÏ$Û=<<ø¢( `Ù²e=zôèÑ£‡²±K—.£F2̣¸I¶lÛÆ§<™wăÆ Ù)Øk^Ï~~ê€ÜåáËĂnùcú)Qxx§¼íY… ÷2̣Fdê’ñövˆÈDJ¦¯^eô™±+Ë®z…ÊƠ ¨p9ÜÂó½ÆŸzóâơ4Q£Fd§ v^8†N»ºº&ÙîææàñăÇ)¾+**jÊ”)Ï=+[¶lụ̀å###CCCûí·êƠ«7lØĐ˜ă†……É>u{ăççgz#¤°Îơܵ¿¡ü¬pĐĐP5:4#§)<pmØ0©fø-uê`ÆL¼·Z5>œÙƒfœ"—_.ox[ú V;;‡ÂëiäëÉï9;Tíéé©Ó颣£“lúô)^ßwLnĈÿüóÏÈ‘#ươ× &̀™3gË–-®®®Ÿ|̣ÉeKϺKdG£¹‹½å,Ǵö—±â\<ÖYÖE<Ê;Æ¿O>y§8´¹jU+¤¹©´i£ÆVèæàm¼­Ä‘ˆ´Æ!‰H«́¼pàăăi¨†A>)}°DFF(–l[÷ïß—}BD¶¡2*+±un7Äú“)w3{ôŒ È6ÉJ¬Tâ7ñ¦•JDÚcÿ…cưúơăââöíÛ§lÑëơ!!!¹sç×ax­X±bÎÎÎ.\ĐëơâvCÿ†âÅ‹Ë>!"p·Å—ÅP̀ =}Z{etyë¯ ¥Ó©q Ç’%­ltP⑹•yˆÈØáØ®];''§9sæú5X´hQDDD›6m²dÉbǾ̣Ù³đđpĂ ³9rÔ­[÷êƠ«ß}÷2Cø… æÍ›—5kÖàà`Ù'Dd v?+Ừ;ü‰óÚ£—«6»9₫`­%]¦cº¿‹w­tT"̉]’ûjvéÇœ:ujÁ‚ëÔ©sơêƠC‡•)SæÇT¦éÙ²eË'Ÿ|R¢D‰M›6ˆˆˆhÛ¶ííÛ·‹+V¦L™ÈÈÈ₫ù'>>~̀˜1;wN÷pUm^áááhFV¸:¨·Óô°̉/ñ^†±™ôæ̀^Rª¼5kV¼|™á#g5ÿYùSo^¼fç°ŸơöÇ@Ï=¿ùæ??¿-[¶¹£ÂÛÛ{Ë–-ưúơsuuƯ»wï7̃~ûí5kÖS5QTP⹘+; zë-ÙdLLŒơƠ Í”¸?úË>u"’À!î8Z™Ă₫b9ü[Ù¼,}=¥ÜnŒ†2akăÆØ²%£I¿ÎyĐ ̀Ñ£g̣’V¨€S¯×bÉà¯bwwp6Æsñä̀i–f¬ÿ°ưGü¨ÄuPÇÚ‡'"IX8‘©âx奸Pµ<nxµnñ÷?z¤ÆÖœ‹ÇÀ´R5o^kç«ø(q(B¥åADÖÅ‘ˆL%–ø¿ZùèâSZqvCc‰£R¬ÇQ<âÓ§}·ØÍq÷nkç>Ă•¸JYûđD$ G"2Ơ3jÔ¨øøøeË–ÉΑˆÅQ%·|RrرC³f5­­%¤œ‚‰ê×Wc+¯cà?%ÖC/ûz‘ei«pü÷ß³gÏ̃­[·ä_êØ±cΜ9ÿư÷_Ù9Q‚ª¨ªÄâm'[eư!Ơ~~¦·apïœ3XƠJ\Ơå$ADV¡¡Â166ööíÛ>>>ÎÎÎ)$êääëë«×óÏY"-*ŒÂÖ?èÍ›jÜ©S¦&‘‘U8|Ü®}"â2å‡qXr6DdI*u:]Μ9¯_¿₫(¥̃QQQW®\)_¾¼́4‰ª ¯Ă:)9˜¡ƒ£ÜI“÷̣åL4 ûæÍrNb(†ªùÀÖ{›Qª4T8:;;·nƯ:>>₫³Ï>{ụ̀¥ø¥˜˜˜‘#Gêtº^½zÉN“ˆ€ÄϦ۠”ı Ơ3÷€ToW®\¦0™¸Îa¦V‹…£”n¾Á7j”Y¶æq́Ô©ÓéÓ§÷îƯÛ Aƒ6mÚøùùétºđđđ_ươÎ;M4yúôé̃½{•ưưưư‹)";k"‡3”xFÈJăÙ3“›ĐÂÔ‰‰̣é̉%£ dÏ®ÆÛ¶I;º¨û₫2Ä˰¬+ºJK…ˆ,F§©^ƒÚذa}úô‘u gÆƠ·̀)<<ÜÏ|Èôë©̀ù ©iu¯³(U gÏÖ~zI•4*TÀ‰̣ÎĂTfüÆàO½yñzĂ~Ökëc‹-2´ñâÅe§Läpz£·#‹C›ÇÈ‘jló38*ǸÜû:tÀªUj*ÈI?r<ÇsC¼››¢©œ<ˆÈb´U8N›6Mv D”đƒïÆnYi9¢Æd¾û¤¿₫*­pü—EYCÜ ă±́ CDf¦¡Á1D¤}—¡û͆l3ٳǬÍerpVôÖˆ?_ZePF‰£%ó‘eH¾ă¸bÅ U«V-Q¢„̣2m;w–›3‘#§w>„C²Ó1ŸÊR×Ê{óMœ:e®Æîß—y*ó0O;Ơ-₫À2³!"s“\8~ùå—&L˜`( /ÓÆÂ‘H¢ûP«’¨(+‡Ơ¸]»̀¶ræŒW©’ÙV̀¡JÓ Çüùqç̀“0ø*…£”åˉȢ$}ôeZïaĂ†É¾ D”ª¶h«Ä31Sb& ¨qÿ₫™m娺ֶüÂñ‡×=GĂĂ3·aÿ₫?>! EíÚ̉Φ:¬BBËé˜.Î ND¶N[Óñ؇¢o9œH¼2}=52 €¢EqíÚëL2È A˜;×äVÓ¿EC¥J ñêƠxÿưL´q÷.̣çOˆ;wÆ̣妜©LÿVáO½yñzĂ~Ösp e6ÔuZZ£µÜd”ªÑ$âG¹̃zËô¬||ÔØˆîâ–å _%""[§­éxlÛ¶í—_~¹víZj·BCBBdçHäˆ>ÆÇJ¼ëe§“ÀĂĂ„7k§pưmeÖA,†b†¸:ªÇ"VvFDdÚ*ẃØ1xđ`ÙYQR§ Ưȃ|8gÎÙ‰Q‚©˜ªÄï#3ó ×5jlRGí̀₫<‡èèL7Ó­›ߺ%û¤€( Äû°Ov:Dd*Ƀc<˜dKçÎç̀™sèĐ¡&M*T(kÖ¬Iv¨Q£†Üœ‰ÊHŒTâƠX-;D]÷úô1¡!-Gâí·3×Lÿ₫Xº4!^°F,ăjYÇp,?æ%¯‹ºrç'"ÓI.{ôè‘âö¿ÿ₫ûïT&3s̀‰Ú‰¤8ăJ,Né,Ñ=fjH,]]eŸ–Ù Gñ/k->àHG"»"¹plÑ¢…́+@D©ª…ZJPÙé˜•ÖæÙööVc3ÍL~ÿ¾́“,Ç̣.HïƯ va—́Œˆ(ó$Ó¦M“}ˆ(Uâ,<₫đ—=Ră¶mMkëömÙg“:Ó G__m\gtV GÎæHdë´58&9½^ÿçŸ₫üóÏÇ7½5"2^K´Tâ=+ ! ûú[nÊ»Å+³OĂQ”™À‘x¸ÙÍ»wï~ï½÷fÏmx9f̀˜L4©C‡ăÇçL=DVó;~Wâ~è'; qáX¿¾™Í‘Cöi™™X8JŸÜàgü¬Äâp+"²9Ú*=:`À€sçÎÅÇÇ8sæ̀ºuë<<<:uêT¨P¡•+Wî̃Í刬a.æ*q´‘N‚«W-Ш†Tètfi&_>5₫åÙ'ơ8¸JtED¶E[…ă÷߯×ëG=`À;v́0ỵä/¾øâ‡~Đét¿hç· ‘]„AJ¼ëd§“”‡‡ùÚ̉Ná¨L,@\%º""Û¢­ÂñüùóùóçïÖ­[–,Y>|8kÖ¬uêÔP¬X±7̃xặå˲s$²çq^‰s!—́tüó›ÚÁQ́3­rÍ|™Ô®-û\’W‰ƒ®ˆÈ¶h«p|ôè‘÷ë9)bccÏœ9S®\9eđœ9sFDDÈΑÈ₫Ơ†ZẃÇ~Ùé$0çÈ­Í₫m .™}îœ)-‰×gÉÙçơ8ÄJzED6D[…cnܸàØ±c/^¼¨V­áKñññ7nÜÈ›7¯́‰́ß}¨–GyÙé$X¬®{ŒbÅLkK,ưåO3” Éà&èÜY52>‰‡X‰C¯ˆÈ†h«p¬R¥Ê£GfÏ}óæMĂÀêºuë¾ôă?>xđ xñâ²s$²sPA‰¿Á7²Ó± ­Í₫mP¶¬›ip‡Ë>/8Đª:ÉN‡ˆ2L[…cß¾}]]]çÏŸ_¯^½#G”/_>00Àûï¿o˜*¼gϲs$²s§pJ‰‡b΅tRàcú"v'NÈ>‰ô˜¯pÔq ƠJ¬”e˜¶ Ç‚ ®^½:(((₫üµk×9s¦N§áîî>eÊ”êƠ«ËΑÈ-Çr%.…R²ÓQưú«O˜ ;+0¹ṕÚUï̃•}:‚́ȮėÁñD6F̣’ƒÉ•(QbáÂ…I6.[¶̀×××ÉI[e.‘ưé µÜ8‹³²ÓQ-Z¤Æ}ûÊÎÆ ââLl o_,[–/Z„±ceŸÑkq0†¸êÜÄMÙQh«»qăÆµk×’o/X° «F"K‹D¤́Rµ}»›il@@€́3³qF±́–®"**ñ-Ü’eŒ¶ª±&M4lØsîIQu”xöÈNÇ*´3AÑ¢–hơÆ Ùç•ØWøJ‰{£·́tˆ(´U8–(QÀùóçMn‰ˆ2L|6„ Ùé¨bcƠ¸I“›»%Üå̉ZáhÖ|̀¹¾YÂ(%₫?ÈN‡ˆ2@[…ăØ±csäÈ1₫ü/^È΅ȱ Ă0%á²ÓIÄ̀µ9ûẉ|>4±1ñZ<)ûÔWü¿ĐY•¶ÇäË—oúôéăÆkÑ¢E‹-)âîîdŸ   Ùi١阮Ä_ăkÙé$"ï½grsâ$Z.Å;ï˜̉Xß¾˜6-!^´sçÊ>;Á>́sz}ç¢ Úè¡—E[…cpp°!ˆˆˆ0L\XX˜́4‰́ÍńVâr(';¤̀|·L¼ă袭߉V4¹pLĐZá¨C¢!N/đBœ¦‡ˆ4K[¿4[´h!;"GTơ•xöÉNÇ´<·v®\ÊŚ'ª›±¹)â:¨s₫w!¢×´U8NS«‘$đ”B"âˆ`ó,ơà́s29 Ç’%¡ÙцM tú\’ˆ’ÑÖàÅ£GBCC×®]»ÿ~œ ‡Èr¢¡¯À Ùé$åpS+n™aĂ~ưÔxÇÙg”̀@ Tâq';"JŸæ ÇÈÈȉ'ơêƠk̀˜1!!!ZµjƠ¿ÿ‡&1$¢äva—wB'Ùé$%Ơª™µiOOÙ'gqb©­©iÀ æ`ÿÿ“¥O[…ă«W¯ °lÙ2ww÷V­Z)ÛóåË·gÏ:<₫\vDve†(qgt–N ,¸Î²Ö†Td7ç775^¿^ö©¥Ä~J,₫ CDÚ¤­ÂqáÂ…'Nœxûí··mÛ6eÊeû5k̃{ï½+W®,]ºTvDvef)ñr,—NZ¼½ÍѸ´6 Gmfe1k±V‰Å^D¤MÚ*9ấ́}ZÜ~úôé!C†hÙ²¥́‰́„øñ<#e§“ræZñ́YÙ§’Ú/sÍäü¡ÄâŸ4D¤5Ú*kƠªƠ»wïk×®µnƯºqăÆvíÚƠ¬Y³¶mÛ^¹r¥U«Vï¾û®́‰́ø@°jÉN'e›6©±cMư­8~Ü,ͼÿ¾?z$û¤Rá$|‰(ˆHS´U86lØ‚ üüü._¾ àæÍ›.\È“'ÏäÉ“'Ov˜§iD&AĐæ°8̣1æ¦ñiÀ ÄïĂ:¨#;"J™¶Öª6~øđáåË—cbbüưư}||d'Ed?bu±âK'íưi°q£gËfîÖß|SöùYOưúj¼hFŒPJÄ;ßpAv:D”2~`È;w©R¥*UªÄª‘ȼÚû¶Wâßñ»́t$Ñæ\<%KZ®íK—dŸ]êľ¶½&ÊN‡ˆR ÅÂñÔ©Sưúơ«]»ö[o½U¡B… Œ1ÂÄ×®]Û®]»ÀÀÀZµj5ʘe¯ÿư÷ßAƒW©R¥K—.‡–}aˆ̀ăx6µç\ ´Nú40SCááj¬åÂѹ™ÿ–­ˆ£ûôøQv:D”ͳfÍj×®Ữ½{ïß¿Ÿ-[¶́Ù³_¿~ư÷ßỏ¤ÉÊ•+3׿Œ3ÆŒsé̉¥*Uª¸¹¹­_¿¾oß¾i/{½{÷î;î̃½;_¾|ÇïÖ­ÛîƯ»e_"S}…¯”¸úÈN'U‹«±Ù:8jöïä¹Ư¾m–&Åk&ûS'Î'ú'₫”%£×’€€€̉¥KOœ8ñÚµkñññz½₫Ö­[S§N-S¦L™2e?Ñ6Ï;WªT©:uêܽ{×°eâĉ%K–ụ̈Ë/S{Ë£G*W®\¡B…¿ÿ₫Û°åäÉ“åÊ•«Y³f\\\ºG,Y²¤́ io._¾,;û=”ÿdç’–J•ÔDÍføp 4ª×›ư[tÿ~5Ïß7K“ÿ₫«6Ù¿¿yÏ̃œêÚÊ·¨máoQ³sØÏzmƯq\¹r¥^¯:tèèÑ£ .¬Óéøúú1â³Ï>‹ưé§Ÿ2Úæ5kâă㇠’/_>Ă–‘#GzxxlƯº5>>>Å·¬_¿>**ªÿ₫•*%,¢úæ›o6nÜ8""âßÿ•}‘ˆ2ï$N*qNZ₫ùÇ®]+û´ŒS±¢/_n–&ʼn0ÍÔ¤EhsÍt"Rh«p<}út¶lÙºwïüK]ºtÉ‘#G‹Ê¤íèÑ£NNNAAAÊggçºuëFFF;v,Å·üơ×_:.Édă_ưuXXX… d_$¢̀§̃ŒÍ²Ó±ºû÷eg`œœ9ƠøÉ³7ÿô©́LÓ̀QâwÁ¹{‰´E[…#€üù󻸤0I““SÁ‚£££3Ô^¯¿xñ¢——————¸½dÉ’®_¿â»₫ûï¿Ü¹sçÏŸÿï¿ÿ₫₫ûï§M›¶qăÆ´ûDÙ„(D)qET”NªîƯSă.]̀×î³g²Ï,ằ·xŒyû¶¼¨Ä;°Cv:D”ˆ¶æq ܱcGTT”»»{’/={ö,<<¼zơêj0:::..ÎÓÓ3ÉvܸqCv ö`p̃ÁpKˆÇF 7©9K3ÇÈmˆ›7¿₫Â,Íú qx¸9Oß́ߢjª‘‘æJµ];Ïo¾I¸ª«VƯ®VÍ}×÷“È=»!˜2eJ½zơ ñ AƒnƯºµ~ưúÍ›7·mÛVîE#Ê„_đ‹×~^éÿù#S*½H̀GËsñxx ¥¿lMáí­Æ¿ü‚+dŸcrÆçŒvJøƠ}—ưá/;#"¤=zôHqû­[·fÍ•dcXXXÍ53t3ÏÅÅÅĂĂ#ùŨ¨(Ê8k‘««kö́Ùu:]pp°¸½Aƒëׯ?wîœÜ+F”9ÑY‰—̃Y ¹ơ+—ùÚ»)W®,û̀̉S¥ ví’„L«o¯n^°¹!®‹º7À'­D ¹plÑÂâ«Vøøø\¼x1I¿ICŸ¡Ô3̀—/ߣG “) O¨cccAdkẰ÷®,JœóÊlS#ñ(íßq G½‰eZµj°•5°ÊÆ”U⛸);"J ¹pœ6m¥Q¿~ư°°°}ûö5mÚÔ°E¯×‡„„äÎ;000Å·ÿüóÏçÏŸ/)¬k˜»§T©Rr¯Q&ˆ³đ́ÄNÙé¤cÑ"5vÜÂQ¼'zô(ªV5K«}ûª…ă5xÿ}Ù§™¦/ñå8Œ3ÄưÑÈΈˆ´7Ùµk×ÎÉÉiΜ9O_Ï]¶hÑ¢ˆˆˆ6mÚdɒŰÅ0d[tÖªU+cÆŒQ†]ÿûï¿?üđƒ‡‡GÆ eŸQ†‚:j˜kágK Gáo7“‰ë æÍ+û,Ó#–¶æ›‘§gO5¯³6ÅX%^ˆ…²Ó!"@úÇ=xđàÆz½>ůft î >|êÔ©-Z´¨S§ÎƠ«W:T¶lÙ>}ÔUzCBB>ùä“%JlÚ´ @é̉¥?ưôÓo¿ư¶Q£F•+W>zô¨N§ûꫯ̣äÑđHT¢”ŒÂ(%‚!²ÓI_LŒeÚ5_ùe … [:ó?ma!èj¨v ÷H7aS34“‘£ÓVáøđáĂ¡C‡îß¿?}21ÓMÏ=óæÍûÛo¿mÙ²Å××·K—.C† 1̀È“~ưúy{{/]ºôÀ¹sç®_¿₫G}T¢D ÙWˆ(Ă&c²ÏÀ Ùéd€™à.]’}B™e[%¯Y… $;fºhæzèMkˆL¥­Âqúôéû÷ïwvv.W®\îܹufê yóæÍ›7Oí«M4ỉ¤I’mÚ´iÓ¦́KBd’8 Ä%`ù́z`³ƒ£M;sÆŒµh?₫Hˆ_¼ÀëùÇ4*²ÉNˆÑVáh¨—/_₫Ö[oÉÎ…ÈÔFm%₫ ÉN'}–C¯ơí«‹áăe'”ơXß Ă—B©sàœhD2ikp̀“'O*V¬Èª‘È\ÄG{ù‘_v:é[·N“­ÂéÓ²ÏÑ8=¡û́‘ơi«p|çwÎ;—öà"2̉&lRâ^è%;Œ©]Ûô6çÏ«±­Üq´•×̣~ÀJ,Î@DÖ§­>;w>sæLÿ₫ư»uëV¹reWW×äûT5ÓD¸Döm>æ+±ø°OË–/Wc3wp´­Ù¿•<ú)!¾v E˜«á¾}Ơ‡ÔW¯¢hQÙgj„üÈw ñIœ¬€ŒÍËFD梭ÂñÑ£G/^Œ‰‰Y¼xñâÅ)?YËÄtS#́Ă>eZ€:¨…(Ù9(m3gÎ5£Í¬Álˆ; Ă*¬’‘#̉Đà˜ØØØđđđ *°j$2Ñu\Wâʰ± Q³ǶmÍƯº¥Ö1´s>>²Ï(ă>†:çäj¬–‘ƒ̉PáŸ%K–ÇËN„ȶơG%₫_ÊNÇXœú;-ÒüpV¼Â‡Ë>;£5B#%^¥²Ó!rD*³fÍÚ¼yóóçÏï̃½[v.D6l!*ñXŒ•±Ä±aC‹¦P!Ù'ª báhÓ€lÅV%îî²Ó!rDÚêăØ³gÏóçÏ4¨}ûö©MÇ$;M"íú(quT—N\¸`•ĂØÊ\<yóâ₫}K4,ÖÏ?₫ˆ~È|SE Ẫ²³ r,Ú*›¾^ ë—_~ùå—_R܇Óñ¥á=¼§Äû`¹QÊ”5«¹[»OÚVáX¹2¶n5½{‚·ñ¶!®ƒ:gqVvFDE[…c‹-d§@dĂă¹ø̉Ec?àiسGÍßÁÑgÿV²U Ç—/‘-›Û®P'OÊ>ÁŒ«‹ºJ|çd§Cäp´ơ¹2mÚ4Ù)Ù° )ñïø]v:°I]æï"¶²̃ A’9Àͺc@€Z8₫öZ¶”}²FûÍÆlCü >™²3"r #zôèQhhèÚµk ëVGDDÈΈÈÁ%n[º¿`›o¢ë×ÄÂÑÓSö¹f„X8{s±7xưµï;|§Ä31Sv:DEs…cddäĉƒ‚‚zơê5f̀˜­Zµêß¿ÿÇegG¤]âê(;Œ‰¶dë¶;û·8Ư¢¹ÏÂÙY·o—}¦ˆ@%‡Z‘¥i«p|ơêƠ€–-[æîî̃ªU+e{¾|ùö́ÙÓ¡C‡çÏŸ›Đ<‘=›ˆ‰J<sd§“Io¼aF¯_7½ ùl·üµ€ưدÄMĐDv:DD[…ăÂ… Oœ8ñöÛooÛ¶mÊ”)Êö5kÖ¼÷̃{W®\Yº”3¾¥@@]%d§“1;v¨qÿ₫™oÇÎY`¾"q8¢eoú[’Øă';#"G¡­ÂñÈ‘#ÎÎΓ&MÊ™3§¸ƯÙÙyܸq9sæÜnsTˆ¬BjPÙédŒØÁ®_?KÉE[Ă¥Ëô… 3ß¿á7%®…Z²Ó!rÚ*Ï=ëçççí„®nnn₫₫₫W¯^•#‘ÖåC>Ù)d̀† jœ+—%d[sñX^ăÆjl[ăcxỂðe‰lœ¶ GgÏ¥öƠ‡æ²́§ ‘Mju…¾eX&; ³ÅÂñ­·¬sœóçeŸiÆ À%‡q²Ó!rÚ*Ë”)sûöíS§N%ÿ̉Ù³gõ¼YºtiÙ9iÎ.́Râ.è";̀kĐÀ₫÷ŸÛbáhá‰'Í:§¸µÍÅ\%₫₫';"‡ ­Â±}ûö:nèĐ¡§OŸ·Ÿ>}zÈ!ZÚеDV1 ê´ù]ÑUv:&>!µÈÈqúC[,Åœ/^4{óâ5Oü{×6Gq%¶¹̃½D¶H[…c­Zµz÷î}íÚµÖ­[7nÜÀ®]»5kÖ¶mÛ+W®´jƠêƯwß•#‘¶ŒÀ%^ Û›v@“a₫©¿‘x›€Ù§›qI17±p´¹nHøÀÍÍí×_íׯ_5FŒ±{÷î—/_ÊN“HCÄÇpqPv:™$Œé×Ï2ǰơec ć́–XmëÓ€¬À %B́tˆ́“äÁ1©ù÷ß·mÛ¶}ûöëׯpuu­W¯̃»ï¾[§ŃJ/n­rس–ĂnƯI˜8@#×ÓÂC>-Z`ăF °ô%}đỵ$ÄS§bÄ“ZK…̣ÏQ¦Œ&Ö̀Ü%å™Ôhä§̃8́g½ü;)*_¾üđáĂwíÚµaÆ₫ưûçÍ›wăÆƒ ª^½º́Ôˆ$k„FJü~¶ÙḈß^^Ö<£3gdŸ¯ ú@t<ÆËN‡Èi´pT”)Sæă?;vlÅ<₫\vFD’mÇv%Ó1ƒ  ‹5}ḉ“37 ¬:hà́,ûỒa)ñL‘̉îà常¸ƒnƯºuçÎ?'Ow̃yGv^D2MÅT%V–Y³E‹«1§₫΀+W,Ôpÿ₫˜;7! CÆçØƠ(q qB̃ÆÛ²3"²++“׋̃̃̃;vlܸqåÊ•íăb¢̀‰‘J¼Ke§“y ªq{+LC™3§́3Ö:±p\°3f˜ÔDqĐ̃†8ÁéHd^Z)S¬;uêd¨œ´₫HÈ ÄA£…PHv:&±Ø×TØîj''ÄÇ[ôåÊ©ñÂ…6\8æAÓ!¢ÔH.Y/¯ º(±íÎÂ#‡­Oéåê'O¬v4[ïL¾kÛ¡!®üa!2#É…c5”z±sçÎ5b½Hd ›¾ăxù²÷êe±Ă>¬ÆŸ~ùv´àƒđƯw–>H@́cv‘¶h«Ä‡pHv:DvEráh¨œœ\]]₫8!₫ơW´n-û¬M0Cfb¦!₫Ÿ~‹oegDd'4ÑÇ1>>₫êƠ«²³ ̉4ñÆÉûx_v:& Ç-vñÑB6|ƒH\øi‚!²Ó1••VC6â †Í(VL²Đ}Zq-q%qU Ơ#¡»‚Øë‘ˆL!¹p,Q¢„́+@df`F±­G̣ßµk²ÏÏ2́© ¶¤C8¤¬@ø>̃ç¼i›!–̣Ê|à¶KyT  *ªÊN‡È°p$̉4û»MjơCÚújƒ́Ù­pêƠƠX,ñm”X,̃Ư-\N$ G"M?ùÄÛ'”èh5¶ÂÑêgaÅÇ-H[  5ly 8‘6°p$̉4ñ6‰kshöJ< Ód§CdÛ$AAA+ÎÓ¦ñ§(xƒD¼qb»Äns–™Äú5±´̣ô”}̃æ –¿‡,8FÊÎÆÇX…UJ<#d§CdÛ$OŸ>=tèĐÍ׳>DGG¿²̉ÔÀDZ7S”¸:ÈNÇ<^¼°Ö‘́o²Coo뜳³ïÚ%û¬Í¤(qBd§CdĂ$O^³fÍí۷׫W/gΜ†-+V¬X»vmo9~ü¸Üœ‰¬ăs|®Ä+±Rv:fV¦Œ…đà́S´$û+‹-lv”B)C„ NN”i’ï8~ñÅM›6Í›7¯́ë@¤-[±U‰K¢¤́t̀cƯ:5¶lG»wïE›ïÔIoß–}²æ€ñåc<–‘­’|Ç1O<ß~«®=Đ¹sçQ£FI¾*D²5A%>;¹Ë.vp0ÀZGÍŸ_öyÛñË/ ñœ9øê+Ù ™ĂŃlˆ††8—aÁxˆ́˜¶FU÷êƠ«º}LœAd‚ÛHt“''rÊÎȘưÍ₫­œ‹R8>x//Ëê7pé’́ó5·¡ªœ œ(s´ơ¨:..îĂ?\±b…‹‹Ë»ï¾Û·oß?ü°qăÆY²dùå—_úơë'V“Dv©)ñ<̀“وř-B,í́cçhâè¥?₫}âæÓ]”øK|);"Û£­ÂqÉ’%ǯX±â®]»¾ûC‡2dæ̀™»ví <~üø’%KdçHdYÛ±]‰?ć²Ó1±«\•*>˜8?¶‹æ«dµæ‡=Nn° Ë”ø |!;"Û£­Âqß¾}:næ̀™ụ̀å·çÍ›wÖ¬YNNNươ—́‰,h$F*q_ô•9={fŃÙë4‡Ù³[í³dQă;dŸ¸Y•Gy%₫¿ËN‡ÈÆh«pn'«%¨„JJ̀u«‰2D[ă ›4ịÛo¿ơéÓÇ××·X±b®^½zëÖ-Í›7oÖ¬™́‰,¢"**ñ\-»,,%gOsñ(gtåơkƠ±MV±K»!aBÑj¨v‡egDd´uÇÀ”)S&ÓăăsûöíƒÆÇ²Ó1¿o¿Ucktp$sÿƠ₫üSv6PU•X\ɈRä…ăŒ3ÆŒsé̉¥*Uª¸¹¹­_¿¾oß¾i,Q#̉ëơŸ}öÙÓ§OeŸÙ§y˜§Ä³0Kv:æ'vŒkØĐºÇ ”}ööàÓOƠØ₫º9'âQ&è!¢ÔØá¶hÑ"ŸmÛ¶-Z´hûöíƯºu;uêÔ7ß|c̀Û—,Yrägj ‹˜ơs¸ ÈNÇ"?–wlû›ưÛ \9kÍĂC7o–}î–á/%>«ö%²9-=zºvíÚưû÷ˆˆˆÈtSkÖ¬‰2dH¾|ù [Féáá±uëÖøøø´ß{áÂ…3fpC²O¡̃̀Ù ;ưL~­ti«椰ưMâh`¯±<ÿBk´&jÊN‡HÓ4W8FFFNœ81((¨W¯^cÆŒ ĐªU«₫ưûg¨c¢âèÑ£NNNAAAÊggçºuëFFF;v,7ÆÆÆ1"wîÜ#G”}UȉC8K ³ÔHđóÏjl¥â\<öZ8çuæŒؽ»_¼(ûô-  ˆ/Ă&;#"í̉VáøêƠ«,[¶̀ƯƯ½U«VÊö|ụ̀íÙ³§C‡FvLTèơú‹/zyyyyy‰ÛK–, àúơëi¼wö́ÙgÏ}¬rHq†âvµ*Éà–'ưvÙÍ@B”˜7‰̉ ­•c.\xâĉ·ß~{æ̀™9sæÜ°aƒaû5k>ÿüóßÿ}é̉¥ưúơ3¾Áèè踸8OOÏ$Û=<<ëÍ+7­yt«]Ï“'ư”8<<Ü„–ŒU诿²X÷ˆVưÍ]¹¬Ov́ˆ¶ôƯƯ$s̃< f kåŸúÂ(üúñ¬ùÍcö÷[ÔÊ5²·¥2M[…ă‘#Gœ'M”3gNq»³³ó¸qăvîܹ}ûö †;”®®®I¶»¹¹xœJ¿ưçÏŸ1¢páÂC‡Í܉„…ñI‡™ùùù™̃ˆvøĂ_‰ÏëÎơ+jå¬|=sæ´Ö…Ï{+Ÿ£”oÑ\§Oç²úq­v¦V¾¤«±º=Úâ¦~MÏÀƯ¬ÉÎ~‹ZỴơäwˆ„¶UŸ={ÖÏÏÏÛÛ;ù—ÜÜÜüưư¯^½¡===u:]ttt’í†éu<Äá‚‚©S§̃¸qă믿Α#‡́KBvè:ơ‘( kWÖ±w¯sGKùï?ëçí·Ơ86VöY[Æûx_‰Ïâ¬́tˆ4J[…£‡‡Ç³gÏRûêÇsepäw£¢¢(ă¬EGY¹re¿~ư*T¨ ûz} €úwª8‡œ;ĂI(]´ơ8ÅÖ9B7G$KµêÉN‡H‹´U8–)SæöíÛ§NJ₫¥³gÏ̃¼y³tƧôđññ‰ŒŒ4T CÿŸäû_¸pÀ¼yó^kƯº5€?₫ø#  Y³f²/Ù¶Ä<‡:ÆK\µÂÎüñ‡çÉcơĂÛëjĨ{Oí¸pWoÚƒ=²Ó!̉"míÛ·×étC‡M2åôéÓC† Đ²eËŒ¶Y¿~ư¸¸¸}ûö)[ôz}HHHîܹSZX¢hÑ¢M«]»6€ 4mÚ´nƯº²/Ù6ñvăøĂ„–(qfVû.¥Nåxû¶́Ó·¤Q¥ÄÑQv:D£­§9µjƠêƯ»÷÷ßߺuk»ví:pàÀ¥K—âăă[µjơî»ïf´ÍvíÚ-X°`Μ9o¿ư¶aL̀¢E‹"""z÷î%KÂøËgÏƯ»w/K–,… ª]»¶¡RTœ>}:44´råÊÓ¦M“}…Èæ]Á%næ²Ó±qLj—.Ö:ª8}Ï’]½ºu&â+†+WdŸ¸å}…¯&a’!^…U+±RvFDÚ¢­;† ¶`Á??¿Ë—/¸yóæ… ̣äÉ3ỵäÉ“'g¢Á >ụ̈åË-Z´øâ‹/zôè1cÆŒ²eËö¦• iÔ¨Qÿ₫ưeŸ=Ù¹êP«™ïñ½́t,HNGG˜ư;ùÙ=jcÿkÖȾ–Ô ½”x†ÈN‡H[´uÇÑ 88888øáÇ—/_‰‰ñ÷÷O±3¢ñzö́™7õß~ûmË–-¾¾¾]ºt2dˆáî#‘5‰Caz£·́t,höl5~ë-kU¼ă˜?¿́k`IâưÔƒQ¥ùñÇ<8!1ï¿oRkZ¶‹À†xfÍÄLÙiˆ G=:}úôíÛ· (àăă‘â=Æk̃¼yóæ©>l̉¤I“&MRûjÙ²e9/#™î=¨ă &b¢́t́‘X8Ú·"EơÇg¾©L±úsrkk¦ỆñS0e$¸đ,QÍ=ª6ûZƠD!…Ѳӱ qŒJ:V<đ­[²O]†íÛeg`‡6a“Ïe§C¤!Ú*;V5‘FtGw%î„N²Ó±¬)SÔØ¾»j‚ÿ¢{3UØ'qf₫X ;"­ĐVᨬU½mÛ¶)‡Ï5k̃{ï½+W®,]ºTvD™±ê·î ¬e‰…ăÔ©22đơ•} ́ÓÖ­jœ©Á¶DœáC|(;"­ĐVá˜öZƠ9sæÜ·2dƒúC°ß}LhÉ6Áü܃ ö Ä9BQ%ăñăV;¬8›ă_ɾ–WÅ•x5VËN‡H>m–X«H®Y˜¥ÄbOG{%Â7Ë ÇâÅ3ß­Çï±̃ªÊâbgV{u”¸:ÈN‡H>m–X«H"qú·vh';kxúT̉÷î•}êÖåï/åÜóæUcGèæ  )ñïø]v:D’ikpK¬UM$ÑT¨ƒ×À®—ixǪU­{́ÇeŸ½¼páB__ß9r¬_¿₫Đ¡CóçÏÏ•+×̀™3õ¼);e"hÖJ<Cd§cmÑÑRá‚́   V/óäQcGëæ Ôn_ăkÙéY‰¶ ǹsç>zôh̃¼y 4ĐéÔakAAAóçÏ ;w®³³s½zơ¾øâ‹¸¸¸?ÿüSvÊD°”xfÈNǪ"#Ơ¸fMÙÙ8²Ë—­Lá÷´Ă9uî̀Ïđ™́tˆ¬D[…ă±cÇ *T®\¹ä_*UªT‘"E6lHøx®V­̃q$-¨‚*J,Î₫í ÆSă¯¾’äkáx¾üRW®”Ơ½µgÆGøHv:DÖ ­Âñ₫ưûiÏ+ùøñcCàáဓP’ü¿•x$$N~-Ǽyj,yx„£ÍÅcP €Äƒ£ÆcÇf¾ơ~Sâ9˜#;"kĐVáX¡B…›7o>}:ù—Ο?íÚ5eè̀Ñ£G*THvÊäẹ̀#¿/ÇrÙé8ÿUcÇ,5sÖ—.ÉÎ@†A¤Ä-ÑRv:D§­Â±yóæ tàÀqû‘#G>üđC½^߬Y3½^¿ÿ₫qăÆ999Ơ©SGvÊäĐ"qw•—aƠÉP´`ß>5î×OF<‰c̣³>qÂúÇưç< eÑ Ùfc¶ÿße§CdqÚDZE‹Ç[¹rå|P @¢E‹êtºk×®Ư¸q@“&M:tèp÷îƯ={èÚµ+P"¹̣"¯ïÅ^ÙéH vp»»Y8‰cÉ’’/‡I¦r¬XÑÊÇÿßÿĐúơ¤cÇbâDÙÄê¦bª28¦*ưƒdgDdAZ\«zÛ¶m3f̀¸rå²%_¾|C† iƯºµN§»ÿ₫ÇÜ¢E‹;ÊÎ4e»~¥åhs•Ơă8₫̃R^ÚÊ’µ0ëơƠÊù]’;7=’ ư[TùghÑ¿K¸ée‰om₫Ô§z4¿zµm]O›à°ŸơÚºăhШQ£FEFF^¹r%&&æ7̃È—/Ỵ̈Ơ¼yó®tÀÁ{¤=bƠx Ù½Kàî.éÀJƠHṕ¹Đ¥ú¿tB'Cœùîá́Œˆ,E[}=:{ö́åË—ăăăóåË!;#¢D6b£ç@øËÎH‚…Âú8ÿûŸ́lÀ“'R+.ûß²/‚ ¡>»û,Éi®pŒŒŒœ8qbPPP¯^½ÆŒ U«Vưû÷øđ¡́́ˆ´@ %~ŒÇ²Ó‘ĆàøñDz³Ii₫W²±{«ø]áPöA)æN)JvK[…ă«W¯ °lÙ2ww÷V­Z)ÛóåË·gÏ:<₫\vD˜éJ\%³ ‹́Œä¸'ư®J|¼kfV *T{ü€5̃°!óíØ´Ú¨-¾ E΅Œˆ,B[…ăÂ… Oœ8ñöÛooÛ¶mÊ”)Êö5kÖ¼÷̃{W®\Yºt©́‰0 Ă”8 Ø9@T”W¯.) qHµ#â¹ÇÆÊÎÆq]Á%®ÎGöI[…ă‘#Gœ'M”3gNq»³³ó¸qăræ̀¹}ûvÙ9’£SºÀ耲ӑF\&DZGNâ˜üÜ%?^׬‘z5ä)¢~PG.ÏÂ,Ù™Ÿ¶ dzgÏúùùy{{'ÿ’›››¿¿ÿƠ«WeçHn%V¦;ï¾Să $%!I¹sK½R‰w%_|¡Æ¸ö â2.+ñ ‘‘ùi«pôđđxö́Yj_}øđa®\¹dçH-jg®i˜&;‡·¿́ ´Aœ I||/Éùó²3ª-Ú*q7t“‘™i«p,S¦̀íÛ·O:•üKgϽyófé̉¥eçH뜇ú‘(ött4ªqϲ³!‘øoc]¥JÉ>wmX‹µJ¼ Ëd§CdfÚ*Û·o¯Óé†zúôiqûéÓ§‡  eË–²s$Ç•y”x7vËNG&qÊM̀à(.]B’ˆ“̣ˆ]ĐdLVâ²(kBKD£­Â±V­Z½{÷¾víZëÖ­7n `×®]Í5kÛ¶í•+WZµjơî»ïÊΑÔŃ_ĂÇđ»v©q²³c©6p‘¿ X»vj̀;ÁÁê}à›7Q° ”,Z·Æ¯¿&Ä;vàwLjͦ5DCñål̀₫ÉNÈ 4wÇÑ &&&wîÜ•*UªQ£«F’n ¶(ñiœ6¡%{đÛoj\gÏ–x94!‘Jü1¤/ÊIdZ¹ă÷ḈƯ»÷Æׯ_üø±‡‡GáÂ… .Ô¼ysgggÙ9’ƒ»36AÙéÈ÷à́ öí3½ û1`Lˆ÷́Á!R²×Ú´Iö5‘Í ^P—‰‘S0Å´&‰äÓDá¸iÓ¦ï¾û.Éä̃?~üøñÿư·uëÖyóæ <¸iÓ¦™=Q&Å f/ö*/7c³́Œ$'ËjÖLj*ɽÚơÇî奙?-4àÎé0ä*¦²p$; ¿p\¼xñ´iÓäË—¯S§N¥K—öơơÍ“'σnß¾}îܹ+V\½zơÓO?½}ûvï̃½eçK%²)ñùy¬Ÿ|¢Æ3fÈΆ´gÆ tï«Ù¤…Q“0É—Gùñ¯́ŒˆL¢Óëơö́Ù6mÚÄÅÅ 0`À€Y²dI¾Ï«W¯,X0gÎggçơë×kđ€€€°°0ÙYØ•đđp???ÓÛɨ ØĐ­•—zÈüa1#S®§8a¢Ô_B*M`³ä;Á²¾EqwÇ“×Ó¾Hư·1Ë7‰&.©™(7ÜÂ-_øZ?{ºá°Ÿơ’ǬX±"..®qăÆƒN±j%K–>ú¨yóæqqqË–q~²±jŒCœ́t´¥P!©‡?p@[´|-4‚×A«öC]³´0ñ)QæI.<À˜І}:$7ar½¡~[6@'Ù?,Z ¡–üœŹÆÇ‚É@¼[¶d¾“‰ưÖ¯—˜ˆVÔDM7¸)/c±́Œˆ2Ọgá½{÷œK–,™îÅ‹Ï5ë½{÷ä&Lăü ÄI–qXß~«ÆmÛJME,}%<øÓ"±p”:>Fü>‹HG&.Ó}d§C”y’ ǘ˜ooï¬Y³¦»§‹‹‹··÷«W¯ä&L"?̣+ñ p ˆöœ=+;íÉ]¥¢ë×eg íÑ^‰[¢¥́tˆ2I₫Ó7ØÚL{™âNƯ…ºœƯ ‘‘&,]ªÆ£GËΆ̉vû¶Üă‹Kù\º$7­X…UJü;~—Q&É/‰´¦*(ñyœ—VˆÏ'N”"0Pv”>­NÑR¨~‰C­‰l G¢Db WDÅ(!;#­ĐЬÎááj̀‘1¢zơdg bE5̃¸Qv6Ñ]Å—bId+äO~÷îƯ@ăî<₫\v²dÿæaÇqÙéh…¸`Œü%œ8¤:5-Z`÷î„øØ1¼ơ–Ä\rçÆĂ‡²/ˆöè¡Wî5vG÷nè&;#¢Œ‘ÇQ¯×GGî\åä²@Lt>æËNGC´µ`ŒX8J­4G3«‘øiơ¸qrsÑ–è¡ÄµPKv:D#yå˜ .dô-%JhưÑ¡ĂÎ&o9ÖYóÀ^׉I.×SC Æh.@SËr('0Çi$düJC—ÔÄ7qÓ ³‚Û÷ơ”Âa?ë%?ªÖ~HƒëÄC̣‚1d¼ắh¡]q°jâ‚(hǦ’ư‘ÿ¨H £±·A®#̉Đ‚1IäÏozd9ƒ«ñ¯¿ÊÎFKª£z!¨„}/dgDd,~:á lĂ6åå:¬“‘¶hhÁ/^¨1GÆ$Wº´́ T⟜”'‰ëPçFÿ_ÊN‡ÈX,‰àw%̃í²Ó¡4qHuÚÄk"{p±ăµkrsÑ¢ÿáJœ Ùd§CdäèÆc¼»Ăư¼#;#m™3Gkia¨8+ ü™´GK«xzª1{]&1c”81›±YvFDécáHn&(ñc<–æ|ô‘‡†ÊÎ(†4­fM5ÖÀµúç5îÙSv6Ú#₫Îi†f²Ó!J Grh⤳1[v:d„¨(ÙØ-[dg5>qBv6Úăwqđ¨(;#¢t°pW›V8̣IDAT$Ç5sÅ—ƒ0HvFóƯwj­NÑ5¨C‡ª¡́tˆ̉‘”'<•x¸ {YrHuj4veScqÑsRFaq*Ù†h(;#¢T±p$G´kÄ>éâøRˆ“đie­aÎÅc ¬P¿¾=*;MÚµCê.́ G¸́ŒˆRÆÂ‘Q{´Wb>¤NͧŸªñ”Öb”/Ÿ́l´J{…ăO?©ñÈÎF«₫ÚÔ₫&´DdA,Éሿ‘?ć²Ó¡Œ “-È’EµQ8.¬Æ§OËÎF«̃Â[•QYy)₫}K¤R8®]»¶]»vµjƠ5jÔÇÓ̃ÿùóçK–,iÖ¬YÅëÔ©Ó«W¯ưû÷Ë> 2ƒƠX->‡y²3̉¨éÓƠX+·)îß—A‚w„™ơ’V…ú  Ö\ÆeÙ%å…ăŒ3ÆŒsé̉¥*Uª¸¹¹­_¿¾o߾ϟ?OmÿØØØ=zL<ù̃½{5jÔ(^¼øáÇ{ö́9wîÜŒ–´¨:(1R§aØ05ÖJGQåʦ·AÖıƠF:†cJü̃QRö_8†……-Z´ÈÇÇgÛ¶m‹-Ú¾}{·nƯN:ơÍ7ߤö–5kÖœ8q¢R¥J!!!óçÏÿé§Ÿ6lØàéé9wîܳgÏÊ>!ÊŒĂ{°GvFD*û/=êää¤lqvv®[·nddä±cÇR|Kxx¸««kÙ²eÅ%J”pưúuÙ'D™ô>Sb>¤NÛˆj¬¡cıbEÙÙh›öVƒO«3"‘J\ơd§C¤²óÂQ¯×_¼xÑËËËËËKÜ^²dI¤^.\¸pƠªUI6>}@aqp ÙqMêÅX,;Ê”½{eg`;ÄßT)}}Ơ˜ăăÓæ¯¾è«¼ô…¯ ™“‹́,+:::..Î3Ù\¹nÚ×sÁ á­aƇ?’o?!×Ö¿ ‰ß¢– ^®S§´s¹‚‚|öîÍiˆ×®½]¹̣‹ÔöÔà%µ²‘¹Èo‘!¾ƒ;ă#ÇwêéÖx=MÔH́iáǾ¼p4 vuuM²ƯÍÍ ÀăÇÓm!..nÅ_ưu\\ÜôéÓ½½½9nÿ67??¿̀½ñ!®À åe¤s$2Ù’]Iăz~ưµO›–È-;Ùd ̀ô÷ƒåh0% æ¶z5||âÎ}cbl#mYôĐ+OK&ä™0>ÏxSZăơ4Ẹơäwˆ„?ªöôôÔétÑÑÑI¶?}ú¯ï;¦áđáĂÍ›7ÿꫯ¼½½øá‡&MÈ>!Ê0/¨½vb§́t(³. Ú*$;[¸FˆËư¼z%;[đ¾Rb±Ë ‘,v^8º¸¸xxx$¿³ _êK–ÅÄÄ|ơƠWƯ»w¿uëÖG}´uëÖ5kÊ>ʰâ(®ÄMФÈÎHëºtQcq™8ù~øAçÏ—-çmß²%óí˜[ï̃j<đ§gFyC}̉Ơ dgDÎÎ G>>>‘‘‘†JQaèñă£<2I,>>~èĐ¡K—.­_¿₫; ¤̀ËC6d>æ_‚:óßfl–‘ X¡>ƠG²³‰…c` ́llA¯^j,^=Ù¾ÿ^”-¸uùŸ•X).iMd}ö_8Ö¯_?..nß¾}ʽ^’;wîÀT>~–-[¶cÇN:Í;7»’¤q0@‰9ÿ1₫>̃|Sv6Iܽ+;[#₫¹û믲³!“ˆăùÄơ¬‰¬Ï₫ ÇvíÚ999Í™3ÇĐ¯À¢E‹"""Ú´i“%KĂ–gÏ…‡‡éơúåË—çÊ•ë³Ï>ËôAI:±3ĐR,•mç₫ûưwÙÙ¤&½®É¤}âí÷ß—-(†bƒ0HyéäŸƯ¤Yv>ª@†>uêÔ-ZÔ©SçêƠ«‡*[¶lŸ>}”}BBB>ùä“%JlÚ´é₫ưû×®]Ë‘#GçΓ·ÖªU«.b/0̉¤·ñ¶WDÅ®è*;#Ûpë–+&;‘¸Dø–̉V­–D :u‚̣ûuíZÙÙØˆÙ˜=s ±úá> ÓLk’(3́¿pĐ³gϼyó₫öÛo[¶lñơơí̉¥Ë!C 3̣$g¸ïøüùóÿ₫û/ùW9DFû¾ÂWá/ååq—‘moÿøcÙÙ$!vÑcáh¼^½ÔÂñ·ß`Ü4´ÖQ¹2₫₫;!>x5jÈNȈ³ó|ƒoú£ÿxCvRäptz=û~™Y@@çq4¯đđpăg R¿Â+Çøë(CR¼:a¢ÍưVđ̣ÂÇZMÈà·¨ơÄÅÁåơ÷³fظQvBª[·P°`B́íû÷“î ÑK*Û¨…ZÊKă{oózĂ~Ö³ŸÙ±jlæ¬';ƒ´)U#eˆ³³oÚ$;›D PăˆÙÙØ¨YE”—œÙ‘¬…#ÙR(¥ÄUPåhe‰^í{ï=5̃°Av6ià,vdØ054Iv6¶ă*®/Ù‡›¬Œ…#Ù‰‰˜ơ©Á‘‘-Ù,̀q©¥p€'Ô˜3ªNÙ¤j0´côhÙÙØñ ơr,ßí²3"‘́ÁU\‹±ÊKÎÚ˜!₫©ÆuëÊÎ&¹Tc%^±Ơ«eg“”‹Đ—äùsÙÙØ”§xªÄĐHv:ä@X8’=(†bJü7₫Î|CIëÓ7Cªßà̉ ễ]Å\Äï7±¿¥Ë®ó¡®½ÉÎd5,Éæ‰¿1cp%T’‘‰VcOOÙÙ¤™bÇÙ$Ơ¤‰ïÜ);[ÓưÅÖy‘WvFäX8’m{ï(q䙉™²3²1={ªñ¸q²³I[á²3 ókĐ@W­’­ E¨G âs|.;#²,Ɇ}¯wB½MÎê‘a?ư¤Æ&ÈÎ&¹# 'vp̀±4ÓơëƠ¸cGÙÙØ ±K÷LùĐQúX8’­úÿ|u=qˆÉqj¿eg“"±ƒ£xw”Œ'^·eËdg“”»{¢—‘‘²²A¡NtÚ₫;́ G²U•QY‰¯à́tlRóæj¬É5|T9â}<ñzjÆ=j\­́ll'<×ạ’eÈ¢X8’M3.Æâ¢(*;#ÛóèQ¢—Y³ÊN(EZ_ÓÆÖ„„ÈÎ AAj|é’́llS´é₫ÊKÖd9,Éöˆ¿;¢c/°ë[fˆ·v₫Ô~·¨âÅeg@ô¿ÿ©q²³±Mó1¿8Ô“(!;#²O,ÉÆ¸Cí•yÁ/²3²UçÏ«q½z²³IѾ}j̀¦§½Ñ¤1cÔøçŸegc³.à‚_ÄÅ@ÊΈ́ G²%1đ (/ïá́Œl•8@Y‹ƒ© ÄyRm ñêi²›#€FÂê'‹ËÎÆf‰ĂOàÄOøÉ„ƈRÀ‘lÆ̀™‡yÊK£6…¸†ˆv§oo=åË';[ÖºµkµpܺUûô‘-7öDÏC8$;#²+,É6ü‰??ÂGÊKV¦X·.—k{?²€ƒeg*775¾x1‹́tlØ ÜPâ¨ñegDöƒ…#Ù€»ÎwÅÉÉá‘́ŒlÛˆ̃Jl뼕)#;²qN¨V­ ÈNdžDÁ]Ø¥¼ô„§́ŒÈ~°p$P£H %>ˆƒđ‘ » öGö́²³IĂ.ơcÍ eK5~ùRv6)ÿ@xöŒO&©ú³1[yéïç/;#²üÉ$­'ßù?VGuÙÙ6qNúm vĂdáh:[`áB5®__v66n Àå%'w$³Đéớ+ffaaa²³°âoºá₫5¾–‘ÍÓ Ÿ₫é·™D <<ÜÏÏOvéQ.iˆ–MúiÂ₫åm@=ÔÛuqv7‡ư¬çG̉.±jl‚&¬M Æ]»ÊΆdy₫\vi)YR»u“íÛƯâô·¼ïH&báH%₫v«]o36ËÎȈ“~/]*;›49¢ÆƯ»ËÎÆ^¼ñ†́ Œ"̃ÄY¶Lv6vá1çË«¼t‹́ŒÈ†±p$-«Æ`/¾Ëé€ÍÀ_è¿b…́l̉&Î-)®FG¦¯¤¶¯êGêÔ[èØQv6váđµĂ¹0Wâ8Ä2}ÍÏaû=˜‹X5VA•#8bÈ4Ï–ºÙR®€­ôq„-]XÛÉÔ6¾EáxĂ_ø̃Â-ÙyÙ0‡ư¬çG̉±j,ƒ2GpÄ„ÆHU¸°Ï™c;K5jzÆ ² ^½Ô9«Û¶•½ˆCœ߯í,à,ë”a,ICα(ÆiÙÙ‰¸8ÜP’@“&Ïdg”&q"m?Qµ=ï½§ÆbWí=ú¯_/;;"ªEläÙ¤bƠ¨ƒî ®ÈÎÈ~ÖàØ°Av6é;V‡ “} qñ:k̉gŸ©±Xñ’‰ÄÚñ^pœ5e G̉ñ7—?ü•^8dº/pOx4-. ¢Q·ØïÊbÊ—Wă5kdg“)SÔø?dgc_’̀æÈÚ‘ŒÇ‘ägUEƠK¸$;#»"̃nÜ´Iv6éz&zÅç§_~);{$Öb¿₫*;›tˆÖ·l‘Ưy‰— ₫eÉÚ‘ŒÁ‘¤ E¨Ø/»;ºo‚öoˆÙ˜¼ê¤¿Ø±Cv6Ƙ1C5’=ËqÍws0a‚×®-;»s7+ ‚̣RƯc<6¡=²,I™˜Yu”—C1t –ÈNỄ́Ư‹—/Ơ— ÊNˆ´@œ ñ̀ÙÙ¤Oœ ~ÿ~¼x!;!»s' ̣̉»±[vR¤],I‚.ẹ̀ >Q^NÀ„ođ́¤́Pp°GDÈÎÆ‡©ñÈÎÆ~•(!;ƒŒûææà́1°;ÛB-³>ê¯e'EÅ‘¬­4J¯€ºàƯ&l‡q&´G)4H«UC<²2W´ñÚO‚µ*IßÜåËe'dÖbí¨ăØ?Ăgïă}ÙI‘qÉAósØeˆŒ‘¤óơÜñOºï²™ơÜ´$Û´{=mv™9í^̉Ôh₫R'¿¤OYÓŒüƯ…] ¡vjq†s,beç®QûYÏ;d%ñ8IƠ¨‡̃˜ª‘2!~56Mv6™3§́ HsÚ´Qc˜Ô65@ƒ‡P'bˆC‡ZS,É~Äđ·$™~–̀èŸp÷®ú̉fÖ^Y¼XùœÚ̉ZµRăsçdgc”uëÔø÷ßegc¿<á™|zpN”F dqMÑ´z)/ó!«F‹ª\YĂĂegc#d'EÀ‘,KƯ¨óö~ˆïâ® íQ:>ÿ\Ë”A±b²2̃;²3p$e˪±x+OÛ:tHô’÷-J}]ÔU^NĂ´7đ†́¤H>d)'q2Iç˜]Ø5ódçeçÄå}OŸ–ñÙy‘,Éœ₫ÄŸIOÄ@VÖ1r¤ÛØ,wâ*Úuëf¾Ê(5~úTv6đà׫';Çä©Ñ}Ü×A—äf$9d6QQ\đÀE\œƒ9²órâÓ+2ßâ ›7ËÎÆ‘ˆkù%YEÛrçÆàÁêKÎûi»°k6‰[ £°¸V!9d‡qXƯIœT¶äB.=ô‚gâÄÈ%J S'Ù eT¬°4…››́lÉ»ïªñ_ÉÎ&cfÎTăçÏ1uª́„CS4Ṃi=Öë ‹D¤́ÔÈJX8’©j¢fuT·ŒĂ¸(DÉÎËQœ:…_U_?/;¡ŒoñĂßú̃{OW¯–Mƈ]2Ä®dizè; ÑÜH̃đîî²ó"k`áH™·tĐÄAqc$"'À¶Æeض ÔØöªFß}§Æ#8ðƠưö›'™&ш38%¸5­ÄÊ#8"nY¥:ènă¶́ÔȲX8R&ùÁ¯5Z‹[Ú¡z/xÉNÍd˦Æ;£D Ù eTX˜-*;²=:¡dIơ¥¿¿́„ITÑCŸdæµ(À™×́ GʰI˜¤ƒî ®ˆ¯ăú¬‘c6 11êËåËe'” £ ªq·n²³É0ñ¯đđDË’Çñ=H4%̉ńÖA· «d§FÁ‘2 :èFc´¸±jè¡/„B²³s,üéÓƠ—66ÿẩ%5Á#kêÛW—-“Mf\¸ Æ:áæMÙ 9˜ é¡wC¢‘mÑ1É́ldX8’±̣"o^äM²ñ*®ÀÙ©9œG iï;Ú’o¿UădgăØ*VTăC‡dg“aÅ‹ă Đ׺ÿŒ•á $¹ơ@]‚d§FæÄ‘̉× ½tĐE BÜ8£ơĐAÙÙ9¢Ü¹Ơx×.dÉ";¡̀:TçΕc'tlÖLv6™Q½z¢Aù(#…áÖcGt7† DƯ—àR¢v‚…#¥e>æë û?ó!Ÿú‰˜(;;%~"‡ú6Ú ]\‘¤+XP#muB¾#ueí(Ë/ø%ù‚a_à t[°Evvd*”²Ø¨ƒn’>@œ†iwqWvvK¼¹dk R‹8,FkFRă±ceg“I›6!W.ơeụ̀²r`zèû£’MÑTƯ œe GJj¶é kI¶ÿÿÓC? Ăd'è¸Ê—W×XqrÂ=&µ&ÙîƯjܤ‰́løê+5hĂÏ¢„Å₫ûχ‰Ûù˜¯‡¾7z'Ùˆ@tÿá?Ù Rf°p$ƠŸøS]c4N²ư=¼§‡~ ÆÈNĐ¡)‚ÿ„_³qq²2…¸Hb©R²³¡×œƠxÚ4ÙÙd8ÉÀ²ehÑ"óM‘é¾Ç÷zè+ B’íåQ^]Â2Ơ*IĂ‘`–é k€I¶»ÁMưoøMv‚ÎƯׯ«/mụ…¸HâÙ³²³¡×ÄEĂm|ñgdăF¼ư¶́„̃ œˆFṭí¥PJƯŸøSv‚d,n4Fë ë†¤ṣ ÏK¼|‚'²$ètx"ü;Ø|Ơ( _´Hv6”X¯^jܸqæÛÑñ'寿-ÎIRä@=ô—p)ù— º¹à́ 6€…£ăj‹¶:è&aR’íîp§ˆÈ¬²s¤¤#Cm¾jÑø˜´Ùµ:í×́H¾ä i G"­?>i¬­[±r¥́´̀E\æ'₫¹¢ygΨñ_ÈÎÆư÷ï'Ụ́₫û¼ơH”,‰$kƠ 9r$ÚR¢„½<6H2 J×®²"ằ™£Æ/¢ukÙ ™‡·w̉Ÿ/Ă­G± .¥†…#‘4&@§Ăo¿%Ú8v,Ο—™5k†«WƠ—vU;ñßkĂŒ/;!sYçΉ¶|ûm ?D” G" V­‚N—ôSØĂz½}ŒCxíóÏumdƠh‹Äµ °~}æ›̉˜åËSø–lƠ :BCe'G¤U,‰¬jùrètèØ1éöÍ›­¨b~ùS¦¨/Y5Ú.ñß®m[ûº%½³“M8]§t:́Ư+;9"íaáHd%}ûB§K¡ƒ_ÆĐëѤ‰́ǜk₫üDY5ÚºÿUă€;[ơgĐ èơđöNº=8:¾ûNv~DZ‘Ȳ†·7t:|ÿ}̉/- ½;vÈNÑ́̃|3Ñ æöuƒÊA•+‡_„ƠáJ”@Û¶²s2³û÷qó&œ“n<:Ê”Á•+²S$̉Dqÿ>̃x:ªWGdd̉¯¾ñôz{üú÷_èt‰îN­_o73¹8ºñùçêËơë¡ÓáåKÙi™SˆÅƯ»È–-é—Î…Ÿt:Tª„¸8Ù‰ÉĂ‘ȜvíBụ̀Đé/._Naggèơvö ïµ¦Mñ曉¶|ü±ỪáB0iR̉ÉE³gÇ'ŸÈNẸ̈̀åĂ‹)ü½gṕ\\ Óáí·q́˜́\‰¬…cªÖ®]Û®]»ÀÀÀZµj5êáDz3":z;C§ƒN‡† ñß)ï6z4ôzÄÆÊN׆ ƒN‡-[mŒÆ¬Y²3#sÛº'N$Ú2s&t:|û­́̀̀̀Ë z=ôzôị̂ư…J•~đ?üçÎÉΘÈ*X8¦lÆŒcÆŒ¹téR•*UÜÜÜÖ¯_ß·oßçÏŸË΋4áÆ |û-ÜÜ>3ªVMÔû+‰7ßÄơëĐë1q¢́¼ÍîÂ- .Ñ:nZµ‚^ŸtZs²*@¯GÙ²‰6đĂ%;?3û₫{èơøûoøø¤ºÏ‚(]:á‚—.ă²ó&² ) [´h‘϶mÛ-Z´}ûönƯº:uê›o¾‘IđÏ?øæ”)“đ© Ó¡pa gÏ̉z×[o!$z=ND¡B²ÏÁ¼₫û•+C§CÉ’¸v-éWĂÂđ믲S$Ëûï?lܘtăÑ£đđH¸÷.Nünû*UÂ;Đë±aC̉µ’xøưû#O„_..hÖ sç&Zư›Èv¹ÈN@‹Ö¬Y?dÈ|ụ̀¶Œ9̣÷ßߺuëèÑ£œXmÛ›ÈHüö^½Âñă8q'N &&“M}đf̀€‡‡́S2¯gÏ0q"öîÅ¡CiíV ñ”+YQ³fĐë‘3'’?ÙµK-¯̃yÁÁ><…Ë6¨eK´l ááøäü₫{:ûÇÅaóæDḹ¡bÅ„ÿ¼¼P¯Ưữ ;ÅÂ1Gurr R¶8;;×­[wăÆÇ«\¹²́)Al,?Çóç ƒ»;¢¢đä ¢¢p霩₫wô(²fÅÓ§æÏÁÉ C†`đ`)"ûrdN\=ÂáĂˆ‹Cx8®\Á•+Ø·häóÏ1i’́3!I¢£ gOüôSÊ;́Ø;ÈP¦ Ê–E±bđóC±bpqAåÊđô„N'û|Œåç§®Oxú4fÎÄâÅxûÓ§ 5j‰¼xªU‘'OÂ..đ÷G®\pwG®\È• OŸ¢D äÈœ9Á›dQ,“̉ëơ/^ộ̣̣̣̣·—,YÀơë×í¦p´ßÏüLo"Ó7“(Œëí°ö}¬©†Ă| ØÔÀ3\Mƒ¼y±kW̉‘Ôä˜~ü?₫ˆ;ñÎ;FíæLÚÏnÍö]jeïeªÖ=^ƒ÷×àưđ2¥YƒÇ`ß>›±™+:²ú̃ɃdgA©bá˜Tttt\\œ§§g’í×á9 É–mÛ¶É>³älæ÷ˆ,…p#{ ÿĂÙéhET—.Q=z¼̣÷Ox.;#ùnܸ!;m(^Ü0 U¶ÿu_²ÄmĂÙ Éaø¥1*[ΡÔ₫‹€· mÛ¿/_†kï·J£$Q90I†N»ºº&Ùîææà±áO¿ô„……É>J‡ú 8Y•ÿü^×LoÙ̃Ô©“đßëߛ́¤4Èω üüĐ¢EBǘvîDh(öíĂ‘#²3“£Ε¹1?ù—#đ¼.¢¸̣ß(';_™²g˦ÁŸ¦äëÉï9IyzzêtºhC¯ÁÓ§Oñú¾£}đwIZ$]-PØå–¸Ez†ÿ½[ h–[ÊKW_(–å¦zĂÏâs¸9E'¼Eôb–̀zÅ ñ:è¯ÓáZL~ÿ¬7œï¤Ó;!₫êKß7²]wÑÅ9#ÎY£Ñek»wAl]¬ b]tq/sË~'«îU6]L6]̀GeyÉ¡{aø/§îùùû^µ̣_̀åô,—î©»ÓÓ́úçI»ùܸ‘tls’-O W. XZoyø¹s«/ïÜA₫üé%&Y³f W¯%KBlèLpưz̉î“7o¢`AuŒ÷Çđ̣‚N'§„ÿ½x¥JÁÙ..pq³3î̃…¿?²eCö́È–íåɓق‚àé©₫wáZ´@±b‰²%2 WWuDIrÑѸrü€.Û| >…›[´>Ç“xרx·'z·ưw̃(™÷ás}vå¿sO p}üRŸơ¥>kŒ>Ë_O+¹…½̉»ÄÂ%Vï —ĐgUrƒs¬̃9Îqz§§q9²;¿‡S¼^çÿ^–(ír¼^§‡N]<œÎÇ+‘ơª:Ăơ‹ÑguÑÅê¡`ØçÊ«‚†ÏĂF×_å/ärGỤ̀(.—§óñ̀’îx™áñ>Y Ǥ\\\<<<’ßYŒ Œ³¶—^¥8#Ư!E“mI÷OĂRɶäMü²p² ˆ/ÂĂĂưü'̃¡™ø¢¡¯“º®Á?èÉAå̀‰2eP¦L’Í÷ø]œ@NÀ0¹ä[éíîç×)Ùæ齯|²-é̃f+–lK’OÜÉv(’æK̉¾JOdddTâil ].|̉˜–ˆˆˆÈ®±pLAưúơăââö cØôz}HHHîܹegGDDD$ Ç´k×ÎÉÉiΜ9O_Ïû·hÑ¢ˆˆˆ6mÚdQúŸ9öqLA†>uêÔ-ZÔ©SçêƠ«‡*[¶lŸ>}d§FDDD$ Ç”ớÙ3õ¼¿ưöÛ–-[|}}»té2dÈĂŒó™s̃ç8Îyùœùœ ÁhApZ€G ÁhApZ€G ÁhApZ€G ÁhAp àííÍv Ÿ́OÆa—2»”YØŸÀG ÁhApZ€G …£P(Ø®áSĂçóÙ.ºVii)Û%°ÁhÁ­j ÁhApZ€G ÁhApZ€G ÁhApZ€G ÁhApZ™wï̃½åË—{xx¸ººåææ²]ѧ£¶¶vÔ¨Qááál¢Ù$É‘#GüüüFŒ1~üø äää°]”F:uêỒ™3Ç)‰Ø®H³áÈ́:8y2—xîúơëÙ®á“råÊ•… VTT }Z&“=ÚĐĐ0//ḯÙ³ZZZ£Gf»:M²sçÎØØØ¦¦&WWW‰DrëÖ­¼¼<mmm¶KÓH82»NLÁ%BÀœ×¯_»¸¸ >¼  €j¹{÷®£££›››L&c»:—˜˜Èăñx<̃5kØ®Eƒ?~œÇăˆÅbªåÑ£G£G6l؃Ø®Nc”””ØÛÛ?₫åË—T˦M›x<̃† Ø.MSáÈ́:8y2—x nU3)--­¡¡añâÅ£F¢Zœœœ|||êêêîƯ»Çvu­¬¬lçÎöööl¢ñ~ÿưwBHTT”Ơbgg·xñb™L†Û‚ô|8ÛƠi0©TºvíZ“ˆˆ¶kÑx•••@µÑÎÎR]]Ívu#??_KKËƯƯ]ÙÂår'L˜P__çζ«ÓH82»N Â%̉ƒí>)ÅÅÅ&&&æææ………¯_¿¶·· …Êÿ@CḉƯ»÷álj‰‰†††l×¢ñâăă{ôPÿ‡ÿ₫}Bˆµµ5ÛƠi…Bñøñă>}úôéÓGµÇăBª««]\\Ø®QóàÈ́ 8y2—x ‚#cZZZ‡º~ưú””e»µµơ®]»Ù.PS%$$¹¹¹QWøj-·oß>xđ Úÿ¤¡=b±X&“«µB₫₫ûo¶ ÔH82‡“'ƒp‰W­jÆ466B?~|₫üù-[¶äææfee…††ÖÔÔ¬\¹R"‘°] F’H$k×®µ¶¶^½z5Ûµ|‚d2YrṛÂ… ÅbñæÍ›MMMÙ®H3Pÿœ ÔÚ{ơêEyóæ Ûj<™'OfᯄÇÎJ¥ Ê—\.7$$DWW—z¹yófOOOêÏË—/¯­­MKK;wîÜŒ3Ø.¼ûjs—B¶lỤ̀́Ù³”””ÿÚ½€×̃.UÊÍ͉‰)//·°°øùçŸƯÜÜØ.Ycs8±X¬Ö̃ÔÔD₫7î†#“8y2 —x%ÇÎxÿ₫ư®]»”/uttBBB tuu9‡‡‡jg¡P˜––VRRÂvƠƯZ›»4///%%eé̉¥ÿ©ï3¥Í]Jư¹¥¥eëÖ­GƠƠƠ ]°`.-̉£G##£Ö#‹ „å-“Éè||ß¾}|>ÿøñăÿB© .äóùÉÉÉ,ï²î3f´×A"‘ >œÏççååÑ\fxx8ŸÏ¿víÛ Á˜TTTäçç››ûüùsêêꜜœ¨¨(??¿W¯^±]`÷răÆ¬¬¬ö̃ơ÷÷'„Ü»w¯ªªªÍÙÙÙoß¾íׯŸ‹‹ Û›ÿ À˜²²²àààÚÚZGGÇÄÄÄüüüüüü¢¢¢Ư»wÛÚÚVTT„††J¥̉/ÄĂĂ#&&fôèÑloÍ¿aÍ5K–,iï][[['''BÈ… Ú́pñâEBˆ–NæđoÀ¹˜¡P(ÂĂĂ›››½½½Oœ81ñܸ½{Bôôô¼½½“’’úöí[XXx₫üù/G ̀5ËÎÎí ê¨AÇ6wÚû÷ï¯^½Jñơơe»Lø¯@pf\¾|ùáÇúúú111:::jïZXXöÏ!“É₫qD“₫¢̃¿ÿ¯­®=¾¾¾\.·¤¤¤¢¢Bí­›7o655YZZ1¢KkPBpfP£b³gÏ666n³ẮÙ³÷́ÙóÍ7ßP/©YµµµEEEÓ§Owrrzö́!$!!AmrLMMMtt´¯¯ïˆ#ÜƯƯCBḄóó•ïRË)//߸q£‹‹‹@ pww ½uëVG7ZÔ³gÏ<8v́XGGG—Y³f]ºt©£«£ºµ®ÁÁÁà˜1„ØØX>Ÿ/‰d2ŸÏwvvn³$SSSªëAÇ̀̀LBˆ‡ĂQ6ÖƠƠíØ±Ă××wäÈ‘#GœtèP'6$>>~ûöíÚÚÚcÇ522*,,\¶l™Ú@éǯÎÅÅẽ¼y:::g̃¼y³gÏn¯g›w«e2ÙåË— !“'OV6ÖƠƠÆÇÇ×ÖÖÚØØXYYUWW>|8 @$}Äß-Ù¶mÛ‚ ₫øă©TjffVPP°wï̃   úúúY,hG`ÆóçÏ !VVVúÔ?₫øÙgŸ>|8''ÇÆÆ¦u‡mÛ¶577/Y²äæÍ›iiiYYYQQQ …b÷îƯªƯ ƯƯƯoƯº•™™yçΈˆ‡³}ûö²²²nÈÉ“'CBB®_¿~äÈ‘‹/Ο?Ÿ¢öÈ_§§gdd¤¾¾¾––Vdddxxx{='M¤££S^^₫èÑ#ecAAH$²±±ÊÆ´´´'Oxzzæä䤧§gddܸqĂƠƠµ¦¦†J™sơêƠ„„kkëS§N]»víܹsÙÙÙ'N,**Ú¿§ ÁĐĐĐđöí[Bˆ™™Y‡>h``àææfjjÚf‡’’BÈ̀™3¹\.Ơ°téR¡P¨ÚÍ̀̀lÏ=Ô]r.—ûƯwßÊạ̊¸¸¸n‹““ÓêƠ«©yÊZZZK—.%„Ç¢ªªªªªJ5¸¨9qâ„T*4i’¹¹9ỞæíiU111«V­ÊËË›3g®®®ƒƒĂçŸ>ỉ$Ơnƒ Rû •••΋/ZZZzö́I[èÜmgputL˜0ÁĐаªªê₫ưûàîƯ»/_¾2dŸÏWëYSS“]PPP]]]UUơ‘_m$„P³¹+**Z¯‹B}E₫#€<¯ªª*??_mú‹̉Ó§Ocbb8uó”bhhøáÅZYY:uª°°0;;;77·¸¸øÎ;û÷ïŸ1cƦM›”Ug+[¸\î»wï¤Ri‡’Î[L&S¹¤I[[ÛÛÛûäÉ“çÎm7BRRR6mÚ$•Jmll\\\„B¡££ceeå† :´:Ơ:[ZZ! Pûn€’¥¥e'¶4‚#0ĂÛÛû̉¥K'Nœnó ‹Ôü gbb̉¡%s8êá2„–––ëׯ¯[·îôéÓ^^^TŸÊÊJµO½xñB,›››ëëë3¾±[]mmm›3Çéđ÷÷?ỵä… ÂĂĂÛü‚cSSÓÆ{ö́ÿÅ_¨ÖÑu©Ö9xđ`Bˆ¾¾~dd$ă»4¾ằđơơ8p D"ùá‡Äb±Ú»¯^½¢fàvègNjjj<==•~$„ốÙÓËË‹z ơÜGÊ™3g¨±1¥£GB»bci®NíN15RØ9®®®æææµµµ©©©UUUöööT¤SºwïL&9r¤jj$ÿ›]ôa¨³ÿ₫ưúơ+//¿ÿ¾j™L6}úôñăÇ×ƠƠuÅ€î Á˜Áårcccutt®^½:cÆŒ¬¬¬7õB$É•+W¾ưöÛ††@°páBúË´°°hll¼{÷î¡C‡”c`O<ÉÎÎ&„('ùB^¼x±jƠª††Bˆ\.?~üø‘#G´´´ÔæĐ0åWG}wóèÑ£Ê }ûöí6^#—Ë[ḉÖ8ŸŸ!dëÖ­¤­üƯ¿BHII‰2ÉÉd²ÔÔÔcÇQ m.–Naaar¹<,,́áÇTKSSÓºuë‹‹A{Óáà“„[ƠÀ˜áÇÇÇǯY³¦¼¼<$$„̉§O‘HD}aÎÑÑqÇ=ztà´C=ă0""bëÖ­¿₫ú«•••X,.//W(ª¿¶âëë›™™9f̀˜>₫\,kii………ÙÛÛwÅ–₫ăê¦N””tçÎ///‡¿₫úëñăÇFFFæææï̃½S.ÇØØX$ØØǾƯ»÷Ă+ơóó;tèPss3i5ơ›2xđ`//¯Ë—/ùå—£FR(¥¥¥"‘(00099ù̀™3ÔƒuTÑ©sÚ´iyyygÏ:uê€LLL***ÄbñÀù嗮ؽĐmaĘ4v́ØóçÏGFF9̉̀̀¬¹¹yĐ A›6m:uê”­­mG8mÚ´¤¤¤‰'êéé•””ˆÅâqăÆÅÅÅEGG«vûú믩n ½zợ̣̣JLL\´hQmæ?®ÎÚÚúĉB¡PKKëÆ=0`@BB‚Úø\DD„ÚĂ½Û3lØ0êáDmÎFß¾}û+,-- ^¾|9a„ôôô¨¨¨ÀÀ@.—«ú;ª“Ăál̃¼yÏ=r¹üÉ“'ƒ KOOïè×U@Óq:7Å ›ÏÈȈwwwï«knn®¯¯·¶¶n=»[Ñ”:€E¸U е ”?å̉iJÀ"ܪZ€ܪÍæëëËăñÔjøÉ¬ [Áä ·ª€G ÁhApZ€–ÿNÔ<ÛOR G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2 G""""2‹èˆˆÈ…„„ˆNÈ111¢S(X8‘Uđ_b**øwñøªˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆˆˆŒÂ‘ˆˆÈ………ét:N×£Gѹ¨ïÍ7ß4Ü]… DçbWX89¨êƠ«¯^½zܸq†Ç{ùå—Ë”)ăééÙ Aƒ9sædffJ;ß»woøđá+VôôôlÑ¢Å̃½{¹DFFF“&M6mj̀Î-Z´˜>}z_7¿o¼zơê&Mˆ~Æö†…#‘ƒ è߿˖-ÄÇÇ·jƠjË–-;vœ0a‚««ë„ úôécØ399¹Aƒßÿ}óæÍ_ươ¸¸¸;>|¸ĐKL:ơßÿ5&™Ă‡ïÚµ+ÇÆ‚¯[À·5êß¿åÊ•E?c{Ă‘ˆˆH–•••••e›k=zô(;;[ô?6a„{÷îmÛ¶mụ̀å}ôÑîƯ»‡ ̣믿FFFø̣Ë/ccc/^üĂ?|ươ×ÿüóN§{ë­· >çÖ­[?ÿüs—öÉ̀̀üóÏ??üđĂ:ä~_×¼¬È,‰ˆˆ4~üøyóæùøø¸ººÖªUḳäÉ=’v˜3gNíÚµ=<<üüü7nüĂ?ä8öÀuêÔ©S§1û;vâĉ^^^nnn7₫ă?233ß}÷ƯêƠ«{yyµnƯúÔ©S†ÓÓÓg̀˜Q½zơ%JTªT)<<üÚµkÖxÛ·ooÑ¢EÆ ¥-£F°gÏ?ưôS``àÀ _U©R¥wï̃QQQW¯^Íï„ׯ_ơƠWĂĂĂË—/_Àu“’’:tè0}úô›7oæ₫¶àë‘YÈẠ̊Sëî]¤¦L \¹ü¾Y¿~ưåË—;wî\§N½{÷Î5kÏ=ÿư·N§ûđçOŸ̃¦M›̃½{?|øđ—_~0`€——W×®] Ç&&&vèĐÁÛÛ»]»v ƯơêƠÎÎÎï½÷‹‹Ë—_~Ù»wïzơêeff6ܹ́s .|å•W9 <<|Í5Ï?ÿ|¯^½Nœ8±|ụ̀'NÙ¿Đx™™™#GlĐ ră… /^<99ù́Ù³ưúơÓét̉·mÚ´Y²dÉ̃½{ó[£×ëèëëûƠW_…††p退½^ &&æ™gQ~UđuÛ¶mkjVd9DDdCăÇcùr‘ èơù}sụ̀åÿưïï¾û®áă¤I“>ÿüóµk×öíÛwƠªUƠªU‹ŒŒ4¼u4i’¿¿ÿ–-[¤BpăÆÓ§OŸ:uª““€B÷OII9zô¨¡Nrqq™4iRjjê₫ưû‹+àØ±cÑÑÑ÷ïßwrrZ»vík¯½öư÷ß ÿí·ß®^½¨âSqqqùôÓO•[nß¾ưé§Ÿ:;;÷îƯûúơëz½> @¹Cé̉¥äÙLàóÏ?Ú»wo‰%̀Ϊàë‘Y…#øûû+»ÇM›6máÂ…ëÖ­ëÛ·ï¾}ûÜÜܤ¾zIIỈ̉̉¤¥ª@¡û7jÔHj]kƯº5€~ưúªFmÛ¶NKKọ̣́̉ét»víºpáB¥J•,Y²dÉ’%¹“Ï̀̀üă?̣»µ_|ѤGñ÷ß¿ñƱ±± . >zô(///å>̃̃̃̉­å°oß¾©S§~₫ùçuëÖµäÿ#†'–ßu ₫Ö’ëRX8@hh¨«««ôÑĂĂ#$$$..€¯¯ïîƯ»·nƯzæ̀™sçÎ_פ¬H-, ß©S§uëÖI刈È|Uª JÑIäíÔ©SRk_zzúéÓ§[µjñƠW_;VÚ9G ¢’©û )))66¶ZµjááááááÙÙÙ ,=zô¢E‹¦M›¦ÜỌ́WƠ¿ÿ₫û«¯¾ú̉K/-Z´(Çû_—5jüóÏ?Ê;wîÔét¹¾†¢ùå—ÊwîÜ™‚¯k|V¤¶8æÍ0Àï¿ÿ₫ÓO?‰Î…ˆˆl!00đư÷ßß½{w:uö́Ù³uëÖ¦M›8đ̉¥KC‡íß¿¹råö́Ù³}ûöR¥JEGGõ¼¹S§N9ÎÓºuk“ö/@ƒ jÖ¬9sæ̀øøø5kÆÄÄl̃¼ÙÏÏ/w»…¯ªOŸ>}æ̀™êƠ«‡‡‡çøªgÏ]»v4hĐ²eËú÷ï?räHŸåË—§¥¥å^Pu_WTVŒ…c̃ºvíj¥V‰ˆH›7n<~üø>øà믿 |ûí·g̀˜áääT±bňˆˆwß}÷›o¾ hƯºơ±cÇ~ûí·wß}÷믿Î]º\]]7õ}:ÇWU«VíÚµ«——WTTÔĉ7lØpçΦM›₫đĂaaaÖ₫JÁו•#ÓỸ—Ö.EGG?|øÀêƠ«wï̃mRǘ˜Ñw`Wø̃¡YYHOÉJ»–|éĐM¿ %Îÿ{=0̀ûߘU«—M×=­Óï¿t¢^…g\:Ơ |gö·x¦!€¬́,'—ƒÏ4ªzèÂÙÆj^ˆ»V7¨§Î3+C_ÜËơf|J•–å³²à_Ñü™ØDs+r¿ ƒ‚‚êÖ­ûË/¿ˆNÄvÂÂÂ|||̀x}\„ôë×/:::11±àỪøq-r?ája‹c̃{î9C`ßÿEQ’+đƯw8rPê&¬ÆÇïĂ#΀7à „ ?¼ṃ?Ws|ßW­üØDß(ím°l¶¶3l4o¼¦ME?""²V’cË–-[D'U„z;¬#JoÙâñøĂ®gÑl·˜q'îyÏg]³C1×l×}—O6)[kßå“ËÖü'ö`óªơd곜t{®kX64úÖ°€êÛD×)rÙựƒ¬7ܯÿưTÜ3n—,°)ñ¹hèu¸í‡§’úơĂŒ8qBôă#2Ư‚ D§`k‡‚-\¸páÂ…¢³°C,‰4§OlØ8_•̣~ÏR'3ô—…ÍÑ\̃dXE¢T̃ḉ‰tGgµƒQ₫mƯ]ôF7¯¡ ¹yïă₫x#*å«÷s~çwz†,;ùư`7n T)‘áàDỤ́Ö[ذ¨uz]îªñS O¹¯‡₫ˆË‰'ªF›(‰’k°æg²úøÏåQÓ.‚ăµ”.-êù‘±p$̉)Sđå—À̉×q¬¶r»N„ èuxwøxzN‚V₫s¾«^‡9̃ïƠ<½ÎY:艈Hm,‰´¢{w|ú)đƯ0d™rû©ÈvBåó@ăÆ¨XQt ˜?z<Øú±L¬‰ˆ́ G"M8z¿ưœy]—6À½Ơ¥uöîf.“&₫ï~ĐתùÄWzªÄ³v$"²',‰4¡n] ¾ BäÎáÜü÷ưä=^zIty™5KOœĐCđx îi”º9j”è$‰ˆH%, 1cÆŒ˜˜ă×$2CñâÀ–’§ŸƠC_U1c†¼ÓÚµ¢Ó̀G·nr¼eË5\›ẹ́–¥çÏÇÏ?‹N’ˆˆÔÀéxˆÛºb+¢‚¼”ªEjù”Çë¼̣ nß₫\Á•oñí÷£ë¥Óë‹Ô=QØâH$Xû%ẹ̈®‡ ‘wúáÑiæÏĂCïÜ1üßEXỗ‘·ëu«W‹Î“ˆˆ,ÆÂ‘H¤ï¿Ö¾,}|¢­ñûïåø•WDgZ 7ß”ă¥K ÿw&fúÂWÚüjmö÷ "*̣X8‰4d°<êx³đ=*ÇeËN³0ʵÚÂĂ¥đ6nËÛk >ßNt¢D$ Óét:®G¢sQß›o¾i¸» *ˆÎÅ®°p$¦Êeyé—’'Æ`ù;å›Ư?©ù”m¨±•·‰N‡ˆP½zơƠ«W7ÎđqÇ­[·.]ºôSO=ơÜsÏựË/ÊïƯ»7|øđ+zzz¶hÑbo„|ªü´hÑbúôé96|Ưü¾üæÍ›={ö\²d‰aÏäää |ÿư÷Í›7ươ×ăââ:v́xøđáÖ®]»L™2wï̃5|LII©X±bụ̀å §M›`ụ̀å†qqq>>>­[·Îó̀Ÿ*‡ŒŒŒÈÈÈiÓ¦•*U À‡~¨ü¶àëUß¾}ó»®’?®E÷'ÜBlq$ ;ºËv=»}^|w­REt²ÆéÔI•Í¥@±b€S¶ôq"&Ε(AAAăÇŸ7o««k­Zµ&OüèÑ#i‡9sæÔ®]ÛĂĂĂÏϯqăÆ?(æ:0{àÀ:uêHó₫¼ÿرc'NœèåååææÖ¸qă?₫ø#33óƯwß­^½º——WëÖ­O:eØ9==}ÆŒƠ«W/Q¢D¥J•ÂĂĂ¯]»¦úí?|øđäÉ“/¼đ‚···a‹‡‡GóæÍ/]º”à§Ÿ~ 8p áÛ*UªôîƯ;**êêƠ«¦*‡¤¤¤:LŸ>ưæÍ›¹¿-øºÆgEjaáH$ÀoøM₫đ\t³fO~)ÇÊËEEll +W} }¬‰¦È&Ö¯_?zôè-Z¼óÎ;¥J•5kV»víôz=€?üp„ ¥J•zçw̃|óÍû÷ï0à÷ßåB;tèpÿ₫}C§ºB÷_½zơ+̃{ï½éÓ§ÇÇÇ÷îƯ»eË–Û·o6lØ«¯¾ơÊs)„‡‡đÁ*T˜0aBXXØ̣åË»wï®ú½;;;=zt†bÑ̀̀̀ăÇ×®]ÛƯƯ=99ù́Ù³­[·Ö)VmÓ¦MvvvîŸ*÷¥ MYgΜÉñUÁ×5)+R ''²µ@Ễ\˜Ç|‹Éñđá¢ó5»;̣jNđꫨ›>2|<‰“÷pÏ̃¢3&Æ̣å"(`.úË—/ÿïÿ{÷Ưw 'Môù矯]»¶oß¾«V­ªV­Zdd¤‹‹‹á+ÿ-[¶tíÚƠ°óƧOŸ>uêT'''…’rôèÑgy€‹‹Ë¤I“RSS÷ïß_¬X1Ç‹¾ÿ¾““ÓÚµk_{íµïÿ›Ÿ+<<ü·ß~»zơj`` ÔăââjˆW®\ûÇ\½zơÇpưúu½^ <¤té̉r7|*“|]“²"µ°p$²©$\ƒâ5Ó¢áßä₫ǵ×_åXZ”Eû̃|_~ù8>v µk+¿¬]ÇÚmÅÖÇ3̣øÀ§ˆ-CÀßßÿ­·̃’>N›6máÂ…ëÖ­ëÛ·ï¾}ûÜÜÜ U €¤¤$iq`RƠ Đư5jd¨´nƯ@¿~ư U#€¶mÛFGG§¥¥yyyétº]»v]¸p¡R¥J–,Y’ç(“̀̀̀?₫ø#¿[{ñÅüqll,€víÚ.jÈÜËËK¹›áM´áÖŒ?•I ¾®ÙY‘%X8ÙT(ú,Ö;$:U .‹=1¹#°u+Wn‰@Dgt4‘,44ÔƠƠUúèááÀ××w÷îƯ[·n=sæ̀¹sçN<™™™©<6$$DªÙßßß_ ơbî-ÜƯƯ¿úê«·̃z+(((44´Y³f;v́̉¥‹2OƒÔÔÔ^aëMYôóܹsiii{ö́ ỏ¤ÉéÓ§ ¹Ư¿_¹[rr2???“Neh4RÁ×5;+² G"ÛÙƒ=O|>6kV®²åq$hß^tʦ–ă… sÿ±đJF̣ăæ.èÂFGÔ¶-J”„Ñ\\\RSS>|سgψˆˆ† ¶oß¾[·nM›6­W¯rO)6fă9²W¯^›6mÚ±cGDDÄâÅ‹CBB¢¢¢r¼¢ơöö6©:,X‰%Ú¶m;sæ̀¾}û₫úë¯C† qrrÊñ₫÷Ö­[Ê•+g̉©̃xă ăÓ(ຫ֣ X8ÙN3(FÁ”» `̉¤\;ÑFxöÝÚUi%Pâñ »hD?‡çDçE65` D>N:•‘‘!µö¥§§Ÿ>}ºU«VÑÑÑ_}ơƠرc¥s´ *™º’’’bcc«U«½`Á‚Ñ£G/Z´È0̣ü–¼ª₫ă?ºwï¾zơê—_–Aơơơ ×ë]\\jÔ¨ñÏ?ÿ(Ù¹s§N§“º3y*“n¿à딩…£ª‰lä=ñùJ> ¾ư¶¹uÀ₫볕§ÇMUâ¥-ÍÑDqóæÍ9sæHg̀˜‘œœÜ£GK—.¨^½ºôƠ† RSSó+ƒLƯ¿111M4™={¶á£““S«V­ x—-1¼ªÎO¡jܸ1€ï¿ÿ^™ä+4mÚÀĐ¡CÏŸ?¿iÓ&ĂW7nÜØ°aC»ví‚‚‚L=•I ¾®ñY‘ZØâHd#uPG₫Pí,€ÿVùzR>“‹†ví M¨‡§ŸV~ùx´̀ơ'̃¯mÆæNèdÜÙ‰¬+00đư÷ßß½{w:uö́Ù³uëÖ¦M›8đ̉¥KC‡íß¿¹råö́Ù³}ûöR¥JEGGõ¼¹S§œ?À­[·6iÿ4hĐ fÍ3gÎŒ¯Y³fLL̀æÍ›ưüüúơë—cO _Uûûûæjذa‡t:ƯÖ­[÷íÛ7nܸڵk4hĐ²eËú÷ï?räHŸåË—§¥¥å^Đ˜S™¤à럩Fô ävÈag“·;X–ă₫r©˜‚V„±æ1V|‡ËÉ/Z”ûû*Uô€Añʧa­dlÈ~DUWä~V®\¹{÷îQQQ-[¶ôöö~æ™g̃~ûí¾jÖ¬™§§çÓO?~óæÍ%K–”*UªC‡̉±Ê³™´ÿ‘#G,Y²DÚb˜ñÚµkz½>11qÈ!•*U*^¼xÅ_yå•Ó§O«rË9VÉÎÎ^±bE£F|}} LÿôÓOÊưï̃½;tèĐàà`ÿ®]»:t(¿3zª<æq̀±rL¡×-ø[®£:^½¾´d#: »’PÔß;TFå ¸đøĂ åXṇ̃›ONÉÖÏÖ™QºÏSÊ¿W/lØăË_ưïơ»^°7 YNE¼ÛŒüˆª®Èư& ª[·î/¿ü":Û óññÙ±c‡èD¬¨_¿~ÑÑщ‰‰ïfÆk‘û WKÑ₫eMTTÈU#`¨Ûµ+́˜Â÷ж­[so“»Zơÿyn “»=‘́ăHduƒ1X₫đ̃'†ÿ;eJ^»îß/ÇE½pLN.èÛ_»Ká>́+‘ƒºqăÆÚµkË•+÷Üsö6¿Áâââ.\¸`ù©H‰-DV·Ëåÿ{\0¶j•×®Û¶ÉqQ/ó!ÿZ©ä¼#:/rt:u2c̀oQwêÔ©¾}ûJ£¶íÉ̉¥Kûöí»gÏËOEJ,‰¬käÙ=°íùBöV¾̃­XQtîfỉ¤àïÿ[÷•´ñ3|&:ort ,˜”ÇĪö́đáÆávÙ³sáÂ…†»+´ƒ#™„…#‘uMÀùC»ÇuaçüVÚ³ƒ^êÏ+ă'Wt0hØPñá›ÆaÑ©Q!X8 ·ºÙåö¼ÆÇ(_́ÚG‹£qœá,ÅÈå‹…#‘µ¤ E×YAó­ •…cÍ¢Ó·@…î¢[=S¥øU¼*:{""Ê G"«Øy™æWñê™3F“OÀ¢GY?xç.áár\ûç¥x-ÖΈˆ̣Å‘È*”ă©Wb¥QǤ¥‰ÎZ%ÊÂñÓOóÜeèP9^²•PIúx7Dßå…#‘U¤#]•Ë( &»Ơ²¥ç3¯N'Ç›7?1üü‰9ŒˆˆHKX8©o ä)Ç`̀ùÓ¯hóUµªè;°Œ§§9b̀ÍÑ\#)úˆBXX˜N§Óét=ä%äíÇ›o¾i¸» *X~6’°p$RßPÈí_ăëモ¿jÔȈă•ÓƠuù9 Ơ…|׈7‘C¨^½úêƠ«Ç—c{FFF“&M6mªÜxï̃½áÇW¬XÑÓÓ³E‹{÷î-à̀Ç{ùå—Ë”)ăééÙ Aƒ9sædffO‹-¦OŸccÁ×ÍïÛÁƒ¯^½ºI“&¢Ÿ±½aáHduW¯±“r‰=qqù}£l|]¶ ±Púø9>7‘Cèß¿Ke÷ÀÔ©Sÿư÷_å–äää |ÿư÷Í›7ươ×ăââ:v́xøp̃K̀ÇÇÇ·jƠjË–-;vœ0a‚««ë„ úôéSp2‡̃µkW_·€o5jÔ¿ÿÊ•+‹~ÆvGOj«V­è́M||¼èL°Z¿z₫ç-ư[zư ÷öÎÿ°Ư»åư6m²j†¶x̉½øKFÚ¥iS½^¯WSÄ~5­QÛ(º¿ 333333ms­‡fee‰ºÓºuë¶jƠ*÷ö?ÿüS§Ó¹¸¸4ỉDÚ8mÚ4Ë—/7|Œ‹‹óññiƯºug~ñÅœœöíÛ'm2d€-[¶ä̃9###22rÚ´i¥J•đá‡*¿-øº…fƠ·oß̣åËú(̀øq-º?áb‹#‘ÊFb¤/”/U £|¥&ú&lmÏF°´%É¢“"Ç4~üøyóæùøø¸ººÖªUḳäÉ=’v˜3gNíÚµ=<<üüü7nüĂ?ä8öÀuêÔ©S§1û;vâĉ^^^nnn7₫ă?233ß}÷ƯêƠ«{yyµnƯúÔ©S†ÓÓÓg̀˜Q½zơ%JTªT)<<üÚµkÖ{ׯ_ơƠWĂĂĂË—/¯Ü₫ÓO?øx́Z•*Uz÷îu5¯W*Û·ooÑ¢ECÅ|­£F°ÇđŸú“’’’:tè0}úô›7oæ₫¶à딩‚…#‘Êîạ́ăị̈’1èĐ!ÿĂ”…c¾‹ÁÁf4ó¥XYÙÆúơëGƯ¢E‹w̃y§T©R³fÍj×®^¯đá‡N˜0¡T©Rï¼óΛo¾yÿ₫ưü®øÏ;11±C‡÷ïß7tª+tÿƠ«W¯X±â½÷̃›>}z|||ï̃½[¶l¹}ûöaƽúê«QQQ¯¼̣aÏđđđ>ø B… &L [¾|y÷îƯ­ôôzưÀ}}}¿úê+åöäää³g϶nƯZ§˜¡M›6ÙÙÙ¹{:fff9̉P)J.\¸ xñâ¹/`hÊ:“kÂÛ‚¯kRV¤Ñ Ù•(DIñKx Àúợ·-@mÜèă"£n]œ;Wè^;bËùc;ÈăeVcµr²ƒ1x9– L@}~_]¾|ùÿûß»ï¾kø8ỉ¤Ï?ÿ|íÚµ}ûö]µjUµjƠ"##]\\ _ùûûoÙ²¥k×®†7nÜ8}úô©S§:99(tÿ”””£G>ó̀3\\\&M”ºÿ₫bÅ8v́Xttôưû÷œœÖ®]ûÚk¯}ÿư÷†ĂĂĂûí·«W¯ª₫p>ÿü󨨨½{÷–(QB¹ưúơëz½> @¹±té̉r7º¸¸|úä®·oß₫ôÓO{÷îmR>_פ¬H-,‰Ô¤l'3´ŸQ>°ÇÂQ*™ÓÓáîç^}úÈ…ăÖ­h×îpWNIdK₫₫₫o½ơ–ôqÚ´i .\·n]ß¾}÷íÛçææf¨$%%HSLÚ(U Ư¿Q£F†ª@ëÖ­ôëׯØó¶mÛ6:::--ÍËËK§ÓíÚµëÂ… •*U°dÉ’%Ê)¾₫“™™ùÇäwk/¾øb¡·¿oß¾©S§~₫ùçusÏ3dîåå¥Üèíí-ƯZ₫₫ûï7̃x#66váÂ…Á&¾‹(øº–dEfcáH¤¦“8)Å₫đ7áHEW*{ ü‡çÈ<9©‡¤wo¼₫úăxưz´k‡ù˜?C [̃ÆÛ_à ÑwB$44ÔƠƠUúèááÀ××w÷îƯ[·n=sæ̀¹sçN<™cr™©j4fù÷ƒ¡^̀½€»»ûW_}ơÖ[o…††6kÖ¬cÇ]ºtQæiZÀ+lĂ ÷$''÷ëׯ]»vcÆŒÉư­!·û÷ïç8€ŸŸ_~ç¼xñâ¨Q£~ÿư÷àààmÛ¶µiÓÆÔÿ|]ó²" ±p$RÍ%\’âFÈ9aci íœq…£²¥`ưz,^ŒÁ,³1›…£ưq‡»¼,?m¸¸¸¤¦¦>|ø°gÏ 6lß¾}·nƯ6mZ¯^=å>>>Rl̀₫Æ9rd¯^½6mÚ´cLjˆˆÅ‹‡„„DEEåxEëíí]huX€o¿ư6>>¾{÷îŸ}ö™a˽{÷²²²fÍU±bÅ>}ú899åxÿ{ëÖ-åÊ•Ëó„kÖ¬6l˜§§ç·ß~;dÈ©ñƠ$\·àoÍ~T0DªyïHñ'øÀ_Éß6…Ù́ăeåøẵÂß½+:g²‰X° Dg‘·S§NeddH­}ééé§OŸnƠªUtttDDÄW_}5v́Xi禳6uÿ$%%ÅÆÆV«V-<<<<<<;;{Á‚£G^´h‘a&åù-yUm?₫å—_*7̃¹sg̣äÉ­Zµêׯ_5₫ùçå·;wîÔét¡¡¡¹Ïöûï¿¿úê«/½ổ¢E‹r¼J6‰‹‹K×-ø[³/Jă¨j"Ơüˆ¥øy<'GÆ[8ÚÓ́ßùLl{-ëÑ-Å\B†léæÍ›sæ̀‘>Θ1#99¹G—.]P½zué« 6¤¦¦æ×Âgê₫ˆ‰‰ỉ¤É́Ù³ œœZµjÅ»l‰áUu~ ½Đ{ï½—cº¾Ê•+æqܱc€¡C‡?~Ó¦M†ưoܸ±aÆvíÚå8•^¯Ÿ4iR… V­ZeIƠhPđuÏÔÂG"+RY²¿Â±ÀÇ>}đăơvVœ1 ³¾Á7†-ïàÎè,úÈQ¾ÿ₫û»wï®S§Î={¶nƯÚ´iÓ^ºtÉĂĂcèĐ¡ưû÷/W®Ü={¶oß^ªT©èèèÍ›7wêÔ)ÇyZ·nm̉₫hĐ AÍ5gΜ_³f͘˜˜Í›7ûùùơë×/Ǿª.Ô Aƒ–-[Ö¿ÿ‘#Gúøø,_¾<---÷̣€NŸ>}æ̀™êƠ«‡+—‡ốÙSW®ÊuÏÔÂG"u,ÅR)₫₫gnß6îà³gåØ₫ ÇŒŒ¾T6ÄêlwÈC°Oà„è́É4nÜxëÖ­wï̃ưúë¯ß~ûí;v899U¬X1""¢|ụ̀ß|óÍœ9sÜƯƯ;öé§Ÿ&''ươ×¹Ïcê₫puuƯ¼yók¯½¶{÷î>úèï¿ÿn×®Ư®]»lߢæååợË/oذáóÏ?¯ZµjTTT+AÇÆÆ8}úộ\;¦îuÏÔ¢³ê()$$$&&Ftv%!!AûïüោÇ@HÅI³̉:;£ NëÖáå—ÇÇ¡V-«¦j£ç©˜’₫‘v́Ơ 6@MԔƧ§#Ư nVÏÖ2EâGÔÆÜo   ºuë₫̣Ë/¢±°°0Ă›h{Ơ¯_¿èèèÄÄÄ‚w3ăǵÈư„«…-DêªÆ<̉ÁQù2×ÊU£í˜>ÊgăÆÇÁ,̀’6*‡‘X,‰T°»¥Ø0,&Œ)pøHQeÁ;÷.è"Ås1WôÙ­7n¬]»6::Zt"ê;pàÀÚµk K’X8©@9½ÈDL4ʱgÏ·³ec Œ.Ë”*Đ©S§¦ùL8jÇN:Ơ·o_iÔ¶=Yºtiß¾}÷́Ù#:{Ă‘H?à)nö†à·ßŒ>₫Ú5Ñw`aar\`O å4Æ̉#0BÚø₫‘•-X°`̉¤I¢³°©Ă‡f̃±Ë .4Ü]¡É$,‰¬ÅÎ4YÅc̣÷ßB°yóă`äÉ?ć¢o†ˆˆD–û ̣ú0ă0Nt:Q³¦X8¶o/ÇRáX¥¥Û±]ôÍÀ‘ÈrÊö0e;™Ä„é~ëÔ}7Öat'N©pÄ“:‘°p$²T4ä‰>đ1GÊ;˜P8¦¥‰¾ëعÓȯ_—ce¾«Eß±p$RäUY•-g&C†ˆ¾ ë0« VÎà8\CŒˆH<DY†eR¬|g!ïSµj§ˆ‹3zW»Uè,(±ˆ#±p$²̀0 “âñ/Åÿ?̀¹sr,ú†ÄèÜYÏŸ—ă„ˆNˆˆd.¢ *Ú2‘ié)bmivÖâèä„́lcv́Ô ï¿ÿ8̃¼o¾ù8n‡v1x<äWøƒÖ‹–ÖưDö†…#‘:ª JÛŸzª°#•…£‡‡èûPUƠª8{Ö˜ë×—ceáø ¾™‡y†x&f²p,Bb œơ½P AAA¢oÂ~đy’ZøªÈ|ßá;)ŒÉyîSøÈ˜Xûí½gVªr\‘̉u\7íDDD¤6D曉™R<C¥x»b¾j‡.Íê²™ùäËÿ¨!ú6ˆˆè1Dæ‹G|ÛM›‹G98ÆÎ([SS ̃×Ù9ïíÊIy¾Á7¢o‰ˆÈ¡±p$RA%TR~TÎÅăë[ØÁÆ )’”…ca «ùUØ1Pga–è[""rh,‰̀¤œÁQÙ*àÔ)ÑÉi„¹…ăÁƒyïs—Eß‘CcáHd&eë×›xÓ‚3Ù/eáXØù äøƒøªª‰¾""X8™í, Ÿh¦reSÎX±¢è{²¦ÂZ5’㬬'¾RXï‡~¢ï„ˆÈq±p$²”3œóûªukSNdßËÆ˜2x|Ç'>Æ`)>ˆƒÆŸ‡ˆˆÔőȿâW)VNÊ`ß>96­p´³ecr0¥p|ô(߯ÎÁ~¡i G"s̀Á)V.Q'[ËZµ*́DÊ—²ö]8^¶h\ËS(t""²:DæØ‰RœăUơßËq… …Ȫ6]ăÆù~¥¬Î7c³1g#""Ơ±p$RY₫y…P5vøÂQÙ@›’̣ÄWÊÂQÙÜKDD¶Ä‘ÈdGpDGbdo>4å\ÊG»ăêjü¾Ê.¡Ê†[%PB·b«è»""rPR8®_¿¾OŸ>aaaÏ>û́”)SîܹSđ₫=úî»ïzö́Ö¦M›±cdzăuáÈDtp4™²p,^\ôY)ͨÊÂÑ´†[""² ‡(ç̀™3uêÔ¸¸¸† zzznܸñ7̃HOOÏoÿ¬¬¬×^{í‹/¾¸sçNóæÍË•+ùâ‹/îß¿_ô­&¬ÄJ)~Oç·›rbÂ|™2Ö¸H2¥pT¶Næ.‡b¨Ÿç!"À₫ ǘ˜˜Å‹lÙ²eñâÅ‘‘‘ùä“={ö¤§§_¹råư÷ß¿téRŸ>}¼¼¼Dß 6ó¤¸ÚåøVÙâh—c]LfbáXpµư}?DDÍÎÛÏ̉̉̉²²²|||rl÷ööÆ“mJ!!!«V­4hĐ Aƒ¤ ˜2e‘× É±eË–-¢Fvé̉%Ñ)È®]‘â„„„ß:TÀ·¹)bcöW…Ÿ§twöí»[؈¡:u¼7mzüg̃Ή*d*¿}Éă¥è̉цø“[Ÿ¼rÿ[̃H4ơ#jøHƠÅçi¡;NA+́¼p4 öÈơöËÓÓÀ½|z\%''Ïœ9355544´V­ZIIIÑÑÑ¿₫úk“&MÚµkWØ5 &&Fô­Û›   ËO¢®2(SpV¦å\¥-ïQÈóôMJ̣-́º={â“ODZ±Z´xâÛÑ=c ñO₫?½çÿíï"?ü-êøHƠÅçi‰Üÿ¬çn!rv^8úøøètº´´´ÛSRRđ_»cn“&M:xđàäÉ“lØråÊ•¾}û?₫ÿ₫ïÿªT©"ú¶H˜¿đ—çú[©D‰ÂÏö»œư;#^U׫'Ç;v`È|÷<¢ï‡ˆÈáØyGooïÜ-‹ÉÉɤqÖJ7nÜØ±cGƠªU¥ª@Ù²eGŒ‘‘‘ñË/¿ˆ¾'i>æKñ(Œ*`O£æâQr„ơMœ{hÍ<6ºÂ„¥hˆˆH]v^8HJJ2TCg²€€€Üû'%%¨\¹r톆ƛ7o¾!éÈ9øÀ'Ç·W¯ÊqÆFœN¹:¡#ׯ›´{VV• ½‡qØø³‘ǻ¿plÛ¶mVVÖ?ÿü#mÑëơQQQ¾¾¾aaa¹÷¯\¹²³³ó¹sçôz½r»¡CUGø×̀µ{··ooÄÊ8₫hGÙĐ«l&""°ÿ±OŸ>NNNóæÍ3ôk°xñâ[·nơêƠ«X±b†-©©© †Agîîî-Z´¸páÂܹs¥ÂÏ;·`ÁWW×֜ϥ E»¢kî”…c³fFœQù.ÖäN‘vëɹ³rª¹“ñR,,‘c±óÁ1Ê–-;qâÄY³fuëÖ­yóæ.\Ø»wohhèĐ¡̣º·QQQăÇ̃´i€3fôîƯ{Á‚5jÔHJJ:xđ`vvöÔ©SŸ~úióS¡"î%¼$ÅyŒÙµËÄ3Êñsö;CañâO¼”/L³fØ´ItÎDD”ûoq0dÈ/¾ø"(((""âöíÛ X¹reîÉ%₫₫₫Æ óđđøûï¿/]ºÔ²eËuëÖơïß_ô­HgpF; Cî₫ư×Ä3*§ wµß1*˜´»²±6ÏNÅ5QSô-9(ûoq4èÚµk×®]óû¶sçÎ;wVn)Q¢Ä„ &L˜ :q̉¨=A÷Å‹¢ïÉ&*V4i<ơ³ÀwïÆ‹/æÜám¼=ƒ ñø¡?ø‘h´ÅñáDZ±±{÷îMLL̀Êsh%‘8PiAå|½´7´8*»J^ĂkR¬\:œˆˆ¬Ms-ÿüóÏ‚ >, j.V¬X›6mÆŒĂÍ$Đq—âaVđÎÊY¬ â8-¦pQüZ*´Ûh4¢Eß‘ÑV‹ă”)SÂĂĂ:¤œ '###22²k×®?ưô“èÉq)[¶ -R ‡lqLI1éĐ<[‰ˆH ‹/̃¸q£rKÉ’%u:!ÎÎÎ₫è£öíÛ':MrPßâ[)®†j¹wØ¿_•½ô ̣ä\¡vKÙâhb­œßz/KñmÜ}‡DDB+…ă£G/^lˆƒ‚‚æÍ›wäÈ‘9rdáÂ…†U[²²²V¯^-:SrPY(¤¯­É“8:e‹£Jo畾ʈˆ¬J+…ă7îß¿ D‰+W®l×®»»;77·6mÚ¬\¹̉ÓÓÀÁƒEgJ®:ªç¹]ÙÏÄN}öÎôÇZµ Ù¡5䩸9>†ˆÈf´R8–/_̃0±bhhhé̉¥s|[ªT©Zµj0”D6ö₫âü:8ZÔϾ—Q₫gk\‹£IM¶ácŒˆˆ4@+…#€æÍ›ˆôèQ¯222âââ4jÔHtäˆfc¶Çđ<÷¹|Ù‚ 8N¥q-ÊN¢Gä½¼Dß ‘ĂÑPá8ỵä+&%%3æêƠ«̉ö7nL˜0áÆeË–9r¤W 2Ó́ââ(®₫Lœé°3½Å1¿¦ÜgđŒĂ1Ñ7FDä44ă´iÓÊ–-{ñâÅ;vܹ́³Zµj₫₫₫IIIçÎËÈÈP®\¹?₫8ÇQóçÏ8ÑüưM?†-OR® ¿kFŒÈcŸƠX- o_‚%s1Wô½Ù? Û¶m“⬬¬Ó§OçØa¿r¾"”c2̣cÎj¶8æ/¿Ç`KñR,eáHDdzUM¤M«!Oơ:^ÏsŸë×娨Âñ̃=9vœLJM=âüùÂ÷ICè#"rjq‘çë("Ñ–`‰÷Gÿ<÷™7Oư[ù̉ÖqZUU9¤ˆÈ–4T8;Vt DyˆBT¡ûdfÊqÓ¦ÆWù̉ÖqZæậÄSÍS8Â?À†x7v7'^'"².¾ª&Rr-Lggăq¨G“ÿFmƠªđ}Â.ÅK±TôMÙ?Á-½zơPºté… âBåXÏȪ2!·zuE×üv3gue‹£»»èµ² `̉A/—™™wåˆ@)^†e¬‰ˆ¬MpáxâÄ åÊ•“b"MQvp̀od €”ÓOmÜÄ4v¢bE3 Gɾ}\₫›ˆHøª¨ ÊÂñE¼¨æ©MŸ˜¦3ư]|Â1?5PCô½9Á-Ó§Oàáá!ÅDrMÚ?0Đè]­ÅÑDÊ'Y@áđ ˜`ˆ×bíËxYô­Ù3Á…cß¾}óŒ‰(VSwØÇàæf̉ÑưĐO*Á/,‰ˆ¬¯ª‰̣•T)~ /å·›r&o ÇB'›±'ÊGÓ+游|¿*ƒ2R¼kEß'‘ÓĐ<qqq.\ÈÊÊÊs‡Î;‹Î‘Å÷ø^cp~»ưû¯7n,:imR¶8&&¢Z5Ñ ‘94T8êơú+V̀=ûÑ£ǴÆÂ‘lFY8vDÇüvS¾H5¡ÅÑ¡( G£[œ]ønµQû‰¾C""‡ ¡WƠ?ÿüó§Ÿ~ZpƠHdK‡pȘƯ”…cÉ’¦_¦xqÑ7j}>>rlô¨ #«đ!"Å۰ͨcˆˆÈ,jq\¹r¥;;;èt:ÑIΜٿ•́~Ù˜ŒnqlÔ{÷¾Û` ‡q†x–=çEß!‘ỬPáxáÂÎÎγfÍjÛ¶m‰%DgDíHq/´¬Ñơë–]ÉѪ6«ÅñØ1Ô®÷n^đ’â5Xó#~}‡DDvKC¯ª«T© $$¤k×®¬I8#Gƨ€-ù0rp""² 5pÿ₫}щO]ĐŘC¼¼ŒÙ+¶8æ#8X•C×s«‰¢ïˆÈ!h¨p|óÍ7«T©’˜˜΅́H$Ê~́7ơ†T+·v´ÇÔT3*¸ÅQ9>f;¶‹¾C""»%¸ăÈ‘#•ưưưăăă?ù䓟~ú©R¥JNNyÔµóçÏ›3‘’ro Ge«›£µ8åXóí Æ`iư˜eXÖmDçKDdŸÛ¶å=wF\\\\‹EYY:̉¥¸:°§™“8*ûù9Z‹£øÀGÀ«±ZtFDDöIC¯ª‰´ăü ÅC1´€=Í,ÙâHDDEàÇ#Fˆ~DyXRÜ= ØSY8}e‹£§§èÛµ‰ÍX¥ºfMœ8aÔ!‰AŒè›$"²s‚ DZcÇ~DyˆF´‘{nØ`ÖŒYl?*T0£p|æc ÇAô.̃5Ä»±»‰¾a"";ÄWƠDÉÈ0ë0ÓK¨"Ϭ7̣Ï+V¹p¡ =_ĂkR¬l0&""i®pŒ_½zơ­[·Ü¾}{̣äÉmÛ¶íѣǂ ¸Œ5Ù^{´·ÊylF³'ññfT¿¾‰ˆ́† G—~øaĈơêƠ 6lØ”)S¤oưưưW¬XQºtiÑi’£¨ê¶¸ ÇÂ(ç9*´‰·ä½Y8©N[+Ǹºº;v́رÊ^^^¿₫úkHHˆ““†Ê\²K{°G•mW…rw7÷’Y8̃ºeü¾ƠªÉñÁƒ4ÈØc+ú>‰ˆ́† ǯ¿₫ÚốÙÓ0PÆÀƠƠµzu›´ưĂS¶Q™T86¤Z¹nc1— J‰ˆÈ*7nÜxưúu­ZµRD6£,Ë„¶@Ó Gå‹ZÇlq4ד«æí¼̣#~4Ä)Hñ„YÓùQ^4ộ·W¯^†àâÅ‹¢s!•f˜?uJY8ÚFFFáûp| ‘ơh¨p5jT=,Z´è† £U‰̀W…ĂR¾65m¡j‡-]]mp‘è Å,‰ˆÔ¥¡WƠcÆŒP¦L™ØØØöíÛW¯^Ư××W§Ë9ïüùóEgJöé,ÎJ±1•…£i½p•…£Mj)­([çÏ›q\`àưB÷/₫}ÏDDvEC…ă¶mÛ¤8==ưĐ¡C¢3"ÇbêÈój˜2ưµ])Wμ±~}lÚ$:y""̉Ô«j"±fb¦×B­B÷7f F̃L™ÅĐ®˜û^^ÙàáĂÂ÷W¾­&""i¨ÅqĈ¢S ‡–…,“öđÀÜ+±p4‘ŕÑÁƒhÖ¬ư«¢j$" ñ:¬{ /‰¾s"";¡¡Â1ǼßD¢8ĂÙº`áh¢ĐP93§đÂqæÍÇăÎĐ«°…#‘Z4T8*ÅÄÄœ?₫Î;/¼đ‚››[jjª···è¤ÈƯÁ)~¯tl©R&^́æMÑ·+ˆ²p¼}~~F$Ç&N˸ ́ID¤Í7nœ7õ•ÿd5kæååƠºuëÁƒ=:÷ k"U¬Â*)6µp¬WOtöE…r™œ+WŒ/•}DDL[ƒcfΜ9eÊ”+¹^䥥¥ÍŸ?úôé¢$»¥,Û IDzp4–²ÅÑÜ÷ơGµ[ÂDß-‘̉Páx̣äÉåË—bgg¹“™ÔʸfÍưû÷‹N“́Ó˜6FúÈ9fáh,5 G#)'Tú‹¾s"";¡¡ÂqÑ¢Ez½̃ÉÉéư÷ß?¨˜"ÏÛÛ{îܹnnnV¬X!:M"PN3fvÛ–CÍ₫  dI9¶rá΅o lN&""Kh¨p<}ú4€Î;0ÀƯƯ]ùU‡Z¶l à̀™3¢Ó$;×ÙMY8>ư´¹s¨ơs0±p¬XÑ´Ó?…§¤˜…#‘Z4T8&%%RŸTpëÖ-Ñi’ú ?I±‘#cÔYØÈ‘ G—ϱ¤?@2Dß-‘ĐPá Ï^Œz½~ß¾}ªT©":M²CÊ©¾èk̀!êŒíuäÂÑÄGeáh̀â1Ê¡œQû‘Ñ4T8ÖªU À̃½{ÇŒmؘ˜˜¸sçÎQ£F Ç5jˆN“́P"L=Äüec”X8MÙ‘ÔÈæ^eăñ)œ}ĂDDö@C…ă°aĂüưưDFF¾₫úë†C† :tè¶mÛxyyqYB²+,¦lq4²pT¬~¯‹¾a""{ ¡ÂÑßßö́Ù~ù̀ ́åå5kÖ¬²ü-Y_MÔ4ơ§2ñ€;̣5OLˆíh²³MÚ]ùŸ¾‘ưª£º'"Qô Ùm­Ó¤I“­[·~÷ƯwÿüóOBBBZZ‡‡G¥J•5k6lØ0///Ñ ’ÚRpS7yІ²¥™ÅŒ‘I—aÚX""Ê“¶ GăÇ?~<€””OS¦%2‘%‹ ‚…£ÆLrK&2EçKDd?4ôªZ)++ëâÅ‹'O¼xñbVV–ètÈ) G?µẓ±cr̀ÂQË” ÜÆmÑéykqŒ3gNTTTFÆă©×+Ö¦M›ñăÇç7Å#‘%̀h‘²hÙåü…Øû"0W¯Ú́j¯âƠïñ½!^…Uc1VôưmÚjqüé§Ÿºuë¶mÛ6©j‘‘Ù¥K—7ŃYy”7rOeálâe¬¼ÔÖYĐÈZ̃ØÿÿÈZ£µsư""Ëi¨pÜ¿ÿǬ|1]R±²mVVÖ´iÓ©³^ÑcÊéưŒïàhÑ́ß,ÍeÉâ1â è›'"*̣4T8®^½:33@¥J•æÎ{äÈ‘=zt₫üù†—Ô+W®4ïäëׯïÓ§OXXسÏ>;eÊ”;Ê)Q̣qüøñQ£FµnƯºaÆ ø÷ßE?!RŸy#c,úû……£¹”½2¸ˆ ‘*<ÀƯƯ}Å:tpwwàææöüóϯZµÊĂĂÀ̀8óœ9s¦N×°aCOOÏ7¾ñÆééé²}ûö~ưúmß¾½té̉aaa‡8pàöíÛE?$R™²pTNûW°´4 .ÉÂÑ\f̀ :‰¾g""û¡¡ÂÑÍÍ @Í5s|UªT©Úµkpvv6ơ´111‹/زeËâÅ‹###x́ر/¾ø"¿CîƯ»÷Î;︸¸¬ZµjíÚµ‹/^³f««ëû￟mâ¬Å¤q¦÷»́Ø *ç<7±7¯pT6$¯ÅZÑ÷ODT´i¨p ÿèÑ£_effÆÇÇ쵪׭[—=nܸ̉¥K¶L<ÙÛÛ{óæÍùU7nLNN>|xưúơ [j×®Ư©S§[·n?~\ôs"«(†bfåëkú1₫·‡²ÅÑÄÆWåàă»™öC?)æø"" i¨pœ8qbÅ“’’Æ{íÚ5iû7Æưúu''§đp“öØ¿¿““S«V­¤-ÎÎÎ-Z´HJJÊo¨ÍÎ;u:]÷îƯ•?û́³˜˜˜:uêˆ~N¤å2tÊá·Æ³p¸†#² pT2¯›éøCôưm‚çq9r¤̣£··7€íÛ·ïܹ388ØßßÿÖ­[çÎ3 ñôô\¶l™Ô h ½^ëçç—c ́jƠªHLLlĐ Aî£Nœ8áëë[¦L™>|øîƯ»Ï<ó̀óÏ?oèvIvc6Hñ»x׌3Ü¿/úÅT ذ-Z˜wƒ!MD$‚àÂqÛ¶mynÏ̀̀<}útÉÉÉùퟟ´´´¬¬,ŸÛ êíÛy¬$ñèÑ£û÷ïW­ZơĂ?\³f´½B… _}ơUÍ5¹nHHH-[¶l±₫ă´[—.]²Æi—–[ ×Çq¥„J H0æ¨sç\Çơú÷¿™b̉E•³Ø'$uEƠYéyE§“Àmoï{&?ùùÿôj–«yÂơ„©G™Dä#µS|¤êâó´PÇE§ [9F]†¡Ó†ÙJ†%°ïƯ»—ûû÷yóæ¬Y³ZµjơàÁƒ 6̀Ÿ?́ر›6m2¦Ư1&&Fô­Ûk¬t'Í8t´·o_*(¨”™—¸’Öạ{đÀÏ‚4Œ¿…p„Ă8C|>è¼yƯT̀‡ŒÄGª.>OKä₫g=w ‘ƒ\81ªç÷ññÑéti¹o¦¤¤à¿vÇ ƒ»̀œ9³M›6†xÔ¨QW®\Ù¸qăüÑ»wo±ÄRËxæ N”kö‡cúÚƒæ-Xø*^• Ç•Xi¥Â‘ˆÈ.ǵî̉±...̃̃̃¹[“““H㬕<<<ÜÜÜt:]ëÖOüẹ̈üóÏoܸñ̀™3bŸYCWt5~g‹–Qbáhz fNá蹋ó*¬’V¯&""SihTµ•$%%*E‰¡ŸS@@@‡”.]ºX±b:N¹Ñđ†Ú0L‡́Àj¬–âhüª-{iÁTØvÂôQƠÊÅcôzs®™…,s#""Â[sØ·oß¼yóÎ=›£ÎS:uê”)§DÛ¶mcbb₫ùçŸ.]º¶èơú¨¨(__ß0å¿B ­[·^±bÅÙ³g ƒ¯ s÷lÂtHPA9û™GC-ûöí8pà¿ÿ₫{çάü™zÚ>}ú899Í›7ÏĐ¯ÀâÅ‹oƯºƠ«W¯bÅÏùœ :ëÑ£€©S§JĂ®?¾téRooïvíÚ‰~N¤?ñ§€«*€Y8æ5:­`Ê¿ơLê3 lT>¢ïœˆ¨¨̉PáøÍ7ßèÍ{ùT ²eËNœ81>>¾[·nÓ¦M4hĐœ9sBCC‡*íƠ±cÇáÇ>V¯^}„ GíØ±ăˆ# Ô·oßGMŸ>ư©§ưœH+<=M?FÙÆÆWƠ¦S 5©Ï€ráÁ•X)ú>ˆˆ* ½ª–ƺ÷îƯ»K—.̉èfË 2¤T©R¿₫úkDDD``à€ÆçYà?ûÆ ó÷÷_¹råîƯ»}}}Û¶m;zôèàà`щÔ×M̀;0ŸRlq´ŒI-!'ÎX…UŸá3ÑéI*=<<îƯ»đñÇ;9©ÜÚµk×®]ó9Û¹sçÎ;çØØ«W¯^½z‰~*dë±^M£dÎzƒÊá lq´ŒÙĂÛ¯á™G9< ½ª6,íéé©zƠH”Ă¯øU{¢§ñ;'Çlq4“J/<}#DDGC%Ú Aƒ\\\âââV®\iÎD’ñ£ Àø•ưề)•-.jï·)Aó0 “â«0}6H""̉Ô«êºuë¾óÎ;Ÿ|̣É'Ÿ|̣Í7ß”.]:ÇL›6m)9.åëÑÚµM?̃ŒÙ«íOÙ²°`Áè§BR’9ÄÀoñ­!^‰•ïàÑ‚ˆ¨èÑPáxö́Ù… âääädƠ¦Ë#ÊW5T3iK—aáK[ðm›96C3)^,‰ˆ̀ ¡WƠ‹-’æM$²ñ¯›:2Æ̉ecL_+ÅY\8Zî4N‹~ DDE’†Z8`4ỉ±cG§ă!RRNă÷^3éØ[·,»6[aéprå`ö'P³¦èÛ!"r$*x{{/]ºÔÅaÇ ơ­À ).̣6½ö5Nód‹ăưû(Ỷ¤£s,cRáø2^^‹µ†8éîpư,ˆˆ ½ª®_¿>€ÀÀ@VdU©Hµü$®®¢o£èR¦¿»‘g̣6¹ç€²g×!"2ƒ† Ç1cÆøúú={6**Jt.äJ£´ÙǪ̉ÓÎA)_U[öî̃Ô±J!Ïó¯lx&""#i¨mï‹/¾(S¦̀;w̃xă5kä9ÏüùóEgJEX b¤Ǿ5cÀÂÑÊGÛJ{°Gôƒ "*z4T8FFFJñ‰'Nœ8!:#²C–ŒŒ¹pAÍYo zJ-fÎ9»ˆˆlLC¯ª‰l`fIqM˜6"w÷n9¶´Å±LÑOBl>̀¼:ˆ¾g"¢"LC-#FŒÙ¿,d™}́iÅÜæ,£ä° Uç`Vá¨ÓÁ́EI«¢j$¿ÜXƒ5ưĐOô# "*J4T8;Vt ä@£¸©‡(ÇđZ:ªÚ²¹ í‡Y¯ª›7ÇÎf^pæÍÇă~̉˱œ…#‘I4úª:&&&22̣§Ÿ~JIIÉ̀̀¼wïèŒÈ\Æe)„A¦né²1Jlq40«ÅQ­¦âOÑ÷ODTÄh¨ÅÑ`ăÆóæÍ»̣_;D³fͼ¼¼Z·n=xđàÑ£Gç9ÎÈH˱\Í(ỚÇÂÑÀâÂñ̀<óŒè» "rÚjqœ9sæ”)S®äz{•––6₫üéÓ§‹N6eáØMl}ù̀L9æ«j³ÆE+ G3›£¹èÛ&"*ª4T8vʦt¶8ªÄÂÂQÙMDD…̉Páxúôi;w0`€»»»̣«:´lÙÀ™3gD§IEU’¤ØÔ©¿s0³pd‹£˜Q8:)~ïư†ßDßQQ¢¡Â1)) @PPP߸uë–è4©¨²pdŒ ËÆ([¼p|̣/CKpÆ""[̉Pá Ï^Œz½~ß¾}ªT©":M*ªV@îçĐ ­L=\Ù²¥B‹£™Ư$í…è7ơ Đ@ô# "*’4T8ÖªU À̃½{ÇŒmؘ˜˜¸sçÎQ£F Ç5jˆN“ªă8nÉá*Îâ×’%-:\Ùä¼[D?"¢"CC…ă°aĂüưưDFF¾₫úë†C† :tè¶mÛxyyqYBEY8:™÷ßY«¤Ø'‹ G çW.ó>ư8ˆˆ ₫₫₫³gÏöóóËó[//¯Y³f•ư†‹¨û¸/Å}Ñ׌3¨°l [%ÿ‡laáèù÷̀́ư8ˆˆ 4i²uëÖáLJ††–(Q€‡‡G5ÂĂĂÿúë¯6mÚˆNªeX&Ń1ØŒ3\»fq,%ª¶8>-úvˆˆ†æ–ôôô?~üøñ㤤¤xzzΈ́²plöb’¸~]ôcĐ eáxï¼½M=AÅcªW79…0„ÆaÑ‚ˆ¨ˆÑV‹c¬I-ÇpL­S9øxhu(_U›Ơ«&g^/‚!"ÅCDd$Á-wï̃5ơ±9“ƒ³°wO¶8^½g±ädæƒ1x4FâeXÖE?"¢"@páØ¸qcS‰‰‰›39ÉH–båpZó°pT²p´x°¹y…£<¤x=Ö‹~"DDEƒ¦_U©BÙÁQù‚̉x*,CJÊÉ,3”œlá ˆˆÈX,É₫) Ççñ¼gPaöo%_o0qƒÍë™F+£ªu:ƯÓO?]·nƯÚµk—´pQ¢'Y¸f T/9©’¹¯ªK–ÄưûæúØ 9„Çÿ¯ƯŒÍĐIô³ "̉:­z½>66666ö矮Zµj½zơêÖ­V¹reÑ©©±lŒ[•̀mq¬WQQ]y†ŒÂ(C¼ ËX8Jpá¸qăÆ£ÿ9₫<€́́́³gÏ={ö§Ÿ~àăăS·n]CY»vmìàDÆ»¹â+xż“lQw¶e—IڳǼă,Ÿ_ÁîR¼D?"¢"@páX³fÍ5köïßÀ½{÷;&Ơ‘÷îƯp÷îƯ¿ÿ₫ûï¿ÿà́́üÛo¿‰~hT”(̀öB/óN’­jN={|"ZS¬˜yÇơéé—ÁÉ“ }#DD@+¯ªx{{7õ¼yóæ†.\8zôè‘#G=zæ̀™̀̀̀¬¬¬3gΈN“˜ïđ÷„¸íÁ9.WNäÑÔTó«__0³plŒÆÿâ_Ñ€ˆ¨ÈĐî¨ê’%Kzzzzzz–(Q¢˜¹mDgqVų¹¹™{äåËr̀Á1jPÎ~à€™' G¸oÄFÑ÷DD¤ujq̀ÎÎ>wîÜ¡C‡9røđá yơăX2›“&)[¹L£;̀GµƒD?""í̉î¨j"yĂÛ́cUé?ÇÇœÔèèi~Ï…—ñ²+›¨‰ˆ(7d·Nâ¤K#gÍ NáÈÇÔZ®́9®BR»°KØ!"* ¿ª̃´i“è'@vkH±%Cª=R#¶8æ ,32̀[?FÙâxà₫[=€ˆˆ¬Epá,ú Ư:y¡„ÎF¹r áÉWƠ—/ì)Z•…ăÁƒæ=Đăübˆ“‘́/ÑO‡ˆH£øª́Ö¨\«¾%{¢lq4·9V9¯‘%= ̃Ä›Rü-¾üdˆˆ4Œ…#Ù¿ª¨ªÊyTAåhq´˜%…c;´“bDD`áHöéOü)ÅĂ0̀́ó(ß0›?‰#å¦l¿U£¨ZótÅ!Ǹ!"* X8’}R¶YR8*'qT§ÅÑß_ÜSÑ* 9wƒ›èˆˆdŸ~ÆÏR\%Í>̣¨:…£ÓĐØ Ê¿.Ná”g""²g,‰ ¢,Ô8£_Û ^U‡†ª“‚²pd7G"¢ü.ÓÓÓÓÓÓ333dee%$$$$$ˆ~&dWZ£µ%‡+_U«ƒ-¹YĐâ¨Öˆ¥êW“dáHD”Á…c³fÍêÖ­»zơjׯ_ïØ±cÇE?*̣–a™[̉ÁÀéÓj'ÇÇÜ,hqTjM²₫?""­<øĂ‡lƯºµråÊ÷ïß7lܳgO‡4mÚTlΤ}Ÿăs)V®D,Œrl6[sKM5ûPåP÷Đ­›ùY#øΉ~DD&¸p|ê©§nܸqàÀ®dƒ *àµfƯ û¥\3F”Ma,UU»¶ñ…E…cB¤Âq36wB'Ñ7GD¤9‚_U·lÙRô 2Jͬ́ĂÇWƠª̣đcww‹Nµk¥xˆ¾3""-ÜâøÎ;︸¸́ÚµëÖ­[z½>==@‰%D?* ¯z¯«uÚF,8˜-6±oŸE‡—€ü›g6‰¾""-\8–,ỴĂ?4ÄW®\iƯº5€Ă‡‹~,T„)ÛF`„%§—c‹ Ge‹£r}eçç‡Û·U<ßƯ»¢ïˆˆÈ̃ihG77·çŸ₫ùçŸmʱêYrªÿ•cƠZI¢½·öƯ ÷‘LAètˆˆ4GC…£ŸŸßüùóçÏŸoø˜}óæÍ¬¬,ÑyQ“†4µN¥|ơfÁ‰4°2©ôÖ^Å6Ü‘)Åó1ßæO„ˆHë4T8¤¦¦Î=»k×®uëÖ}î¹çêÔ©ó /|öÙg))üëŸLŒ` Ï`aŸ9[ó¤R‹£EÁOjöR̀ñ1DD¹i«pÜ¿ûöí/^|ö́YĂçÎ[ºtiǪ¿ˆÙ›ßñ»[ØÁ*lq̀“J-ÊÂQÅ?0/⢭‘æi¨pLII™8qâ­[·̣üöæÍ›o¿ưvª“#Pqd €̀L•̉bá˜'eᘑaöi”…£²[ªyüà'ô¡i† ÇÅ‹_½z€¯¯ï„ ~₫ùç]»vựË/o¿ư¶€+W®|÷Ưw¢Ó$MÛ‚-Ŕ WÑéüG¹r I”¯ª-¨­7–cˉ•óÆn1O†ˆH«OÇ£t́Ø1îîî+W®¬V­a£¿¿5ZµjƠ§OŸôôtÎÔCB‰ÎÀ.)[¯\AåÊæÆÇGU)g`†!¡'qRÜ""̉ µ8={@£F¤ªQܬY3p½A*Đ Üẫè­â™U~A2•Z•,/(ŧpÊöO…ˆHË4T8ä7ÿNvv6gggÑ ’vÍÅ\)ƒ1íúu9fáhr‰¦VáÈñëDDV¥¡Â1$$À₫ưû?ă«“'OîÙ³@p°¥¬SÍÑܳ)‡Y({ÑYä©§l₫T-U|ĐISÁyDD2 aaa>|8hĐ ¯¿₫úàÁƒ/^;eÊ”;wî́•+Wêׯ?qâDч ¢|¥ø&̃´ü„÷îY!K¶8æG½ÂQ•¿*~ DD¤¡WƠnnn#G9r$€””O5ú.Í™3gÑ¢E 6¼páÂÆÏ;·råJcÚ/ơzư;ï¼Ă•²µO»s5?|(Çlq̀OZ%G+G/ưû/4±413ÿVÜ„M/ేˆH#´Ơ☃*UcLL̀âÅ‹¶lÙ²xñâÈÈÈ;v́‹/¾0æđåË—ï³Ê;K*2J—¶́xeï=¶8Z‡² Wå¿W!"Ê“¦ GU¬[·.;;{ܸq¥ÿû÷̣äÉ̃̃̃›7oÎ.¬3Ô¹sçæ̀™ó̀3*Œ´ «Ú¹Xè₫êÜ̉!ƠÊ—°lq´¾Ưj4=+׫ܭ¢ï‰ˆH+́¿pÜ¿¿““S«V­¤-ÎÎÎ-Z´HJJ:tèPfffN4É××ẉäÉ¢o‚ ± ¥ø|`ù ï̃•cË^¢6ȱ‹æ:‡ØŸóçEg@Dd¿́¼pÔëơ±±±~~~~~~Êí†U  8ö›o¾9}úô§Ÿ~êåå%ú>¨˱\«¡ù'ú²ƠjÊËÎ¥le´`€—}̣÷A¾†b¨sÅj"";oÿHKKËÊỆññɱƯÛÛÀíÛ·ó;đÈ‘#ß}÷Ư€5kṿ¤ÉÿfVÁQÚ²e‹è‡Q„]ºt©=‚ä0!!Ạ́+FDø>†¸lÙó z³OơÔ‰̉_ªäf¹ÂŸ§­”+SÆơÖ-CláĂqs«üàN•S¼T́¥ïÊgˆ§ßŸ>ëÖ¬vÖÎ#µ|¤êâó´PÇ-?‰}°óÂ1==€‡‡Gí†a7÷̣™p%==}̉¤I*Txë­·̀»nLLŒè[·7AAAù}ụ/à…ö4̃©Sr\½ze‹Î¥xí­JnªĐJ&U«âÄ URzöYüơ—w¤øsd}ÉơëJ®+dOKä₫g=w ‘ƒĐhás₫üù;wî¼đ nnn©©©†6BSùøøètº´\Ô ÓëäwÎY³f]ºtiÍ5œo¼Hø_JñLPåœ{ö¨—ßÅ‹¶~"EHƠ¦KlÖL.Ó̉P¢„è[#"²Gëă¸qăÆÖ­[wëÖm̀˜1Ó¦M»}ûvJJJ«V­æÎ«×›üºĐÅÅÅÛÛ;wËbrr2€̉yͳ²oß¾5kÖ 6¬N:¢EY8¶FkUÎùàzù±p,@Åj©iS9Ve`5€Îè,Åwq×V…ˆH»´U8Μ9sÊ”)Wr­Z›––6₫üéÓ§›q΀€€¤¤$C¥(1t Ƚÿ¹sç,X° ä?={öđÿ÷!!!/¼Ày€5'é¢S()Ë9eáhÙâ1ÍɱZ…£²[ù÷ ‘ẲĐ«ê“'O._¾Ü;;;geebîq‡÷5kÖté̉¥aÆ&¶mÛ¶111ÿüóO—.] [ôz}TT”¯¯oXXXîư+Uª$íipï̃½èèè²eˆ……•)SFôs¢|…!̣̀“äPM…!Ú”?eáxñ¢%¤+;¨U8¶E[)₫_~„lư|ˆˆ4FC…ă¢E‹ôz½““Ó{ï½×«W¯ºuë¶{{{Ï;w̉¤I}-Z4õ¼–-[ÆÄ,^¼øÖ­[áááÅ3́“zăÆbÅ•/_₫¹ç{î¹ç”g8ỵdtttƒ >ÿüsщrê‡~R¬VG%e;©/Gá¨|ßlµ G¥T¤Úè™i˜†^UŸ>}@çÎ cTJ‡Z¶l à̀™3¦¶lÙ²'NŒïÖ­Û´iÓ 4gΜĐĐĐ¡CåIÚ¢¢¢:v́8|øpÑÏ€L¶̣0– Ê9•ƒçX8Z—r’Kơ:ƒ̃¿¯Z‚îà9""™† Ǥ¤$ä?_@pp0€[ÿMùf’!C†|ñÅAAA·oß0`ÀÊ•+sOîHEÑ\PưœÊö*5 ÇÀ@<"L“£ˆ–b©ÏÁÑé ¦¡WƠ!!!‡̃¿î¯ôzư¾}ûT©Rż“wíÚµk×®ù}Û¹sçÎ;ç÷mhh(çeԾʨ¬Ö©”…ch¨z)ª7‚Ø>Y\8V®¬₫zƒưĐï¼bˆ?Ăgă1^À“!"̉ µ8ÖªU À̃½{ÇŒmؘ˜˜¸sçÎQ£F Ç5jˆN“4d–Iñ;xG­ÓZ£‡À±0ÖîWp ×lö0ˆˆ´IC-Æ ‹ˆˆ¸uëVddddd¤aă!C¤¼¼¼FŒ!:M̉YWƠº¨*—Q Ç‚©Q8₫øăă8>澟Èé ÇB©Z8>û¬Ơó½„KV¿‘Vi¨p\´h‘^¯wrrzÿư÷<(m÷öö;w®››€+VˆN“4ác|,Å#1RÅ3ïÜ©j¢, ¥jáØ¢…§¤¨™f pơ""-§OŸĐ¹s縻»+¿êĐ¡CË–-œ9Ăix °ÎƠªz:…RÎR¤×[x²–-å8*JÍ4• ÛŸăs[<""íÑPᘔ” ((ïÑ‹ÁÁÁnƯº%:M̉–„ˆN¡@÷­2‚Ç®([-®³•…£ºÇưĐOÙÍ‘ˆ–† ÇyöbÔëơ†µª«¨µˆe³1[­×ÁQ9›4Y‘ª…£››«Û⨔Œd+?""̉PáX«V-{÷î3fLtt´acbbâÎ;Ge(kÔ`7#z¢½g¨xæ¬,9V¶]‘©Z8*ưû¯Ê™6A)~€V}*DDÚ¤¡y‡ qëÖ­ÈÈÈÈÈHĂÆ!C†H;xyy1Bt$̃]ܵ̉™•/7Y8ÚHé̉r¬í.¡S1ơ¼`ˆŸÇóш‘­i¨ÅÑßßö́Ù~~~y~ëåå5kÖ¬²eËN“KÂGR¬lü&"rjqܸqăơë×´jƠª;„Q^à€Ä@ÑéF9™8 Gc$«0ͲsjT^|QÍ•MŒRÓ#‘ăĐP‹c¯^½ ÁEm¬$¦a+Û~Tר‘gù¯í`áh;.?‡­7•#‘c̉Pá8jÔ¨=zX´hÑ7D§CZ)®„Jê\Ù>¨Î åŸ@,E8tHưs¾‡÷¤øü"ú‰ˆlJC¯ªÇŒ L™2±±±íÛ·¯^½º¯¯¯.×ÔóçÏ)‰çb…]eë”ú…#{_Ø‹đÑ'øÄ‡#¼zˆÎˆˆÈv4T8nÛ¶MÓÓÓY£­€²åX.ÅƯÑ]ơó«?‰£²pTwp¯)_—.©x>WW>₫رcôÿÍo²eˆÎdß")Å5PĂÚ—{î9•N¤́«ÇG›+VL­7•£r¨Ö2,}ÓDDV§¡Â±aÆ222øƠW_8pàâÅ‹G]¼xqÿ₫ưÓÓÓÔ­[ÀôéÓgÏ  B… ¢³&Û @€•Î|U^•F½!ƠÊW®lqJ9×’º”Cµ&`‚è%"²: Íă8ỉ¤ƒ̃¹sç₫ưû .\¸paÎ\]\àđáÆ-=zô0ơ*T´(Œ±̃{je‹”j“8²ÅÑ$ÎÎÈ*Ú“ïá興¬NC-•*UZ¸paé̉¥óü¶X±b~ø¡¡Ủ ~ưú;w5Y×,̀’âWđ•®¢́§\­Î"ÊGOO+en?¬P[Ûæ…„rˆ̀fl¶àLDDE€† GaaaÛ¶m{÷ƯwëÖ­ëíí  xñâO?ưt¿~ư₫üóÏ>}úv«U«Ö¨Q£–-[ÆUIVéWD&²Ö +¼Í·Í @oăm)¶̉$£DDÚ¡¡WƠÅ‹4hĐ Aƒ¤¤¤xxxètºû|üñÇ¢Ó$[X¹»‚•Œ1PöqTJY; +´8>ÿ<–ư7^%* -[Z%ñç §Ú‡}V¹‘fh«ÅQ¹iÓ¦ÔÔỒ̀̀{÷ØyÈÀ).zm9lq4‰²ÅQ¥I5•ăœ̃{Ϲ‡!L/ƒ“Ë‘=Ó\á¸qăÆÖ­[wëÖm̀˜1Ó¦M»}ûvJJJ«V­æÎ+ÍÅCd%uê¨w®GDßM‘¢lqT©æVÎÖuÿ¾s_€R<#­x%""Ñ´U8Μ9sÊ”)W®\ɱ=--m₫üùÓ§O ÙίøUûƯïg½ )Ü^xAôm;,eáh…·üÇY1÷&h"Å¿á7+^‰ˆH4 'O\¾|¹!vvv–¶K}׬Y³ÿ~Ñi’(ßStë#ë]hÓ&9fá(Œ̣Uu|Ë_*Kñ̀F¶ètˆˆ¬EC…ă¢E‹ôz½““Óûï¿đàAi»··÷ܹs «W¯XÁaÅUÈ#VœálÁ™ ¡,›41ÿ<ù*SÆzÉÛÅß*¶8†„Ø(}åß6µPËFW%"²9 §OŸĐ¹s縻»+¿êĐ¡CË–-œ±̃¤%ăo).ë^üaå›á́ߦR¯Å±K9¾}Û)wHë ŧpÊ‚3i† Ǥ¤$AAAy~ àÖ­[¢Ó$[‚!R|'­z­lk¿Wdáh*ơZ•}¬ưB ”°îˆˆ4@C…cHH€<{1êơú}ûö¨R¥è4É Å~đ³ÍEƯܬs^.Tmª„ËÏaĐºµ+û$XĂR,•âafƯ‹ ¢¡Â±V­ZöîƯ;f̀˜èèhĂÆÄÄÄ;w5ÊP8Ö¨QCtdu;°C»£»Í®«æÈ˜‹å˜-Ú`íǾè+Å‹±XôíY…†V6lXDDÄ­[·"##### ‡ ‘_Yzyy1Ầ³SÑ¡|O½ Ë,8SᢢäXÙÎRÊ^zlqÔ†ÔT«_¢J¤!MôY‘†ZưưưgÏíç—÷{I//¯Y³f•-[Vtduçq^}ákƠk)[¡ÔlqTö̉c‹£ĂP₫ó̃‘ú4T8h̉¤ÉÖ­[‡Z¢D 5jÔÿ믿ڴi#:A²º­Ø*Å=ĐĂÚ—Sö{ó÷Wï¼ÊG_ëÖ¾öĂ:=˜;w¶Ư¼Œ—¥ø;|g» Ù†^Uxzz?~üøñRRR<==EgD6Ợ"1_ăkk_îôiëœ× kŸØ¿§ŸF|¼êgí̉ăưûѰ¡uo nđÀ§#Ưî–ˆH[´Ơ☫F”„$)®€ ¢Ó1W\ûD<ë¼Ó·åŒ<~ÆÏR¬ü+ˆˆÈ>h¨Å1==ưàÁƒÇ»y󦡭Ñßß¿víÚơêƠóđđÙÂ÷ø^m<¡Iͪ…£”£ˆ23á¢Îo§åxÓ&|ø¡uo¢:I1×­&"û£‰ÂñÑ£GkÖ¬Y´hÑí¼Övpwwï̃½ûرc}ÙẀ̃)ÇS/Â"k_N9] Ê›Ø`¯ưQ¶8ÆÅYc¹@ÅR¦VT5Oà„!>‡sÁ¶ÅU‰ˆlBü«ê#G´k×îÿûßí|VKOO_³fMçÎ9":Y²+¿₫*ÇsçΆ”…cQn²ư?J1ßV‘\8̃¾}{èĐ¡×®]“¶+V¬lÙ²5jÔ([¶l±bÅ”{¾ñÆwîÜ›0YO[´•âñ± ®¸aƒ7j$ú₫©ŒbQ̣ÅjN fÓû¨…ZR|6iä$"²Á…ăªU«’““ q»víV­Zuüøñ;vụ̈Ë/;v́8qâÄ?₫Ø¡CĂ÷îƯ[¹r¥Ø„Éz¶c»OÅT\q÷në_#0Đ7b'zJUí—̉»·?n‹[ñ‡<·Ó°₫""[\8JK öêƠk̃¼y5̉étÊêׯ?wîÜ—^z)Ç₫dgá‘»h£ë­:jƠ²üèÄ O¦,•Í̀Ö“ˆD)¶Át¤DD6#¸p¼øß’¾£G.`·±cÇ‚ .ˆM˜¬Dù«rBÛ¨]Ûj§Vy´¶ĂPµp¬VMmS8ºÁM3a‹KÙ„àÂñ₫ưûüüü |£çïï_ªT))))b&+‰@„wEW\ñÔ)9V¶H©à¿?‡æzøĐJ'V₫ÿƯª¦cºÛ¦ë‘ .³²²¸»¾¸‚aBĂ₫dgvb§?‡çlsQeËSŸ>ªZÙZÆÂÑQ}€¤ø|":""uˆŸ‡¨ZI±Í̃S+ ÇgQơÔ,ÍV¼¸•Nܲ¥€»ñ€<;èe\‘Ú41 ááÇ{ö́)xŸôôtÑi’µè¡—âR(e›‹Zqt­²p4¢5d5kZi’î̃½ơ8̃µ Ï>k‹»ù½…· qôÙ  ă'"².M·nƯ4hè,HŒ‰˜(ÅÓ0Mt:jPu`‡c±fá( ÀÛ°ÁF…ăL Ç=ØcÙɈˆ4¯ªI°/đ…ˆmŸÀsªwªdáh6å›}U—mTN.n›ƠÊ•cCÍY͉ˆ„`áH"‚<Ƶ"*Ú́º{÷ʱÊCªdpús) G«Ơß—.ÙËĂ0Û]˜ˆÈ:¿ª̃´i“è'@"u@)D¤Í®;~¼wé"ú)$GáØ¸±è„T–Œb(fùyˆˆD\8‹~$̉%È?Ï@Ư±Í‰‰‘ăªU­vŒ1Uụ̀r¬v‹cÏøù¿!û™™p±Ơ/¿ßđÛ‹xÑ?‹g÷aŸ.LDd|UMÂŒĂ8)n‚&¶¼ô;6¹ çⱄڅăÀrlËEﻡ›ïÇ~Û]˜ˆÈ ¥p\¿~}Ÿ>}ÂÂÂ}öÙ)S¦Ü)¬pHOO_¾|ù /¼P·nƯæÍ›¿₫úë»ví}öæk|-ŢƜúøXó́,-¡váøâ‹rlËÂÀ ’âÏđ™M¯MD¤*‡(ç̀™3uêÔ¸¸¸† zzznܸñ7̃(`bÈ̀̀̀Aƒ}úé§7nÜhÚ´iƠªUÿư÷ß!C†̀Ÿ?_ô­Øeƺ¨kËKŸ?/ÇÊV(uÜ¿/Ç,-qíơÎ-Íéhßă{)~ïØôÚDDª²ÿÂ1&&fñâÅ[¶lY¼xqddäÀ;öÅ_äwȺuë9R¿~ư¨¨¨… ~ÿư÷¿ụ̈‹ÏüùóOŸ>-ú†́DGt”âđ-/­lmR¿pä²1”—̉(-ÅÇa½Ù版¬Ë₫ ÇuëÖegg7®téÇ¿¸'Óíí½yóǽ́́<Ù²e €÷̃{OZD;88xøđáYYY|am đ´åå”…cưújŸ…£† YxĐ@ù×QÔư$ˆˆ̀dÿ…ă₫ưûœœZµj%mqvvnÑ¢ERR̉¡C‡̣<$!!ÁĂĂ#44T¹Ñ0<11Qô ÙƒFh$Åßà_=.ÎgWeËÚøÖ́ÁÓO[ïܯ½&Ç¿ưfÓÛª†jR¬\c“ˆ¨h±óÂQ¯×ÇÆÆúùùùùù)·W«V ùWß~ûíO?ư”căÉ“'T¨PAô=ÙåØ̉Q%:UYq lÇ`ÍfZQ« ¾ĂwRü<·ơ剈Ԡ‰µª­'---++Ë'×ĐYooo·oßÎó¨5j䨲wï̃Å‹/^¼{÷îÆ\7$$$ÇĂëođÿ{(ù8~wx„B¹¤̃Z))N@%Cܽ{JBÂMuï®âÑ£ÎÿÅ …ß*>OƠù–/ïó_ldø??ÿ¬æùy¤mÑö¿‹ă/ü¥ÙĐ̣OiQÄçi¡;Z~û`ç…£aè´‡‡GíîƯ»Wè²²²~øá‡Ï>û,++kö́Ù₫₫₫Æ\7F9Á4=i ÖHñBŸ…đ1ꨠ  £ö+̀¼yrùÄßßé̉¥;w}CẼ âöhoû”ƒéÛµư8(7+/W]«–È››yJ¯/đ…g""ĂÎ GooïÜ-‹ÉÉɤqÖ¹=zôè“O>yíµ×®\¹2zôèÍ›77kÖLôƯ؃đƒÛrqjÉ… ¢̀Ê…cÅrüçŸîO9JFÙ둈¨H°óÂ@@@@RR’¡R”zäyHvvö[o½µråʶmÛ₫ù矣Frç¢Ăjø?üŸÁ̃_pvËY¡pT{[°@À=Å@~áỡ‘́¿plÛ¶mVVÖ?ÿÈ“¨éơú¨¨(__ß°°°<YµjƠŸ₫ùÊ+¯̀Ÿ?¿€VI2Ơ‹}S₫ói3ÊaôƒYùbœÄÑrÛ¶©~JOE§VÏÈ#©ôßđ,›°ILDDf±ÿ±OŸ>NNNóæÍ3ôk°xñâ[·nơêƠ«X±b†-©©© †Agz½~ơêƠ%K–|ç® ¦¦}Ø'Å%P¢Ù>e ÓˆV¸€rË|¦—'ܽ+:«P₫ƠÔ]E§CDd;U  lÙ²'Nœ5kV·nƯ7o~áÂ…½{÷†††:TÚ'**jüøñÁÁÁ›6mºyóæÅ‹ƯƯƯû÷ïŸûl=zô0`€ —§ÿ4Fc)̉܈' dž ­p½{åø ¾…Ô¨Îñ8~đnn¶N 8Gñ‡xhø¸ûÂ?DDê³ÿÂÀ!CJ•*ơ믿FDD0`ܸqyÏĂbhwLOO?‘Wÿ*‘1Ï1S~,̣B̉x²§«́Ù#ÇM› ¹G*Ôˆrá¸p!ÆẮ©‡z†¸q-"**tz=a©,$$„ó8æ ƒNÏâl0L8’ Ê dºÿ² B|¼î³[7C‰z₫6IDATü₫ûăXĂÿe©ơ<­¥iS¹íÖ:QúI¨ZçΩpB3©̣?ƯØƯüKă Zÿ)-jø£,\(ÇÖ*oª¼€¡ƒRXă ¹“ ,Ê:CZŸ‹±XtFDD…cáHÖµ;•Nß(½CP¢„¸'B…RÖiÄU₫åpđ °½‚+R< Ă„åADd4d]-ÑRs ‘±gÆ­iNy«$OshƒÂqÈa7Z¥}‹µ¯ÅZa©‡…#YÑ ¬â@Ö‚°u‚/^”ă^½¬=ö̉³sÖ)+W–ăcBÿœ¹ƒ;RÜ}E¦BDddEƒ0H•oåloÖ,9¶Ö̀îÊÙªY8ª%.NtV'ÍËÎNDÇ‘¬å=¼'ŧ±úÔßx²mŒ…£æ½̣ [ à ä^–\ˆ4…#YËÿđ?)̃Ư¢Ó±>Î₫­"WWk_AÙđ ïLD” GRS¤¸úˆN>ưTûØ&#ÎÅ£.Gê®Ă:ÑÀ÷ßËñë¯[í2ׯË1 Gu%&ZïÜáár¼s§ùçQÑl̀–ââ(.:"¢'°p$Ơ”B))₫ßNǶ¾V4±p,:” ̉ï¾+:ÀLâGx´«EgDD$cáHêhÖRü4~oˆÎ6n”cë–·o˱µ–¦q0ζ˜’Æß_wkf–zeçàWñªètˆˆd,Iăo)…ĐܦL‘ăÿưÏüónË9.Î׋jèe£T”ăp´c$FJqTÑc,I:è¤ø#|$:ÙÙ³¶º’điíO§Nrm₫y £|[mƯ¿.L1ó¤8 ë±^tFDD G²Ü뇜TDÅ÷ñ¾èŒ{đ@•ëËQÑ ,• ºj{í59~ï=Ñw­ |aư^À‘,”„¤eX&}¼ 5¼µh!ǶkIª[Wô}Û‹yj'l̃,:1̃RŒí1ÂÊsÔxV§l¾Íζ꥔] ”´ 3:·B+éc‚DgDD‹…#™C9ÿr̃u÷®è ́”­VøV±Ô‘Ö̃VØR|ç55é9d²@È3&wFgåLÅ¡\ÿïăEgCfSVnÖU¾·̣P3)Ûơ§aZ"¬¸„7Q~X8’iÂ~ פZëÚh0nœOjĂ ·tÔáAVâæ&ÇÖï \c|ß>Ñ÷—}Óªˆ¢Ó!"GÄ‘L03–b©ôQƒ]ˆU¬¯È!ƠÖgí+L$ǃ‹¾ß¼4DĂđôQÙc„ˆÈ6X8’±R‘ª\& Y¢3ÊÛÛoËñ́ÙÖ¿²%Œ“8e=zÈñ©S¢³ÉÇtL¯ú̉Ge¿""`áHÆ̣„̃ÚW[³F•E¤Ö({‰l¦°öŒSDD±p¤Â)«Æîè₫̃Q¾z÷–ăơëEgC–ûî;9^µJt6¢¬báøQtFDäX8R!”Uc1û¿ˆÎ¨ [·Êq»v¶½víÚ¢ï̃Ơ«'Ç+VØà‚ÿûŸ7k&úö ô¥¸?ú¯ k"²:T̉(-žđ}„G¢3*Ⱥurl£÷ÔQQrüÚk¢€½KH°ÁẼ}W÷́}Ër…ëu\—>ÄÀs8':)"²s,)_åPî&nJoă¶èŒ ṇ̃Ërl£Å\”m`,­DgëIgªU“ăèhÑ·_ ̉(½̣ ‰ƠPí‰Nˆ́ GÊ[ ”¸‚+̉GíOÙ˜*âªÊÂñ©§D?;¥¬È“’lpÁ;å¸E Ñ·_˜hp¥uPg´ƯRJDE Gʃºt¤Kµ_5h̃\­¼¬±Bv¶èûvÊÂÑ&ƯäX_~öQơöb¯ô±ưßE'EDö‰…#å”c9"Q58|X;t°ùå+WứW«Vrl“ÂÀRy$”+'ú ¡1+VwC·đ‘褈ȱp¤'äC]TªÆ‘#åxôh[]ơĐ!9fGÛ8f£|C†Èñ•+æŸÇ–ú¡ßQ•>NĂ´—đ’褈È̃°p¤Çá²jô„§ÆÇP+-X ÇsçÚêªc׆ “ăEd‚íÚ¨½Û¥ë±̃₫¢“""»Â‘à}¼¯\·9ßÇ}ÑIëƒä¸W/^XY8‰~ v­gO9ÎȰÍ5-’ă… E?£µFkå‹‚$$åè|BDd „Ú¨=3¤ƠPm'vZp>[ûøc9̃°Á†¾wOô­; eƒnx¸Í.«\ˆèư÷E?Säèd¢ƒÓô‘*X8::tÇq\úø=¾AŒè¤L ́ѨDaSNüïÈʺu“ă;lvY媕3f˜!rÔuP§!Nˆ<₫ƒç¸6`CwX[°e‰ÎË4óæÉ± + `É9¶]·Jmy5ådà&ˆ¾wé¡W.₫t\à":)"*ÚX8:¨̣(ß}”[ôĐw€í§±±ˆrøÂ‹/ÚöÚÊ(å n²’êƠ…\6FÑ₫>gè‡`ºë¸₫ >‘>f!K]4´½i G‡³»uĐ]ÆeiK Ô(*Óîä°x±ÿú«m¯}á‚è»w0S§ÊñçŸỤ̂ÊcÇʱ€)B-6S"¡Ü̉Íۡ輈¨HbáèXº Ë³xV¹e>æŸÄIÑy™ĂÇG§L—GHˆè'á^yEmÛßđ«¯äøÏ?E?³tB§nĂ6t§qZtjDTİptû±_]†‡Ld@™¡îI×®=1¦ù“Ò?•9¾øB‹Öh[ûœlă *Û¶uEvr=ôĂ1\¹¥jTAÑyQQÂÂÑ!”C¹Fh¤Üâ?=ôÎp™åx×.›_^ÙâƠ¿¿è‡á06•ăôtóÏcº¡CŸøøăfG¸…Xx ×”[ ƒn ƈNˆvn ¦è »‚'M;‚#IHùÚ·—ăJ•Ь™Í3à B(»9Ú|v½âMo‘₫c!zèÛ¢­ră7øFƯ=đ›ˆ ÁÂÑnưßuĐ}O•[¢¥ú:¨#:;‹lƯ*ÇçÏÛụ̈× 6‹~¤sg9₫ßÿlưAƒä¸NÑ₫oÛ°M¹8¡|ꢮèÔˆHÓX8Ú¡38£ƒ®ºåØ~ —₫Æß¢³³”²‡Ù›oÈ`đ`9>ÜüóPQóư÷r|́ØÓƒE†Å +£²răQƠA×E¹M•ˆ¬‰…£]ID¢ºêÈ9ăƯ‡øP}9” ¥Ú*^¯U®Œ D$±e‹+۠ȦO—ăY³l}å ë—^ư4Ô€=ô9Öø?ê Ë1Ơ+X8ÚÄè «ˆ9¶7@=ôÓ0Mt‚*8pÛïÖD$+ǵk‹~$çƒäx̣d!)(_’ƯÖ9d#{ ¶äØhX\ªj‰Îˆ4„…c‘÷~̉A÷ ɱƯÎIHÚư¢TMCÅB»gÏ Jâµ×äxåJ¡ÏƒÄx÷]¸¹É›7J: CîùzœÀ t4ë¬DdoX8aĐA]?ôËưƠ>́ËD¦üDç¨eÓÎܹ”ÇîƯr\ÔÇGQÊ…ÿ̃{OH ʹ€¢£1p àG¢¢…X¨‡¾*ªæØ~ ×tĐ¹Àå".ΑˆDbáXô¤!Í̃:è₫D«X́Ă>=ô ÑĐôkW•*ARüüó=ZP¿ü"ÇÏ='ö™8®qăäXÄØjegÇU«pøpqDuçpN}îÖYȪ„J:èfc¶è‰H EÉ×øZ<’‘ÇÊ'q̉₫JFŸ́·©œ‹ÇÖ”«̃ñ=µF\¹bù9̀sü¸÷êUÖ₫V/?ŒĂzèGaTî¯̃ÆÛ:èJ¡ÔU\&Ù Ç"`7v—Gytă0.÷·eQ6©zèk †èLƠŒÄDù£^o₫©Tđà™²Đ=r,nˆRÍO$R¹2.Úă[Üođú¹˜›û«[¸UeuІ¨·Ddk,µëwü̃tĐ=‹g/ăr₫2.—@ ÑÉZ…·÷ƒ˜Waar¼v­ĐT^“&rœ$r ¤&M°nü±R%üû¯Àt¬h4Fë¡ß‡}y~;ótĐå÷Ç-Ùè(a˜Á;¿1шĐCÿ¾¬étHV¼\58rDíc¿"mÙ29:°¹O,Z$l̉o¿-0ëjˆ†zèơĐ¿ˆóÜÁĐF]ô,Y G­øßGqtÍÑ<éyîS5 ¿µ;¡“è|­hóæœÓăÅÇ ™³QA9[95‰¢\¿':Zl.ÆaÙ²ë̉ÇÙ³Q³¦ØŒ¬îWüª‡~v¹À%¿ dgt̃„M¢ó%"Ơ°pivùĂßđëu Æ<£tè‰QT"LŒ»wŸØâí6mÄ&e#k±Öđ2¤àiz>À†_}¥Qº;º‹Îˆ̀ÁÂÑÆb́³xÖđ³]Â¥vEè ÜĐC¿;›¡™èÜm¤n]x{?±¥I“'&Ûfûv¤¤ÈG2ÿT¤:åP”Í?J¼½s₫©³ct:ü₫»è̀le&*ÈƠXcưk¥›¸ù~3üJt‚S=Ô; Q‹A‘iX8ZÅvlO~-ê ›‹¹»QPä/đ…áî œ(…R¢ïÀv¾ù:}bă… OLt"RÛ¶r|û¶èlèI¡LùăÇxª×£Ó“»u{¢ÙÚôGÿldë¡ß„M”ÑC‡CbømYƠ»¡Û-Ü}D”7ê;s¶-ÚÆ#¾Đ=CzWơЧ å-¼%:q[[²:ÆŒybc¥JĐëµĐxđ̣’ă-àë+:!Êåªbê>À¹s¢€ˆˆœ­Œ))ĐéPƠ₫»œäÔ]~ÆÏ†¿×a] ̃ÿ ÎüßK¡T• *†E'ảhäïH"báhsc16‰Răb”±üœEλïB§ĂĐ¡9·oƯóçE''iƯ÷ïË£¢D'DùP¶WW«&:›Ç^xz=\]ŸØ%K>1ÚÊqôAŸk¸føí·ë=áYè!YÈúŸ7C3éNmÔnùÍ(IDÖÆÂÑêJ Ä,1ü®ÔCÿ¾*̣¢“cï^Ô¨3gæüê•W ×ăùçE§(ùúküư·üQƒt(µkăƯwå:ù§RÛĂ‡È½aJ ‚ƒ¡ÓiäƠº½Ñû>î~+Çñ7ñ¦‘ÇñđOc4–JÉb(Ö]†cø œ}[Dö…£úŸ)>sîàáwb*R_Ç뢓)%AAĐéĐ´)NŸÎùm:ĐëñĂ¢³T Ÿq̣Ç[́n¥yÿûß‹@êtÚéZ±"ôz¬Y“ÇW|ÎÎ9;l8¨¹ ¤¿®£Pg½³‘‡g"3ßâÛZ¨%U“:è|áû^[ŒÅ;°Cô-Ùê«ôb¥qçщöÏ?xî¹Ç/æ̣|Ư¸1ôú'dѧNÉ33ñÔS¢s"#ÄÇ£eKùăSOáư÷Eç$ëÛz=.̀ă«́́ÇCÄt:M¥,L ´8çΟ3Ô‘p¡ º4FcSÏswWbå0 kƒ6Ê‚Rü`À—ør-Ö̃Å]ÑwLT”°p$5EG£B…Ç¿›[´À®]yï6jôźƯ+:Ưú÷Ïù–S¯‡³±Í$̃ßăEÅRx3f@§ĂI M›?|8ôz¬[—ï#†”u:xxà³Ïđđ¡èŒ5 "*n¦½Ø+5I&"q!ÖG}g˜ùŸçÜù?¼…·ú¢¯/|s”•îpo€Đi&fNÁ”S8• ÑH+tzṽÊÇúơë×­[[¢D‰–-[Nœ8Ñ׸Aµ!!!111¢Ó·‘½{±f æÍCvvá;W­Y³Đ³§ÉWIHHR¾ˆTƯĐ¡X²$çÆ+WhÅ‹cơç)Ö‹/âÿ₫/çÆƯ»Ñ´©ơ®ĩ#:Ÿ|bÔ>>˜5 Ư»£tiëƯ„¶˜úHÏấ*¬:‹³;°ă&nÚ&ɪ¨zwz¡W2’_Ä‹Q±4Jks½;ÿ¯^‡ú·^‰…c̃æ̀™³hÑ" \¸páüùóµk×^¹r¥»»{¡ÇÚëSL Âôé¸W®˜p`ƠªX¸Đ¢/Öú•÷ûï0 …áÊ”yb’»cÿÿ„üư7Z·Îcû«¯båJk\ĐÂGúöÛ˜=Û´C6EÛ¶èÜÙªơ°Hjư”F"̣®ư…¿ăø{S† Ïë¢î%\ê®7p£Ú  8#Ø.Á¶̉¥íÿ¿z›³×ë ÅÂ1111Ư»w/UªÔ† J—. à“O>Y¹rå€̃7¢ R‘₫aú㤤`î\x{ăï¿‘n₫©ê×Gd¤:ưƠü•wâ È9á¸̉×_ÛưPGù'¤L\¿÷W%Jà›o0dˆZ—R둇íÛqü¸ùg¨S+¢m[Ôª…J•đôÓjƯ¢­Ùà§4 páñă8~‡Dß´±œàä _w¸—EÙxÄ·EÛă8̃]/ăr34ó†w2‚tW¡Q&2+£̣¥„Kñ_½ éë-ÁÂ1üñêƠ«?ưôÓÿ½UÍÊÊjÚ´©‹‹Ktt´“S!CµóĂ”’‚C‡àêƒàÊDEÁƠÑÑprR¿ûTé̉h̃‹Áß_å3›ÿOȾ}X²/"2²đ+TÀÅ‹*§®IR8ˆˆ@—.…ïæé‰₫ưáé‰qăP̃œÙ²¬ñH7oÆk¯á¦^º–*77Ô«‡øxôë‡óçÑ»7\]ñ̀3(U …ư†³-ü”ê¡?‰“±ˆ]‚%eQv=Ö{Àă2.‹~6Ọ̈¾ G¸è, íü[oc.¢Đ¢ưû÷;99µjƠJÚấ́Ü¢E‹ßÿưĐ¡C 4(øđ̀̀2çÏ#6eËâæMxxàÑ#œ?̉¥±kêÔATê×Ç… đñÁÇ8v •*!2cëV4h€‹á鉴4œ=‹§ÂéÓđóĂ›L°E x{cÑ"”-kÍË<|è|뜜pä°c‚‚à`ܺ…óçqû6₫ưz=23ͼDÓ¦ÚX›ÔÖ¹3ôz\½*UđàA¾»¥¤àÛoäưÂØÏééhÙqqèÙ§O£Gxz¢T)”,‰;wP½ºËơë¨XQƯ¡T:áÆ ùăºuر¿ü’o+ªñ Åhb"€Ç­›‹›y*''x{ĂÓ™™ Dl,4ÁñăhƠ W¯¢F ¸¹áæMcï^´oưûñüó¸~U«ÂƠII¨XgΠ~}ÄÅ¡V-¤§Ăß..HH(æé‰”øûăáCxyÁÉ .¶ư'K]MÔ¬‰ƯÑÀbô˜®ăú́ÉBÖE\ÜƯzè#é ßD$Ú4i 8æ‚d*¶8æ¤×ëCCC}}}w=9$xñâųgÏ9sf= >ƒ–¦V‡úˆÔC73C´ètÔ3`–.͹¸‡ĐB[cÇbÓ&ľh‘pŸâƯ ûÍO"Tt:d®À«đ¹‹̉7đ́.ÜơAŸơ8nÿ‡³ƠP!îéđ¿w º mñO?íÛOôă(2ØâH¥¥¥eeeùøøäØîíí à¶ffV‘RkâÄu„cÉø¾¥ƠqỤ́ÓjPV©RO?}kÆŒŒ*Uoºl·o pé̉%Ñ)2nœ4µ»çÿưßS|à”{hTш«s‘wÜ;đƯ‚÷Q̣4ªoG›t¸Ÿ³Ú¨ ²ÔƠ@\ Äéêˆj FÀ¨y柰øCx%Ă+ àz߆3Ï Ë8T%ï?₫Ÿöâx-<» qO£Æ)$=…’÷.¹$$$ˆ~Ơ±cGÑ)h Çœ̉ÓÓxxxäØîéé à̃½{¢̀É Ù*á‚/îx 5×O¡Für¡½°ñ.|Ct\ Àu¦u¹BÔ¬‰¤$Lœˆ̣åѤ‰a³3à G]đñIÚâ¨4v,Æ}bË¿ÿâß±x1ÜƯqà€èü,â‹;ư°ÆÈ¯¡L*<₫Dû2¸–ˆ ©đ¸ÿt~q;Ñ¢câGé(|N ̉„‡Åq³n–BÜÓđw+X= Đăª~}”¿̣“»q1$$DtRb°p̀ÉÇÇG§Ó¥¥¥åØ’’‚ÿÚ ö‹K«²¥|b¯{Ơ*s#ûAFI¬bº̀´;K=•ưđ̣-¿̣%_C… HO‡arŸ›7QªQ¡Âăÿưđ!€ë×đÄW(V ®]C™27^¼ˆ‘•ơø«Ë—Q®.\@¥Jÿwv 8= /¢R%œ?Ê•ÿo ¨Rññ¨RçÏĂĐ&§×ĂÉ qqƹs¨Víñ:23áê˜Ô¨Ó§úx7ÁƯÇ#, G¢~}ÄÆ¢zu8;#5>>Ø·Ï>‹}ûĐ¢bcQ«\\p÷.Ê—ÇîƯhß{÷¢C\¹‚ĐP¸»ßơoÚ/¢qc¤¦"$F̀‹DdÆÑ¸±Qcêơz\»†Œ $'#.wùŧE üù'4@b"J–ÄÇ8t!!غÍaÇ4i‚»wáæ†̀L=ĐṔÙƒ đï¿ Cz:Cv6NDHCÍ8~¡¡È̀„“²³ƒªUƒjƠÿoC2z=ÎĂÓO#.O?øxA¯Gv6œœ/ÿ÷nø 3..8+–¹p•<ß¼²eËÇ ¿df_˜üøHŸv ÿjR₫F2üúÿBS~•”ôxV…´4”(ñÄW·ogù•z¨wMOÉ̀.Q̣̉e_Y·³—=Êf'̃-ùTÉG(v5ÙÍ·¤~ï*uK]̃}3¸¾ÿ…¸”€̣w2ár1å©û'ƠzÎïÔöÛu›ùNH/S̃=)Kï›XÙăæö»ơZxưë^ƒæ^G/=,Pü®ºÓ©ƒK\̃q¿A‹’‡ÿ¾_ÿ9Ï#×ùù»&ë¡;•V¹{âΔzÏy‰N kêývFIo—T=t'Ó«Tw?¿;µNă»Së4.qü~–»‡óC=t'̉Ÿ®á°/­fC÷û̉k5p?™íVÜ鑺“®î–p(½F˜Û©Cj„¹ÎĐsÑeê¡;ñ j ·ø£©ísôAHm·³Ùzz=t'V -{üaµÅÏ₫7=t̉W'V­Q<î̀Ă âçdê}æÑÓϸÆyTå×ø¸ŒU%ê¡ËÔ;»è²b…¸&Ä< ªæz₫ü£²•\¯x˜]¬¸SÆÙG•«¹?û¨r°ë…ÄŒ2å‹]àáÅơ¨ṕă˜‡Æ»ºº₫óÏ?Êß}÷Ư_|ñÅ_tíÚµàĂ¶ßƒơ8nŸ<ëàóT©êøHƠÅç©:‡ư·^ó.hL@@@RRṚ“Ÿ =? v9yhÛ¶mVV–²ÅQ¯×GEEùúú†……‰ÎˆˆˆH yèÓ§““Ó¼yó ư,^¼øÖ­[½zơ*fèDHDDDäx88&eË–8qâ¬Y³ºuëÖ¼yó .́Ư»744tèĐ¡¢S#"""†…c̃† RªT©_ư5"""00pÀ€ăÆ3̀ÈCDDDä˜X8æ«k×®… &"""ŕăHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHDDDDFaáHôÿíƯTLéđg*2ES²µ%í6£biQiE)¶Î¶›È¯=6l–¬ăç̉ù’£»µÊ®Ư­=–E´Øµ›̣#Œ8rT”É‘j§Æ|ÿxÎ̃3g̉ôL?Œ́ûơ×½Ï}æ̃g>>'Ÿ{Ÿ0AáLP8À…#0AáLP8À…#0AáLP8À…#0AáLP8À…#0Aá]€¿¿¿¾‡đFA<;BÚá̉…xBGAáLP8À…#0AáLx*•JßcxÓˆÅb}:WII‰¾‡ (€ nUÀ…#0AáLP8À…#0AáLP8À…#0AáLP8À…#01̉÷̃û÷ïOMM½qㆉ‰É˜1c–-[faa¡ïAu“&M*((Đh …gΜQoAµ»uëÖ„ RSS‡ ̉ü(Kôa ZB¤ƠI}}ư¾}û8pçÎ^½z‰D¢9sæ|đÁƯ¥ŒXâ‰ƠÉ“'O¾ưöÛ‹/̃¹s§OŸ>ƒ ŒŒtppĐè†EáØ1¾ùæ›ï¿ÿ̃ÔÔtĈåååiii¥¥¥;wîäóùúZ×PQQÁçóíííƠÍÍÍƠwäVưúë¯-b‰"Üœ–"iÙ555Í5ẹ̈åË`äÈ‘ çÏŸÏÍÍ]´hÑÂ… u BÊO¤(;¹\đđáCGGG‰Drï̃½¿ÿ₫;33sß¾}ƒ ̉)\o~HUĐnÅÅÅộ̣zđàmÙ°aƒH$úßÿ₫§ï¡u OŸ>‰D_|ñ…–>²OŸ>½páÂÚµkE"‘H$º|ù²F–è!ÂêZ )’V'»wï‰D¡¡¡uuu´åúơënnnNNNW¯^eBJ±Ä)ªúÅ·nƯʵ¤¥¥‰D¢)S¦è®ÿBHñŒcHMM}ñâÅâÅ‹ûöíK[V¬X!̉ÓÓ_¼x¡ïÑu„_‹5 ÈZ†……íƯ»·¥,ÑC„ƠµR$­N=JY½z57éâèè¡T*¹Û¦È̉'RT'çÎăóùóçÏçZ>ùä“~ưú)•JöpưB±\¸pÁÀÀÀÛÛ›k144=ztMMÍ¥K—ô=º. ¼¼œ̉¿-}d-bbb’’’’’’<==_Ú%zˆ°ºVC¤ƠIYY™©©©‹‹‹z£££#!¤²²’î"KÙ±Ä)ªsssŸ=z¨7+ …BAw‘¢ql/•JuăÆ̃½{÷îƯ[½]$B*++‡®ï1¾îè¸{÷î…‡‡_»vÍÄÄÄÙÙ9""‚[€ k7jÔ(º‘““Óü(Kôa ÚCJ´:úᇌŒ4ÿ»)**"„ØÚÚd©Z'Aêh×®]-.\¨¨¨:t(ÖEr0ăØ^uuuJ¥RăqcBˆ@ „}ªïv÷îƯăóùQQQááá´ǻÙ³7n5j”µµ5‚Ü,ÑC„u…¤m3¥R¹{÷8¥R¹eË¡PH¥íđ̉x¤h[•””8p@¥RB\\\ºwïNÛ‘¢̀8¶—¹¹9Ç«««Óh¯­­%ÿ₫ÚựË/—/_æ~ºB<==g̀˜Q__́Ø1‚ ·Kôa]!iÛæüùó111B¡đçŸ8q"mG–¶MKñ$HѶ:uêµk×rss—/_‘‘J‚å pl/###@Đü7 ¹\NáÖU®ÜÜÜ!ׯ_'rû°DîHZ- ELL̀̀™3«ªª"##ÓÓÓƠ!Ku¥=-A²àñx}úô™3gΔ)Sîß¿Ÿ‘‘A¢jP8v++«œ²²2zHߣ{Ư©T*¥RÙü=†††„^½zÑ]¹=X¢‡³C̉êêÅ‹K—.Ư¹sçØ±c333?ÿüóæ/CF–²k5HQ”––®\¹2==]£®[đàƯER(;Àرc•JåéÓ§¹•JụäI WWW}îuW^^î́́iiitØÎÎÎr¹¼y‰DB;ÄÅű_:>>~jáÂ…út(@7EEE₫₫₫ÑÑÑgΜ©®®V(ååå'OŒ?~ü‰'ô=À®'**jÁ‚ ,())i©Ï¸qă !J¥̣̀™3Gõ¼YUUE·'L˜ ï/o, ƒ²²²éÓ§ß½{—k¡Ơ ơàÁƒÅ‹³œÊÔÔÔÆÆÆÆÆ¦oß¾ú₫Z]€@ 9r$Ư>ỵ¤ÆÑS§NÑ ›Áƒë{°đÆBá:ˆ­««£ÛÁÁÁ‡.((ÈÍ͉‰155%„Ô××/^¼˜åTÙÙÙÙÙÙÛ·ooÿÀîܹ£P(ô“Wvin*ñÔ©S*•JưĐéÓ§5útÀếÙ³999t{̃¼y7n8p ¡¡aŸ>}&M´uëVz¨¬¬́öíÛt[ư:¥R?zôèøøx̉Â3MMM{ö́ 5jÔĐ¡C–-[¦1…©~N™Löå—_º»»;ÖÓÓsÇmø^ê'”Ëå›6m vuuư裾ÿ₫û¦¦¦6\º¥g£¢¢ÔŸDܲe‹X,æjñY³f‰Åâúúú—“»[]SSSXXȵ×××_¸pnOœ8‘kñâÅ_ư5cÆ ‰D2xđ`‰D2cÆŒƒª#íÑĐ2rL&‹‰‰™:uª««ë¸qă"##‹Ú™iđÚ2̉÷ ËسgƯóçÏ×8êíí=f̀˜êêjBHII‰½½½F‡Ơ«WG={ö́É“'OR©qỴ̈Ûo¿ÑuëÖ…††ÅbCCĂû÷ï³_¥Ơ‘÷ïߟn(•J;5À̀̀̀̀̀LẸ̈pè¢P8+‰DâééI·7lؘ˜øđáCBHccăáǹ¥»vvvNNNºüæÍ›ü‹¾ÑĐĐĐÓÓs̉¤I´ƒú$ƠØØ¸~ưúÆÆFBÈÇ¿₫úkÚîăă£₫‡;C«—怼rå ÷:ồ̀̀¼¼<í§e¹º¯¯¯!äÚµk´E£p|₫ü9w›˜«ÿX̃ÂĂ>r.öíÛÇ=‘‘áæææîî.‘H:ö‘Jx`q è`åÊ•!!! *•*!!!!!ÁÂÂB.—+•JÚÁØØ8!!¡ u›X, …2™L©T†††J$@p÷îỨ́lÚÁ××·ù§233}||̃yç‚‚z³ØÀÀ`Ñ¢E¯ Ú/ͽˆ»¡¡!((ÈÉÉéñăÇÜj fffôyÁ¤¤¤̉̉̉™3giûá, ‡ÎUrÜ;)zÎƠ«W9r„Çă>}ZûߌÑuäŸ}öYjjª\.?v́Xxx¸››[ii)÷̀ǻÙ³¹ƠEđÆÀŒ#è@$¥¤¤¨¯~üø1W5ÚØØ|÷Ưwm˜n$„$&&̉››2™lÿ₫ư?ưôSzz:½ëææöé§Ÿj|dĈÖÖÖƠƠƠçΣ¥}KN§.jf¼´‹‹Ë‡~H·ëëë/]ºTVVfkkËÍ̉iœnäççÇÅű̀;ª¿œ¨ù}jçííÍ]=;;ûøñăVVVîîî´‘N¿ûÈÍ̀̀bccéLp^^̃¶mÛ222èBCC###;û_^= ›÷ß?33sƠªUnnn–––Ư»w0`€ÏªU«=:f̀˜6ŸyèĐ¡YYY ,/U‹p á@,€X„#±G­… †!ƒØTv#•ƯHcCRÙTv#,á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ’Óá¸iÓ¦¢¢¢×^{mÿÛ¾}{=&L˜z^€r:çÎ{ÀÇ$‰+®¸â£> =,@` B@iiéúơëüñ|đ€¾ï¾û^|ñÅĐ#„—‹á8dÈ¿ưíoq¹aÆ[n¹åØc]»vmè©ËÅpœ6mÚ'Ÿ|EѼyó^xá…}=lï̃½'N,,,œ4ỉ¨Q£BO X.†cŸ>}’7/^¼Ÿ‡ƯvÛmkÖ¬¹ç{4izd€đr1ăX±bǺÙ³GÙ«W¯Ơ«Wÿ³¿½¨¨(meáÂ…¡¿§0‹‹CÁF*»‘Ên¤±!©́Fª »1xđàĐßw¦5(//Ÿ8qbÛ¶mÇÿûÖ­[ú›È íÛ·=B±©́F*»‘Ɔ¤²©j7ªÿµ^ư Q5˜>}zqqñüùóóóóCÏ)rúǽøâ‹óçÏ¿đ O8á„Đ³dWÓmذ!¢™3gΜ93u}Á‚ ,èÔ©ÓO<zF€„cº¯~ơ«ßưîwSWvï̃½dÉ’Ö­[wï̃½eË–¡C8¦ëÓ§OƠy=I«W¯^²dIÏ=oºé¦ĐÓă=Ä"ˆ%§_ª:uêÔ©Sø°nƯº9—ÀGbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"Ụ̈Î;¡'ÈZÂÈ!¯½µnM˜°Ïtêåå… S G W¼öZtâ‰QE3fÔÜ:Eo¾E‘v¨™prÅ '|v»z;VU#û"’H|v;µÓª1ơaTiz€Z•H|öJôŒQE=¦b@Ω̃©w°/^ªrQ¨öO89ªcÇÏự̣ËCñ„#‹ª†z_gôPE89g_'ïhG€ư@n©~̣ξÎè prȾÎkÔqG Ẃÿ”ï´vüĂB y„#+6lǿö₫ă¹à‚høđĐădáädîç¼ÆD"ºà‚èw¿ =(@F@n9à)ߪ`_„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"9ÈÎàÿ*§ĂqÓ¦MEEE¯½öZơ»ÊËËï»ï¾ÓO?ưÄÓÛ·ï\đüóχ7 äåE ́³'Lˆf̀ˆ̣̣BO üŸät8Î;·Æơ½{÷5êúë¯ï½÷N>ùä;.[¶lôèÑ·ß~{è‘3ZUÖØÉjL{$E„ €̉̉̉ơë×?₫øă>ø`x衇V¬XÑ£G»ï¾;???¢ 6Œ9̣öÛo0`@—.]B*‘HoÇÿú¯ü2µ“²N.^q2dȈ#öUQ-\¸0¢+¯¼2YQuêÔ颋.ª¨¨đ‚ơ₫¥aƠuGƠuC.^qœ6mÚ'Ÿ|EѼyó^xá…êؼysăÆ»u떺ةS§(¶mÛzüL—vƯñµ×¾²uëçî²T.†cŸ>}’7/^\ăîºë® ̉wfơêƠQµmÛ6ôøY µ·n=,uÈ^¹Ôµk×´•¥K—Î5ëK_ú̉Đ¡Căü EEEi+É—¿sǦMQ‡í?¿²yóæĐc…V\\z„ b7RÙ46$•ƯHd7úûÎÂñ***xào¼±¢¢âæ›onÖ¬YœßµnƯºĐƒVư¼Æ±cÛW}V&—µoß₫‹ÿ!u†ƯHe7̉ØTv#UíïFơ¿Ö«_!ʹøá˜ø–-[6dÈiÓ¦5kÖ́î»ï₫Îw¾z¢́öi˜¤ưœïdáX³={öL›6íüóÏß¾}û˜1czê©^½z…*;¤Uă¦MŸ½>­ « ÇTVV?~Μ9|æ™g.½ổªsyؿթñŒ ëÇ̀;÷™g9÷Üso¿ưöæÍ›‡'ḱç¼Fíu€pL—H$æÍ›wä‘G^qÅ¡gÉ2¿ûƯg·«Ÿ¼“Ö@Öñ©êtï¿ÿ₫[o½•ŸŸ?bĈê÷6läÈ‘¡g̀P%%Qaa´k×>Ïk¬:ßÑ„cºäQååå«V­ª~¯È́_IÉ  {åt8N:uêÔ©i‹_ÿú×ÂP÷8‹p á@,€X„#±GbÄ"ˆE8BhM›Fyyéÿ@æÔư÷G»w×°®È<¹ÿ₫hÔ¨}̃«È09ư³ª!¤8]˜—%¡€pÅ€X„#±GbÄ"ˆE8‹p„@✳ă,2‰p„pöß…ª€ #!¨}Ơ¡j óøÉ1F K¸â@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,9›6m***zíµ×j¼÷øĂđáĂ»wï̃»wïÉ“'—””„ ¤œǹsçîë®[n¹eÊ”)7n<餓8âˆGyäÇ?₫qyyyè‘‚iz€JKKׯ_ÿøă?øàƒ5>`Ưºu³fÍjÑ¢ÅĂ?ܼyó(¦M›6gΜ3f\uƠU¡Ç#¯82dĈûªÆ(zè¡ÊÊʱcÇ&«1¢I“&<ơÔS•••¡Ç#¯8N›6í“O>‰¢h̃¼y/¼đBơ,_¾¼^½zưúơ«Z©_¿₫)§œ̣øă¿̣Ê+={ö ư‹áاOŸäÅ‹W¿7‘H¼ùæ›GuÔQG•º̃¹sç(¶mÛ&€Ü”‹á¸eeeM›6M[/((ˆ¢èƒ>ˆó‡¥­,\¸0ôwFqqqè2ˆƯHe7RÙ46$•ƯHd7úûÎÂ1]̣£Ó7N[?âˆ#¢(Ú½{wœ?dƯºu¡¿ ̉¾}ûĐ#d»‘Ên¤²ilH*»‘ªöw£ú_ëƠ¯åˆ\üp̀₫5mÚ4//¯¬¬,mư£>₫÷º#@é4hPPPPưÊbiiiEUŸ³È5±-Z´Ø¹sg²«l̃¼9yWèéÂ58p`EEÅsÏ=Wµ’H$}öÙÂÂÂîƯ»‡ áXƒáÇ׫Wï·¿ưṃ}QÍ5kÇguÖa‡z:€0|ªº­[·0aÂôéÓÏ8ăŒ¾}ûnƯºué̉¥Ưºuû÷ÿ÷Đ£#k6zôè£>ú±Ç{̣É'[µj5räȱcÇ&OäÈM9S§N:uê¾î2dÈ!CBÏ)¼Ç€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±Gbp¨<ûl”—·¿´m{€@FpH<ûlÔ¯_EûLöm£ââư=2p„CâƠW?»]= «ª²ˆp„Cb́Øè–[>ûej;¦Uc"zVˆG8¡Rc;ªF²WƒĐ@]6vlEÑÏ~ö_vèĐ>ơ^Ơ@vqÅ­´ëUT#YG8Â!7vlÔ´éçVT#ÙH8Â!×¶m´k×çVÁ@6phíëäí@Öp¥Uă¦M›÷uFd>á‡J'ḯç|GÈp‰ưœ×¨ÈR‰mÛ>»]ư3Ô©í8~|èY €Ă¡’HDyyû˜¶^XX8ỉ¤̉̉̉«®ºª²²2ô˜9!£ĂqôèÑQM:u„ ‹-z÷Ưw«î:묳úôéóç?ÿù'?ùÉÚµkCO P÷et8öèÑćرyyy ,¸øâ‹ï¾ûîÔ{o»í¶“O>yÑ¢EgyfEEEèa긌Ç(.¾øâÿú¯ÿºà‚ ₫ơ_ÿơè£N½«Q£F³gϾöÚk;uê”——zR€:.£ÏqLêܹóĉk¼ë°Ă;çœsÎ9眿ÿưïÅÅÅ¡'¨Ë2ưcL 6́رcè)ê²:j€X„#±GbÄ’Çñ¤ÙµkתU«̃yçÖ­[÷îƯ{ÇÍ5 =@Ư—Má¸sçÎ;î¸ăá‡.//¢èüóÏïƯ»÷°aĂºuëvươ׆ .Ë—ª?ưôÓK.¹dîܹM46lXƠzóæÍ/^|öÙg'k€C$kÂñ®»îZ±bÅ©§ºpáÂn¸¡jư¡‡:ó̀3·lÙ2gΜƒøåö́Ù3{ö́ï}ï{Ư»w0`Àe—]¶aÆĐ{RÖ„ă‹/¾X¿~ưë®»®Q£F©ëơë׿úê«5jôôÓO¬¯UQQq₫ùçϘ1£¤¤¤oß¾mÚ´yúé§Ï<ó̀åË—‡̃€`²æ=kÖ¬iß¾}Ÿƒ9âˆ#:tè°eË–ƒơµ~ÿûß¿̣Ê+ß₫ö·g̀˜Ñ Aƒ(₫ú׿^pÁS¦L9ˆy ]²æcAAÁǼ¯{KJJ<̣ȃơµ^yå•(Î?ÿüd5FQṭÉ'wé̉eË–-|đAè#k±k×®ï¼óÎ믿^ư®5kÖ¼ưöÛ]ºt9X_«U«VQ¥6b"‘صkW½zơªR ×dM8₫à?ÈËË?~üêƠ«S×W¯^=v́Ø(†z°¾Öé§Ÿ̃°aĂiÓ¦ươ¯-//ß¾}ûUW]U\\<|øđ&M„̃ €0̣‰Dèâ1cǼÙ³£(êĐ¡Ă¦M›Ú´iÓ¨Q£7VVV6,ơ£Ö_Ü믿>jÔ¨ÔÇG9ỵäúơëđ÷U_\¸paèư £¸¸ø+_ùJè)2…ƯHe7RÙ46$•ƯHd7\}qƯºu¡7#€lzáợË/ïÑ£ÇôéÓ7mÚEÑÛo¿EÑÑG=nܸԓ¿¸̉̉̉n¸áă?îÖ­ÛñÇ¿sçÎ%K–<öØcßüæ7O;í´8Bn₫Ë´/íÛ·=B±©́F*»‘Ɔ¤²©j7ªÿµ^ăE¢\MáEQÿ₫ưû÷ï_RR²iÓ¦={ötèĐ¡E‹ư«Lœ8ñå—_4ỉøĂäÊöíÛÏ>û́Ÿứg ,èĐ¡Cèm k̃ăX\\üÖ[o%oöèÑăä“O>Ơø̃{ï-^¼¸cÇUƠEQëÖ­/¹ä’O?ưôÑG ½adÍÇï|ç;Ÿ|̣ÉóÏ?_ăQÑÎ;£(:æ˜c̉Ö“ßÿưĐ;FÖ\q́Ô©SEëׯ?Ô_è˜c©_¿₫† ̉>6”|CÇCï@YW]uU~~₫wÜñ÷¿ÿư~¡üüüSN9eëÖ­¿ùÍo*++“‹6l˜9sæá‡̃¿ÿĐ;FÖ¼TƯ¼yó›o¾ùꫯ>ăŒ3Î8ăŒvíÚU?R±_¿~åkM:ơûßÿ₫̀™3Ÿ|̣É®]»îܹóå—_®¬¬œ2eÊ¿üË¿„̃ €0²&«.ơíØ±ă¶Ûn«ñ1ëœfÍ=ùä“w̃yç’%K₫ç₫§°°đÔSO½øâ‹?₫øĐÛLÖ„ăgœQ›_®Q£FăÆ7n\èï SdM8̃tÓM¡GÈiYóáÂÊ+ßüæ7ø˜¥K—† ÎÊp,--M[I$UÇå´lỤ̀P ă²&ßxă´•íÛ·ÿéOºă;>ùä“k¯½6ôŒuY¿Ç±~ưúmÛ¶=zôm·Ư¶{÷îŸứgi?뀃(‹Ă±Ê7¿ùÍ;nÛ¶mÛ¶m¡g¨³êB8FQÔ¼yó(¾üå/‡ Îª áXVVöÆo4kÖ¬qăÆ¡g¨³²æĂ1ưë_k\/))™;wî|0hĐ Đ3ÔeY£FÚϽGyäe—]zF€º,kÂq??«º]»vC‡mÛ¶mè견 G?« ¬¬ùpL÷îƯ÷ÓcÆŒù·û·Đ3ÔeYeeeŸ~úé¾îzë­·̃~ûíĐ3ÔeưRơ³Ï>{ñÅWưrΜ9óæÍ«₫°ÊÊÊD"Ñ®]»ĐóÔeơë×ỏ¤ỊvIIÉá‡̃¨Q£Ù´iÓI“&… .ËèṕÓ§Ï̉¥K“·‹Î>û́É“'‡ Get8¦ºà‚ zö́z €Ü•5™8qâ€öuïW\±Ÿ{ [äåEç{€@(YsÅ1¢’’’?ÿùÏ[·nM[///ÿÓŸ₫T¿~ưĐÀ’ŒÂùó£(₫ă?öù€¼¼(‘=+9)kÂñƯwß=çœsösæÎˆ#BÏGí˜z­ñÚk£k¯ =%¹'kÂñ̃{ï}ûí·O:é¤!C†üñ\¶lÙƠW_ŸŸ¿víÚyóæ1âÊ+¯ =#|!‰Ägu˜Ö©ƠxÍ5ª‘0²&Ÿ{î¹/}éK3gÎl̉¤É€úôéÓ¾}û^½zEQÔ¡C‡_ưêWÿïÿư¿N:…¾êí8mj$Sd͇c̃yçc9&y¬ăÑG]XX¸jƠªä]Ç/,,¼÷̃{CÏAêûçÏ:th_ơKƠHXYQƠ«÷Ù´íÚµÛ¼yṣvưúơ‹^ươĐÀÁQăg_T#ÁeM8¶lÙrË–-üq̣—mÛ¶}饗ªîÍËË+..=#4iíxÜqª‘đ²& T^^~ùå—oܸ1¢={¾ơÖ[K–,‰¢hÇ/¿ür›6mBÏMÚy«Và|G¨Yóá˜óÎ;ïé§Ÿ^´hQ"‘¸óÎ;O9å” \zé¥_ÿú××®][VVöï|'ôŒppÔxÊ÷~Îw„Ú‘5W›5köÀŒ7îøă¢¨M›6S¦LÙ³gÏóÏ?¿sçÎ=:ôŒp¤}†zÓ¦ÍU¿œ?ßuGBÊ+Q5kÖ́ /¬úå9çœ3dÈ•+W¶hÑ¢C‡¡§€ƒ úÉ;›7ïï|G¨MÙI»víZµjƠ;ï¼Óºuë̃½{wêÔ©Y³f¡‡€ƒ`?ç5jG2A6…ăÎ;ï¸ă‡~¸¼¼<¢óÏ?¿wï̃Æ ëÖ­Ûơ×__XXz@88jñÄ¡Gà3™:u ;ÀÊ•+ïºë®Ơ«WôÑGEEEcÆŒù×ư×Đ»ŒÇÔlÑ¢Eçœs΢E‹7õ½{÷W_}ơ¼óÎ[´hQ蹂ÉÜ+í̃½û+®hĐ ÁƯwßƯ£G(^ươ#F\uƠUưúơ«WOm¹HƠà‘G)--½è¢‹’ƠEÑ×¾öµoûÛ;v́X¹reèéÂ5øË_₫’——7tèĐÔÅo¼qƯºu'œpBèéÂđRu V­ZUXXزeË—^zéƠW_Ưµk×±Ç;hĐ üüüĐ£#ÓíÙ³çĂ?́رăµ×^;₫üªơ¶mÛ̃zë­Çw\œ?¤¨¨(meáÂ…¡¿³0‹‹CÁF*»‘Ên¤±!©́Fª »1xđàĐßw¦é>üđĂ(̃|óÍ÷ßúôéưúơûûßÿ₫đĂß~ûí—]vÙO<çºăºuëB¤}ûö¡GÈ v#•ƯHe7̉ØTv#UíïFơ¿Ö«_!Ễă˜®aÆÉ7ÜpĂĐ¡C›6mÚ²eËK/½tذaÅÅÅüăC†pL׸qㆠæçç÷ïß?u}Đ AQ­]»6ô€aÇ4õü°ĂËËËK]L¾B½wï̃ĐÓ„!kĐ¿ÿ̉̉̉ơë×§.¾̣Ê+Q{́±¡§C8Ö`ذaQM™2åƒ>H®¬\¹̣î»ï.((8í´ÓBO†OU× K—.ăÆûơ¯=xđà={–••-_¾3zt ×S¯5N˜zDG8Àç®#¦µcj5^~ytÓM¡g…p„#DÑ>ÚQ5B*áÿÖª̉GøLŸ}Q$às̉Úqđ`Ơÿ às̉Îk\¸đç;Bîđ™Où®ñŒÈAÂ₫!íÓ0û9£r“p€(ÚÇÉ;ÚR GØßÉ;ÚªGøL'虜c?Ér„p€¤á~ÎkL> ÆS!w4=d„F¡jWˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p ád«5kBOc„#¡̣̣¢¼¼}̃»fMÔµë₫ÀA'lûöí=zô˜0aBèA ‡Tai˜¬Æư<€CA8@"‘¸â+>úè£Đƒ@n¹îºÏn§¥aj5FQôÆ¡gÍÂñî»ï¾_|1ôs~₫óÛ±z5vézÖœ!÷gÆ ·Ür˱ÇzÈEƠÛñÍ7S Ç}Ú»wïĉ 'MzÈQiíø­o}¥ê¶j¬} B¹n»í¶5kÖÜsÏ=M4 = 䮟ÿ<¢ḥäÏ-ªÆ „cÍV¬X1{ö́‘#GöêƠkơêƠÿ́o/**J[Y¸paèï)ŒâââĐ#d»‘Ên¤²ilH*»EQχEÑWRW6ܼys-}ơÁƒ‡̃€L!kP^^>qâĶmÛ?₫ÿö'¬[·.ô7‘AÚ·oz„ b7RÙTv# I•ă»±fMô­o¥/vèĐ>‘¨¥ªÿµ^ư QđÇLŸ>½¸¸øÆòÏÏ= ä´´ÏP]ZuÛñµÏÇt/¾øâüùó/¹ä’N8!ô,ÓªŸ¼Ó°áΛT½ß1//ªµëD®8V·aÆ(fΜYô¿¾÷½ïEQ´`Á‚¢¢¢ÓO?=ô€öu^ă¾Îw¤¸â˜î«_ưêw¿ûƯÔ•Ư»w/Y²¤uëÖƯ»woÙ²eè '́ç¼Æ´ÏY»îXk„cº>}úôéÓ'ueơêƠK–,éÙ³çM7Ưz:ȉÄ?®&Öx̣Nj;ªÆZ#€ •HDkÖ́ó¼Æd;&ÿ—Úá=@æÚÿ)ߪ±–¹âx`Ưºus.#€+Ä"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±4=@†*//ÿưïÿđĂyä‘;w=ztï̃½CÏŒp¬Á̃½{GµbÅ‚‚‚“O>ùïÿû²eË–,ỴÓŸ₫ô'?ùIèéÂ5x衇V¬XÑ£G»ï¾;???¢ 6Œ9̣öÛo0`@—.]B€÷8Ö`áÂ…Q]yå•ÉjŒ¢¨S§N]tQEEÅóÏ?z:€0„c 6õܸqănƯº¥.vêÔ)¢mÛ¶… /U×à®»îjĐ }gV¯^EQÛ¶mCO†p¬A×®]ÓV–.]:kÖ¬/}éKC‡ó'¥­$_₫ÎAÅÅÅ¡GÈ v#•ƯHe7̉ØTv#UƯó̀3ç{î5×\z€LáÇt‰Db̃¼yGyäW\z€ âcº÷ßÿ­·̃ÊÏÏ1bDơ{‡ 6räÈĐ3 Ó%ˆ*//_µjUơ{}°ÈYÂ1Ư׿₫u§0Tç=Ä"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±GbÄ"ˆE8‹p á@,€X„#±Ç}úĂ₫0|øđîƯ»÷îƯ{̣äÉ%%%¡'ÊJƒ=B±©́F*»‘Ɔ¤²©́FX±f·ÜrË”)S6nÜx̉I'qÄ<̣Èüặ̣̣Đs#k°nƯºY³fµhÑbáÂ…³fÍzúé§Ï;ï¼×_}ÆŒ¡GF8Öࡇª¬¬;vlóæÍ“+“&M*((xê©§*++CO†p¬Ạ́åËëƠ«×¯_¿ª•úơëŸrÊ);wî|å•WBO†pL—H$̃|óÍ£:ꨣJ]ïܹsEÛ¶m = @ BqÊÊÊ***6m¶^PPEÑ|ç)** ư}d»‘Ên¤²©́F’Ên¤² ÇtÉN7nÜ8mưˆ#ˆ¢h÷îƯüÖ­[ú›8ø¼T®iÓ¦yyyeeeië}ôQô¿×rpL× Aƒ‚‚‚êWKKK£(ªúœ5@®5hÑ¢ÅÎ;“¥XeóæÍÉ»BO†p¬ÁÀ+**{•D"ñ́³Ïvï̃=ôtaÇ >¼^½z¿ưío“ïkŒ¢hÖ¬Y;v́8묳;́°ĐÓ„‘—H$Bωî¹çéÓ§·iÓ¦oß¾[·n]ºti×®]ï¹çêÇôäá¸O?₫øc=öú믷jƠêßøÆØ±c“'̣ä&á@,̃ă@,€X„#±GbÄ"ˆE8‹p¼{÷î½{÷µîk7ró©u?ÿnTñÔZÛ|ak×®=öØcûöíûî»ï&W¦NÚ¹sç_₫̣—¡G àèܹó9çœSVV–\Y¿~ư7¾ñ.]º¼ñÆ¡§ é{îéܹsçÎ/¿ụ̈Đ³„±k×®={p /½ôRråµ×^;î¸ăzơêUQQzºÚ–üÊe—]öé§Ÿ&W^xá….]º|ë[ß =Z-Ù½{÷̣å˯¾úêäÿ/V¬X‘ö€œzj=ànäÔSëw#•§ÖZæăAđĐCUVV;¶yóæÉ•I“&<ơÔS•••¡§«m .Œ¢èÊ+¯̀ÏÏO®têÔ颋.ª¨¨¨ó¯ª́dž n¹å–c=6ô !=̣È#¥¥¥]tQ=’+_ûÚ×¾ưíoïØ±cåÊ•¡§«m¯¼̣JEçŸ~ƒ ’+'Ÿ|r—.]¶lỤ̀Á„®6 2dĈ>øà¾SO­Üœzj=ànTñÔZû„ăA°|ụ̀zơêơëׯj¥~ưú§œrÊÎ;“7ä”Í›77nܸ[·n©‹:u¢hÛ¶m¡§ cï̃½'N,,,œ4iRèYBúË_₫’——7tèĐÔÅo¼qƯºu'œpBèéj[«V­¢(JmÄD"±k×®zơêU¥dƯ6mÚ´™3gΜ9³W¯^5> §Z¸9ơÔzÀƯḤÔDN<=R‰DâÍ7ß<ꨣ:ê¨ÔơÎ;GQ´mÛ¶={†±VƯu×]ƠÿÚ[½zuEmÛ¶ =]·ƯvÛ5kî¹ç&M„%¤U«V¶lỤ̀¥—^zơƠWwíÚú±Ç4¨ê JN9ưôÓç̀™3mÚ´Fxâ‰%%%3gÎ,..₫Á~#ÿôéÓ'ycñâÅƠï͵§ÖưïF”cO­Ü$O­AÇ/ª¬¬¬¢¢¢iÓ¦iëÑç/'䈮]»¦­,]ºtÖ¬Y_ú̉—̉.5åˆ+V̀={äÈ‘½zơJ>Ëç¦={ö|øá‡;v¼öÚkçÏŸ_µ̃¶mÛ[o½ơ¸ă =`m+**;wî¨Q£FUµ8räÈÉ“'‡-#xjMă©5§ÖP¼TưE%?ß׸qă´ơ#8"¢Ư»w‡0¤9sæüèG?*++»á†5kz¢ÚV^^>qâĶmÛ?>ô,}øá‡Q½ùæ›O>ùäôéÓ—-[ö́³Ï3æí·ß¾́²ËêöçdkTZZzĂ 7|üñÇƯºu;û́³O;í´üüüÇ{,7?c^§ÖưđÔê©5 W¿¨¦M›æåå•••¥­'H₫ÇqnZ¶lÙ/~ñ‹7¶jƠêºë®Ûÿ[UêªéÓ§ÏŸ??7_MƠ°aĂän¸aÀ€ÉÛ—^zéöíÛyä‘?₫ñßÿ₫÷CÏX«&Nœø̣Ë/O4é‡?üareûöígŸ}öÏ~ö³ tèĐ!ô€yjƯO­‘§Ö \qü¢4hPPPPư?KKK£(ªú0`NÙ³gÏ´iÓÎ?ÿüíÛ·3æ©§Êͧ¶_|q₫üù^xa~̣£ºÆ7lØ0??¿ÿ₫©ëƒ ¢híÚµ¡¬Uï½÷̃âÅ‹;v́XUQµnƯú’K.ùôÓO}ôÑІ穵:O­IZĂrÅñ hѢśo¾YZZú₫ÜÍ›7'ï =]m«¬¬?~ü3Ï<3hĐ k®¹&7Ÿß“’?$ùÙÀÔơ ,X° S§NO<ñDèkUóæÍwíÚ•———º˜¼`°wï̃ĐÓƠª;wFQt̀1Ǥ­'/4¾ÿ₫û¡̀ZSyj­â©5,áx 8pƯºuÏ=÷Üw¿ûƯäJ"‘xöÙg »wïzºÚ6wîÜgyæÜsϽækBÏØW¿úƠª%’vï̃½dÉ’Ö­[wï̃½eË–¡¬mưû÷¿ÿ₫ûׯ_Ÿü`lṚ\•\;†í˜c©_¿₫† ‰DjI¯[·.¢;†0#xjM婵§Ö°„ăA0|øđ;ï¼ó·¿ưí©§|ăö¬Y³v́Øñ£ưè°Ă =]­J$óæÍ;̣È#¯¸âĐ³„×§OŸªC%’V¯^½dÉ’={̃tÓM¡§ `ذa÷ßÿ”)Sî¼óÎä++W®¼ûî» N;í´ĐÓƠªüüüSN9eñâÅ¿ùÍoÆŒS¯^½(6lØ0sæ̀Ă?<íƠüœå©µ§ÖTZĂAëÖ­'L˜0}úô3Î8£oß¾[·n]ºti·nƯ₫ưßÿ=ôhµíư÷ßë­·̣óóGŒQữaÆ92ôŒÓ¥K—qăÆưú׿fñâÅï½÷̃¯~ơ« 6<ùä“_ùÊWbNUƯĐ¡CO<ñÄ(ÊËËó›ß„̃W ·G î›1cÆï~÷»D"ѪU«æÍ›¿ổKË–-{î¹çfΜùå/9¢;vŒ1bË–-ùùùÇsLeeå–-[î½÷̃gyæ‘G),,́Ù³ç̃½{|đÁ={öœw̃yûo»êÖ¬Y3~üø̣̣̣(*++cNU£$óÚµK8µL8Y¬¼¼¼*¤R<úè£ÉÛ‹/={v»vín¾ùæ¯}íkQíØ±c̣äÉÏ>û́wÜ1eÊ”(yä‘-[¶ 0`ÆŒ7¢¨´´ô’K.Y¾|ùŸÿüçïÿû 0`À‚ öîƯ;ỵävΫ¯¾úøă¿øâ‹;wîܬY³˜Sd€Y,‘H¼]“w̃y§ê1Ó§O¢èÖ[oMöYEÍ5»ơÖ[[´hñđĂïÚµ+¢½{÷öïßỵ̈Ë/OVcEM42dHE[·nưâs6nÜxö́Ù½zơJVc̀©2+@K¾×p?())Ù¼ys‡ºuë–ö{ơêơ裮ZµªOŸ>?ùÉỎ~ăûï¿ÿÇ?₫ñ`ÍyÆg4lØđŸ*àÆÔH8uÙ¦M›’ÿ[TTTăª®M¾ưöÛùË_^zé¥mÛ¶½ơÖ[%%%qŒvíÚưߦÈ(¨Ëö́ÙEQ›6m TăZ·nEÑüùó§Nºwï̃víÚớÙsĐ AÇwÜæÍ›ùË_₫³_±¢¢"‘H¤-¦¶s*€L#º¬C‡Q5jÔh?Ÿhùè£~ơ«_~øáwƯuWê ÄÉsy₫YÛ·o¯úÜô™ ùp P—µhÑâè£̃¸qăêƠ«S×+**Î:묾}ûîØ±cåÊ•_ÿú×Ó̃V¸víÚ8_"íEí?ưéOeªĐ;PáÔqăÆ«¬¬7nÜ5k’+}ôÑÏ₫óU«VuëÖ­Y³fÉ#¾×®][•k>øà¼yó¢(J¾X¥²²²¬¬,y;ùÎŹsçV­,]ºô;î8(S…̃6€x©¨ă† öâ‹/>úè£C‡mÓ¦Maaá¦M›ÊÊÊ9æ˜ë¯¿>¢: 8đÏ₫ói§Ö£GD"±nƯº’’’#F̀™3ç?ÿó??üđĂäé9M›6-))9çœsÚµkwÛm· :ô₫ûïå•Wصk×÷̃{ïÍ7ß,((hÙ²å'Ÿ|̣§È@®8u\^^̃ 7Üđ›ßüfÀ€É Ó¾}ûqăÆ=öØc………ÉÇÜ|óÍ?ưéO[·nửK/½ûî»§œrÊc=vå•W1¢~ưúË—/O>l̉¤IíÚµÛ¸qăúơë£(jÛ¶íüÇ 4¨^½zK–,Y¿~}›6mfÏçzaœ©2M^ơOÿđÏúøăwîÜÙ¶mÛ¼¼¼Đ³*€X¼T @,€X„#±GbÄ"ˆE8‹p á@,ÿ¨úˆói¼°"IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/gustafson_kessel_201.png000066400000000000000000000453571463010412100243710ustar00rootroot00000000000000‰PNG  IHDRh\­AJ¶IDATxÚíƯ{\Tu₫øñÏ©àQÄÛ¢ÂxÉŒ´‹x¿mṼÈü¦ÉOÍÚ¬6WÓ¼d¦]0µ4ûV’âj%•åêæWËĐZÍRó–b(xA]I!I˜ßÇg.|Jf>3s^ÏÇ÷ñ} gFxóцיóÁbµZPJª€o  …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG|I|¼ê `b„#^Äb‹Ó{ăăÅêƠ®¸á€·°¡Ă4ÔªÑÅw#đe· i¨¯F!„ƠªzV˜á€·8ỷq;Rđ+ÿúđ&‹S§Ê>8j„· đ:†v´á‡6Ôâ¥j¼á5k ƠåUà‡bbbTđyyy „è¥?ÂÏï‘®z5G·0í¿'{111¬† «¡Çjè±,H|¼8rÄxđÈ‘tN:zÉ¿ /Ăóx©ïb¸†:0đ¬í6Û7B-Â/b¿óNTT7û;D8à-œí×èlGÀĂG¼…‹ưiGxÂoa‹E‡ÁèÛ‘«d á÷JMMU=‚a5ôX =VĂÀ̀ bµ£P¿Z;¹ÍüoĂø’“'UO# …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG0/‹E\¹RÎ̀Ăb6”óxØbÔ(W¨][ơˆ&cêp̀̀̀Œ‰‰ùé§Ÿ\?́̀™3íÚµ›8q¢êy "iT½ºÓvÔ`’Z̉¾Í{ïuÚ¦Z /±b…xøañ₫ûNÛ±vm‘—Ç_G™:SRRÊ}ŒƠjùä“rüÁܹ́SơÈPÁúô_}Uö¡¡ơôî»âoS=®›Ơ¨! Ê>4´£~5†?:P1¬Ö²Û†vÔW£Å"JKUÏjf Ç~ưú 6́ÓO?-÷‘óçÏoÑ¢…ê‘ â9kG³U£ÆY;Rj9lGªQ!3†ằ™3“’’’’’âââ\<́Úµk“&M 2eê‘À-́ÛÑœƠ¨±oGªÑÚ±E‹¦T£BªP S§NÚM›6¹xØ;ï¼sèĐ¡¥K—Ö¬YSơÈà.Z;̃wŸñ¸ÙªQ£µ£ư³>Ơ¨–ƠZñÅÅ×oQJ˜1éÛ·oñâÅ qqqü½<&&Æp$UÿFt3ÉÎÎV=‚a5ôX =µ«#̃?èÑGëÛ¼đBîư÷de™tA¨Ô¦MÛ‡÷Üóë̀™gM»^"3SDEEê;–屿”>}ú¨^oA8:PTT4ỉ¤ˆˆˆ &ü±Ï®ú›đ"‘‘‘7ÿIü«¡Çjè©]¨¨>œ9³ÎóÏשVͤ bØ̃eûöª‘ù‹IWĂKØï×øê«‘K—zè«ÛÿX·?Cdf|c¹æ̀™“ưú믩ÜÎá6x.öwôoWĂÅ₫đưƠ06.öw„ûF;wî\¾|ùèÑ£Û¶m«zp;ĂƠ0.öè1ĂƠ0.öèÇ®¡Î̀,{}vô<ÂÑ(##C‘””ó_>ø bÍ5111}ûöU= Tûk¨]ïïèß́¯¡v½¿#<ÀáÎ;.öw„»ñG£&M<đÀú#—.]Ú²eKÆ cccëׯÿG?1xg;﮳®^]\¾,Ô¾ßÑĂ«¡¿†Úpơ½÷ơë…Ú÷;‡‹ươ×Y¿ÿ¾Bx́ư&G8uêÔɶ_æàÁƒ[¶liß¾ưo¼¡z:¨xö;ïÚÑï«QÏ~çC;Răz¿F};̣›:<†—ªÀ¤´×ûœí×h{ÍZÿ² Ó¾Mgû5Ú^³6Éjx mµ]́ר=`Î1i’êYMƒ3`^®3¨Osu’ëo¶F s­†—(wÍùKñ0S‡cbbbbbb¹kƯº5û2đR5¤B8@ á)„#„Åbü?ÀdGʳoŸÈÍupœv„ɸôÓO"6Öé½´#̀ÄÔû8P™.´X؇&ÁGnZq±ê O ¸i•+«đÂRGH! …p€ÂçdöÙa/˜á€K®»j„™”ÇYR0~s ¬Vqíäç&L3§¼ä„Úñăª'B±/jô:ª'0ẦËb;:½wÄQ©’()ñÄNï}ñE)6oöÄ.~1ur²ˆ³f¹} è¹₫K)(!!R¿N…p“̉~ÜnÛæ¸GŒË– !D` {ÛQ#;Ûq;¾ø¢HLBˆnƯÜÛ¶øpX!ÉÉbôh!„˜:•vô×)Z5ºxÜp³³oG[5j<1†};ÚªQÓµ«¿zíÚe· b«FÍóÏ{b5 „xúé²Û†¿}5 !6lP=«i`Rú÷/êÛÑPî~›£₫óëÛÑPî#7×q;ªÑK̃ôi 8nGûj́Ư[ơ¬¦Áû|À¼¬Ö²ÆZ;6kæÑj´CkÇCß}×Ócäæ:uÄÅ‹×?´XÄ¢ET£b !DR̉ơ-±¥¨¨²PF8€©ÚqÛ¶îR2Fv¶x÷ƯZJÆ0´#Ơè íxÛmMlwQÇKƠ`v“Èóä%c^³V5ô ¯Yk¨F%G€>ü†ăâÔŒ1mÚ ₫éOjÆàºi/dÿ—B5*A8€Ù®†Î÷èq+ĂƠ0Âù=ne¸FĂn/j®†Ñđ—¢á¦f_·£}5j<܆jt±G<ÆP={Únó—ây„#˜—ưÎ;Îöèq+ûw23³lz¬íw̃q¶G<Æ~çŋϹØßîF8€I9Û¯ÑĂíèl¿Fgû;º‰³ưiG…œí×èlGxáfôÊ+®ökôX;®_ïj—oµcV–«whGU\̣́M;ªB8€MŸ.îºëúír÷ÁÙºƠ]cÜ{¯˜0AvŒS§Ü5Fd¤X¹̉Ơúvdk±-µĂwôíÈ_Ç`R;vˆ»îrơW»ËƯ?’çÎ&¨cĐ ±r¥«¯¢µ#âaV««ưµvä/Å“G0¯;Êy€g~$Ïëc TÎrs=1 \ïרư^x á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8€yY,7û€ *¬Vơcx‰ÄD±u««˜j5àmL™™™111?ưô“ư]EEE|đAß¾}o¿ưöÎ;?öØc[]ÿw ¾FëRî*Dh¨ÈÏ•*9mGÏŒá%Å‹/Nœ¶£©V^ÈÔᘒ’âđøµk×F9kÖ¬óçÏwèĐ¡Y³f;v́5jÔ‚ T ă­·Ên;¬ưÁ1cÜ5Æ—_üüë·¶£~Œ<»FwåxñÅë·¶£~5êÖU=.L)Pơ 9rdíÚµŸ~ú©Ă¬X±bß¾}íÚµ[²dIPP"###!!aÁ‚=zôhÙ²¥êïnÖ¸qBñ́³×?´Xnˆ6} <óŒxçwñÀâ_ÿ>xưĂJ•DiiÙW×Ñ¿¿ø¿ÿS½jnV­8{V4hpưĂNÄ–-¢cG«&.\P=.LÉŒgûơë7lØ0gƠ(„HMMB¼đ Z5 !¢££Ÿ|̣É’’^°à7Æóç—}è0×ÜZøxñ¯•}h;ïh¶jÔÔ¯/Î-ûĐṽ‘j„—0ăÇ™3g^½zUñÑGmÛ¶Í₫YYYƠªUkƯºµ₫`tt´âÔ©SªÇ€ c̃QÏƠ¨ÑÚQ̃QˆHÛ½æ©FÖúóúƠ ¡–ñS§NÚM›69|À¢E‹+sđàA!DDD„êñ "ÚÑÆcƠ¨1´£ÙªQchGªÊ™1ËƠªU+Ă‘íÛ·'''W©ReàÀ2Ÿ!&&ÆpD{ùÛ„²³³UàEX =VCOíj  rsk&&Ö±>¼`üøÜ¬,qûíâ½÷‚ŸzªíH¯^…o½uÎĂcx;î¾»±íĂ5Jwî}Tß̃‚p,GIIÉÇüú믗””̀›7/,,LæO¥§§«Ü‹DFF̃ü'ñ¬†«¡§v5oøpÙ²~XÓóc<ơÔ ~óMpÓ¦‘¦Ưz&*ê†ù¥̉™3‘¶kè̀óÿ±ØÿX·?Cdf¼8F̃;úơë7sæ̀°°°%K–Üÿưª'€Wîv< Çp±¿£s¸.öw<ƒpt¬¸¸xæ̀™#FŒ8sæ̀˜1c¾ú꫸¸8ƠC@Å3\Cíđ:kÑ¿¿xï½s¶M؆k¨ẃ8iûv„Z¼Tí@iié„ 6lØĐ«W¯3f„‡‡«ÜÂÙÎ;ÎöwôÀÚƠ0YY….öwôoö;ïde•¸Øßđ$Î8:’’²aÆGydÁ‚T#å¬íïè1ô×P;ÛßÑ¿9Û¯ÑÙ₫€‡FV«ơ£>ªQ£ÆäÉ“UÏ`¿ó¡=Ă~çC;䌣Æ~çC;æä¨¦ÄKƠF.\8ỵdPPаaẮïOHHP=#T«UX,N÷k´íïèîó|ÚÎök´íïh†Ó¶Ơp¶_£mÇƠ«ưÿ7wĂ;FÚQEEEiiiö÷r‰ âºÆÆ»jLj7K5j\³ơë‹_Uª¨feêpLLLL4́]&ÄwÜÁ.Œ¯E5B!̃ă)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8¢"Y,Âb¹©Tˆ»ïö1đ3„#*Œ-Åœ5Y¹¨wß-vîT?₫‡pD…™>½́¶}“é<ü°ÇxüqÙ1ââ<º>ø:Âæå—¶£¡?ưÔcüơ¯"9¹ü1ââÄÖ­ÊÖ _D8¢"9lGOV£Æa;RÜ$ẦĐQQ‘¶Û©F‹óT# áˆghG'«QchG ƠÀF8Â-^~ÙxÄĂƠ¨ùë_G¨F₫0Ânáúrf³€ QñôqÖ¼ùo{xŒ?ÿÙñq pD3\CízGŒ'uz­ D8¢"9ÜyÇÅ₫Ăv5Œ‹ë¬€ ÂÆÅ~lG;ïĐÜ ÂÆj½~ĂáÎ;úv´=̉­c8ÜyGß×®)[+|Q êàW¬V1dˆÓw´=źwêqÇ;:ƯyGÛ£gÔ( h™đM„#*˜ëư=P×û5ÚïïÊÅKƠB8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„£ÿxûmW÷Θ¡z>Ï2ÄƠ½©©ªç3%‹¥œ̀¥zD€KªP)33ó¾ûî[±bEÛ¶míïưç?ÿ¹bÅ£GwíÚuâĉ¡¡¡ªGvÊö#ùïwpïŒâ•WÄ+¯«Uơ ]O?upojª¸ï>!„YVĂKh)‹Óe·ư­=ÿ¼êYN˜úŒcJJ³»æÏŸ?mÚ´cÇƯyçƠ«W_µjƠO|ÿ₫ưsçÎU=»cúS8†vÔW£0Ç96ư÷hhG}5 !._V=«iäæÚµË>4´£₫ĂüCÜv›êqN˜1ûơë7lذO¾)„bÅ¥¥¥ăÆ ×L™2%$$䫯¾*--U=¾cÛÑ„ƠhÿÚÚѾ«US=¨™8kGC5>ö˜êAΙñ=3gμzơªâ£>Ú¶m›ưvíÚU©R¥nƯºÙté̉eíÚµ{ö́iß¾½êïÀ1«ơ†×¬¿úê†K@̀Sö«ñÙgấYñƯwe÷RJäæ:uÄÅ‹×?ŒÔßK5€÷3c8vêÔI»±iÓ&û{­VëÑ£Gk×®][zDˆæÍ› !N:åµá(n¬%3W£ưjP^ÂĐ6T#ø3†£k………%%%µjƠ2 B\´ÿ‰çHLLŒáHª§6€É̀4ÈÉ̀̀ÊỆ̀w ;;[Ù×v´iiÇÏŸWÖÑjWĂḰ̃-I~~ÙûdfÏÎéÑă…ÿJ½ÿ6 X=VCOÉjôéÓGơ÷í-G#í̉éjv§¤ªW¯.„¸té’̀'IOOW5¿ư~k×F:Ü£Çc"##o₫“ü1ö¹₫ê«M¿»ƠÏWĂ{äçßđá”)a“'‡©J=₫m° z¬†çWĂ₫Ǻư"“0ăÅ1®ƠªUËb±_¾|Yü÷¼£×2\ £q¸G®†Ñ8Ü£äz;€7#CBB́Ï,!l×Y{!×P›°]́¼C;*¤ÄÙ³s\́ÑđB„£ơêƠËÍÍƠJÑF{Ÿ`½zơTOç˜Ăj4m;:ÜyÇÅ₫đ ĂÎ;ÿó?¿¸̃ßàmGzö́YRṚư÷ßÛX­ÖÍ›7‡††ÆÆÆªÎçMØ.ök¤r¶_#í>„pt`đàÁ•*Uz÷Ưw/ÿ÷Îää䜜œAƒƯrË-ª§sÀơ.߆vô{®wù6´#üPơø^ª€ÂRGH!ưDX˜«e„‹ˆ‹S=¥§̀U₫j¸~@…ؼ¹œ¯á‰1JJ„Åâộq!DÇàG&rs…NükÇøÁí8k–˜:µüƠpñ€ ±y³èÖÍƠW‰ˆÙÙn£¤D !D¥JÛ±cG±m›ÛÇøÂÑ4o^vÛ₫Ç¿₫H:ªgu¿œÙƠ¨]ÛćƯëj [5ºÛ5e·íÛÑVÈ ưÁ¶m¢C‡²ơ™¢¿Ư·¯X»Vơ¬î7o?¾üƠ¨]ûúiZ77ǸŸïøKªÑÅ‹È7/>^üë_eêÛÑPnàG?á°MX‡íèÉjÔ8lGOV£Æa;R€?€pô.Î;ª5.Î;z¦5†vŒôp5j́Û‘jü„£_1´£Æ„Ơ¨1´£Æ“Ơ¨1´£‡sÍĐªÆø4ÂÑߨ_ë`ÎjỒ›g<âájÔŒ'jƠºáˆ’\‹-ZÜp¤´TÁßE8ú××›—¬FD„ÈÏW?FÇâđá8Û£‡G¿¢Ï‘ĐPÇÇÍCÿ]W­êø¸8ÛyÇĂc8Ûy‡vÈ#ư‡áj˜‹^+c†«aœ^+ăV†j̀̀̀r¶G[Ù_Cíl\ ư„Ăk¨]\gíß^Cíâ:k7q¸ó‹ưƯÄáÎ;.öwÀÂѸØyÇ„íèbçO¶£‹ư=Ù.ök´oG\ăg…?¸zơú ‡;ïèÛÑ g•lߣĂwôí¸r¥Ç8uÊÁH6úvœ0ÁclƯêj };̃u—Çø‡@Ơ T®,®^ƒ9ƯygÛ6g¢ßJlµ:uœî¼£íÑ' rû‹ÓX7N!²³Åܹ*ÇĐÚqöl±c‡{ÇøŸ ÇË—/W¯^Ưöá‰'Ö¯_åÊ•V­ZuèĐ¡fͪT¬rårök4O5j\ï×h¿¿£›¸>Å«µ£̣1âăE|¼‡&ø4oÇÜÜÜ×^{mëÖ­yyy¡¡¡£G~ôÑG¿ưöÛ§Ÿ~º¤¤D{Lƒ æÏŸ«zXæƠáxụ̀å?^a±X̣̣̣fÏ]¥J•¤¤$!Dß¾}ëׯ¿oß¾Ư»w?ñÄß|óMHHˆê‘ü–W_“œœ|₫üùöíÛñÅiiiÿ÷ÿ•˜˜xáÂ…7ß|s̃¼y'Nüøăüñ‚‚‚äädƠóø3¯Ç­[·V®\ùÿ÷£££[´h1a„’’’† öéÓÇö°gy¦jƠª»víR=/€?óêp<~üxÓ¦MĂÂÂlGn¿ưv!DDD„₫aAAAYYYªçđg^ÁÁÁùùùú#5kÖ ¶¿†úêƠ«ªçđg^}qLTTÔöíÛÓ̉̉n½ơVíHåÊ•÷îƯkxØ₫óŸÓ§O·iÓFơ¼₫̀«Ï84Hñä“O~öÙgYYY¶ưwôrss'O\RR̉­[7Ơóø3¯Ç₫ưû÷ë×ïÂ… Ó§OïÓ§ÏáÇ =zt—.]¶oß̃¤I“G}Tơ¼₫̀«ĂQ1wîÜ… ̃ÿưÍ›7·cVVÖ-·Ü2hĐ U«VU­ZUơ°₫̀«ßă¨é̃½{÷îỮµpáÂ&MpY €ø@8º¥z³đö—ªà%GH! …p€ÂR|ïªêüüü´´´³gÏ6lذcÇ999aaaª‡đ¾¹¹¹ï½÷̃Ê•+‹„#FŒèرc|||ëÖ­gͪz@æ3/UÿöÛoO?ưtJJJÍ5ăăămÇĂĂĂ7mÚ4dÈ­&¯̣Øc®îuôÛ×Ư¢woƠ đ >‹-Ú·o_×®]SSSgÏm;¾bÅ?~|Ù²eøå‹‹/^üàƒÆÆÆöèÑćرª×>ÆbK—:mÇ’(,OŒñÍ7®ÚÑbñÄ?à3á¸sç΀€€×^{-88X< `úôéÁÁÁëׯ¯¨¯URR2bĈ¹sçæååuîܹQ£Fëׯ0`À®]»T/|†-Ŷ£V†Gºu gíh{í(—Ï„ă¡C‡"##^S½zơ¨¨¨'NTÔ×ú́³Ïö́Ùsß}÷}ươ×o¿ưvJJÊûï¿/„˜6mêe€Ï°ZËnÚQ_BˆÏ?÷Đöí¨Åÿư_5 đ!>!!!W®\qvo^^^5*êkíÙ³G1bĈÀÿ₫xïĐ¡CË–-?~ñâEƠ+Ÿá°í«qà@Ï¡oGC5₫ưïjW à|&[µjuö́Ùưû÷ÛßuèĐ¡Ó§O·lÙ²¢¾Vƒ „úF´Z­ùùù•*U ô¥ëĐ¡œ¡'M óp5Ú¡µ#Ơø|&~øa‹Å2a„ƒêöÓÓÓU/†¾ôÂësÏ=×®]»9sædff !NŸ>-„¨[·îøñăơ;;̃¼‚‚‚Ù³g_¹r¥uëÖmÚ´ÉÍÍƯ²eËêƠ«ï¹ç̃râ™ó“3‘‘‘7ÿI|ư~;wÖ=ZơXBlÛVçå—ë(€z¬† ¢Çjèy~5́¬;û́5k¢¢¢T/|‰ájÍ̉¥B±d‰G'±ßpG{¿ă×_+[€oñ™÷8fggŸö×P»̃߇|&£££…Gq÷jÚ´i@@@FF†á²!íư Í5S½đ .ökôp;:Ûy‡vü^>/¾øbPPĐ{ï½÷믿ºơ ué̉åĉo¿ưvii©v0###))©råÊƯ»wW½đ ®÷k4´£ûèÿ—ưÎ;ÎöèÀ!Ÿ¹8&<<|̃¼yÓ§Oïß¿ÿ₫ư7nl¿¥b·nƯ*äk%&&>ôĐCIIIëÖ­kƠªUnnî?₫XZZ:mÚ´?ÿùϪW¾Áj½~ªÏÙ~¶¸uG¬£GE³fâØ1§û5zf €đ™p´êËÉÉyçw>¦¢6Á [·nƯÂ… ·lỤ̀í·ß†††víÚơ©§jÓ¦êe€/±ZÅêƠ®vùöL«=*–-Ç+à|&û÷ïïÉ/<~üøñăÇ«₫¾áÛ<ù»a\pQÈó™p|ă7T`j>sq Ộ™3÷ÜsO¹Ù¾}»ê1ü–Ï„cAAáˆƠjµm—S¿~ư°°0Ơ3ø3Ÿ ÇŸ₫Ùp¤¤¤ä̀™3_ươ{ï½wơêƠ—^zIơŒ₫̀‡ßă1jÔ¨w̃yç̉¥KÏ>û¬•mEÜÆ‡ĂÑæ{îiÖ¬Ù©S§N:¥z¿åá(„BÔ©SGơ ~˱°°đçŸ «V­êYü–Ï\óĂ?8<———’’rñâÅ^½z©ÀŸùL89̉Ž5jÔ;v¬êü™Ï„£‹ßUƯ¸qăFDD¨ÀŸùL8̣»ªỘ™‹cbcc]´ă˜1cî½÷^Ơ3ø3Ÿ ÇÂÂÂß~ûÍÙ]'O<}ú´êü™W¿T½yóæ§zÊöá²eË>úè#û‡•––Z­ÖÆ«ÀŸyu8Ô¬YS»——W¹råàà`‡¬U«Ö”)STÏ àϼ:;uê´}ûvívLL̀!C¦Nªz(“̣êpÔ{́±ÇÚ·o¯z ọ́™‹c&MÔ£Gg÷N<ÙŽđ˜ÿ÷ÿ„Åâꋨ_ßíc¤¥•3FLŒ óđÚàó|挣"//ïßÿ₫÷‰' Ç‹¾₫ú뀀ƠƯÿûB»xÉbV«ƒh1w__üç?î#-M´iăjŒ˜qäˆB„…‰œƠ«€ïđ™pkÖ¬#F >|úôéªg4»ÂBTö¡¾ /;<XQÖ®}û:₫̉újt÷øŸ9ăøư÷ßW©R%))©fÍ=zôèÔ©Sddd\\œ"**êƠW_ưŸÿùŸèèhƠc]a¡EE×?´XDf¦G«Q³v­è×O|ñEÙV+ƠÀỊ́™3gÏmÚ´©¶­cƯºuCCCÓ̉̉´»ú₫ûï«BØwŒÔßë±\³?ïH5p“|&…•*•MÛ¸q㬬,ív@@@LL̀₫ưûUˆë íhăá\3´£ª1đ>ơë×?~üø•+W´#""vï̃m»×b±dgg«e G”äÚÚµ¢Z5ơcà|&{ơêUTTôÜsÏ;vLѾ}û“'OnÙ²E‘““óă?6jÔHơŒ(c¿¢ëƯ$&Fü÷k¨ÿà3Ç >|ưúơ7n´Z­ .́̉¥K``à3Ï|¸°°đ₫ûïW=#®sgÎ6VtĂƠ0ªÆÀoø̀ǰ°°?₫xüøñmÚ´B4jÔhÚ´iÅÅÅ[·nÍÍÍíÙ³ç¨Q£TÏ!́ª133ËÙ=ne µ³=z€$Ÿ9ă(„ =z´íĂ¡C‡öë×ïÀơêƠ‹R=„p´_cV–ƒ=zÜ}ÂÏáÎ;÷ẹ̀|)5ùùùiiigÏmذaÇ£££Ăø­ẴÁÅ~lGû5̉Ü Ÿy©Z‘›››˜˜Ø­[·Ç{lÚ´i›7oBÄÇÇ?ùä“yyyª§ƒØ»·́¶}é÷èIHpăé鮯ĐïÑ3r¤ç æ3áøÛo¿=ưôÓ)))5kÖŒ·ß´iÓ!Cl§³ Èí·_oGg§ñ´vLH))îDÀÙZ;)Ø3€ßÅgÂqÑ¢EûöíëÚµkjjếÙ³mÇW¬X1`À€ăÇ/[¶LơŒ·ß^΋¿……n¯Fë1Ö®¥øƯ|&wîÜđÚk¯ëLŸ>=88xưúơªgđg>‡ŒŒtxLơêƠ£¢¢Nœ8¡zFæ3árÅđ;@ṭ̣̣jÔ¨¡zFæ3áØªU«³gÏîß¿ß₫®C‡>}ºeË–ªgđg>?ü°Åb™0aÂÁƒơÇ<8nÜ8!ÄÀUÏàÏ|fđ;>₫øă‹/~đÁµßóÍ7ßlÛ¶íØ±c¥¥¥ñññ÷̃{¯êü™Ï„£â¹çk×®Ưœ9s233…§OŸBÔ­[wüøñúà¾BˆîƯ»wï̃=///33³¸¸8**ª^½zª‡0ï Çââb!DåÊ•íï m×®ềÅ{/iÓ¦Mï̃½UO€ë¼7¿ç{TO`F>—.]ÊËËS=€ùX8@ÂRGH! …p€ïƯ₫!èÛoÅ AbÀ€²C))â‡DƯºªG¿W‡ă¹sçbccơG„†ƒ6{÷îU=2Œê%„†¿̃½Å¾}ªG¿W¿TmµZ odµZ……N¨W±ăÇ]ƯûăăûïuX,ôÓO".έc,_î¡ïóđ̃3_|ñ…ê|‰VhYY¢iS÷₫ø£hß^!¬VOŒñƯw¢săG±ùáÑ®øúkQ»¶›ÆB êêî^ üŒ÷†ctt´Ú8°hÑ¢ƒ^¾|9&&f̀˜1wß}·êUq̀ÖI‘‘ÚÑVÚ#ƯWK¶1ºtVÑ´ü?°ghƠJüç?nă‘G„pÔ¶¸u5đ?^ưRµB7n:tèÆĂĂĂccc÷îƯ;|øđ7ªË±Ư»ËnGF̃đµ¾…YYnăܹßÿgâă+| } >̣ˆñ5kư‹çŸ|âÆƠÀÿ\ºtịäÉ)))Ÿ}öYrṛ̣åË+W®üâ‹/–––ªÎví·£}5º~ơø&…‡ÿ¡vtgíh¨Fg/d‡GV­ZUPPđä“O¶k×N;rÛm·Ưwß}999P=cöí¸v­G«QăÍíH5p“G¾ûî;‹Å2pà@ưÁ×_===½mÛ¶ª§sÊĐưû—ƯöL5j¼¶m¨F₫ï½8F¡´´´ĐĐĐúơëï̃½{ï̃½ùùù-Z´èƠ«WPPêÑÊ¡µ£₫D£đl5jÂĂ¥úí·nÄj5îD5đ‡FÅÅÅ¿ụ̈K³fÍ^zé¥åº +"""̃zë­[o½Uæ“ÄÄĤ¦¦zf₫3gªÑPäÔ©SVë5Ï|u›}‡}ñÏrváñÇ/»ơ‚!„ˆ¼á+^¸•uÙĂ«a“­êK{!VCƠ0`AôX =%«Ñ§OƠß·· ~ùå!ÄÑ£G/\¸0gΜnƯºưúë¯+W®\°`Áرc¿øâ ™óéééJ†ÿñÇ^¡Ötéáá“çÏ‹º_¬BX…ÅƠă¬ÖºB¸ơ7Úo@>vlƯºuë*<éyóŸÄo°z¬† ¢Çjèy~5́¬ÛŸ!2 ̃ăhTµjUíǼÙ³X«V­úơë?ó̀3ñññÙÙÙ_~ù¥ê2\C½fMÙmĂ=nu₫¼¨Wïúm‹p¾M¢ûwPt¶óư=@áhT­ZµªU«uï̃]¼W¯^BˆĂ‡«Đ1ûwúơsµ¿£›è«QñƯw¢`øpKKs÷$ö×P»̃ß”‹pt <<ü–[n±Üø2§ö ơµk~³  gû5:ÛßÑḾ«±sg‘û̉KÂj=Îjeÿ÷ưÅÖn]g;ïĐÜ ÂÑîƯ»9rDpÏ=Bˆ-Z¨Îû5Ú·£ûØW£a.]Ü8†ëưíÑÊE8:/„˜6mÚÅ‹µ#X²dIHHHï̃½UOç€-†^£oG·¾±ĐöÉ Ơ¨Ñ·£gÆp¶óíü¢j~®ªv eË–ăÇóÍ7ûôéÓ¾}ûÂÂÂ]»vY,–™3gÖ©SGơtY­âøq§—Nkíøß߃ẵ1¾ÿ̃A5j´vü»<̃ÄË—»Ú¯‘dà =ztXXزe˶mÛÚ³gÏ1cÆDGG«Ë×îx 5ΪQăjÔ°Ë7ptjĐ Aƒ R=€·à=B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ áè'¦NUª¸z@@€ø̣KƠSzÅâễÄă«_¨zT€©SŬYBQ¥¸zƠÁDi©èÛW|ñ…xàƠăºŸV‹°ZÜ;`€X³æúíüCơ¬øÎ8ú­…ÅÅÎ;jƠ¨éÛWơ¬î]vÛ₫¼£¾—,Q=+>…pôúój†vÔW£á‘₫*#C4kVö¡¾ơƠh’Ơ ~Âa;°5Û‘jà&ñGÿaµ–]+.6¾Jk¶NÊÈÑÑâèÑë|5¨œqô+ÎzÈœd8ïhcÎƠàæ₫ƾ̀ÜI¢Zµ˜y5¸I„£¿ 0q½¿£0@\¹rĂ×û;G¿b¸Făp30\ cC;đÇ₫ĂÅ5Ô&lGûk¨íÑ$~Âa5¶î¼ăbG ƒpô.Î5°]́×H;p3GФIÙm×WUwî¬zV÷{åW«¡oÇZµTÏ €O!ưAf¦ˆŒ¢¼}{öß|£zV÷kÛV́Ûçj5´v¬UKä婟Âoñ™™å<ÀTû¶m[Î÷›‘¡zD|g …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p,ß™3gÚµk7qâDƠƒ¨D8–ĂjµN<ụ̀å˪PŒp,Ç|°sçNƠS¨G8º’‘‘1₫ü-Z¨@=ÂÑ©k×®M4)44tÊ”)ªgP/Pỡëw̃9tèĐ̉¥KkÖ¬©zơGÇöíÛ·xñâ„„„¸¸¸ƒ₫̃?c8’ªú{R#;;[ơ^„ƠĐc5ôX DƠĐS²}úôQư}{ ÂÑ¢¢¢I“&EDDL˜0á}†ôôtƠß„‰ŒŒT=‚a5ôX =VĂ€Ñc5ô<¿ö?ÖíÏ™áèÀœ9s²³³—/_¤zoÁÅ1F;wî\¾|ùèÑ£Û¶m«z/ÂG£ŒŒ !DRRRRR’₫ø5kÖ¬YưÅ_¨@ÂѨI“&<đ€₫È¥K—¶lÙ̉°aĂØØØúơë«@ ÂѨS§N:ủ9xđà–-[Ú·oÿÆo¨@̃ă)„#¤đRuùZ·n;Œœq€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH T=€—***ú́³ÏV®\™]£FæÍ›5ªcǪçP†ptàÚµk#GÜ·o_HHH‡~ươ×;vlÙ²åïÿûß₫ö7ƠÓ¨A8:°bÅ}ûöµk×nÉ’%AAABˆŒŒŒ„„„ ôèÑ£eË–ªP€÷8:*„xá…´jBDGG?ùä“%%%[·nU=€„£YYYƠªUkƯºµ₫`tt´âÔ©Sª§Pƒ—ªX´hQ` qe<(„ˆˆˆP=€„£­Zµ2Ù¾}{rrr•*U(óbbb G´—¿M(;;[ơ^„ƠĐc5ôX DƠĐS²}úôQư}{ ±%%%üñ믿^RR2õ¼°°0™?•®zp/©z/Âjè±z¬† ¢Çjèy~5́¬ÛŸ!2 ÂÑ•;v¼ụ̈ËÇkĐ Ák¯½§z"eGÇ‹‹ßxă”””ªU«3æ±Ç³]a `N„£¥¥¥&LذaC¯^½f̀˜®z"ơGRRR6lØđÈ#̀˜1Cơ,̃‚}¬VëG}T£FÉ“'«À‹pÆÑèÂ… 'O 6l˜ư½ñññ ªgP€p4̉6ˆ***JKK³¿— «€iFwÜq»0Øă=B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„£Sÿüç?Û±cÇ©S§æåå©È'ơéÓGơ^„ƠĐc5ôX DƠĐc5Ô"›?₫´iÓ;vçwV¯^}ƠªUO<ñDQQ‘ê¹”!HOOONN®W¯^jjjrṛúơ뇾ÿ₫¹sçª @ÂÑ+V”––7.<<\;2eÊ”¯¾úª´´Tơtj́Úµ«R¥JƯºu³ è̉¥Knnî={TO áhdµZ=Z»víÚµkë7õ\qêÔ)Ơ¨¨z¯SXXXRRR«V-Ăñ!ÄÅ‹e>ILLŒêïĂ‹°z¬†«¡Çj° z¬†«¡áh¤]:]­Z5ĂñêƠ« !.]ºTîgHOOWưMT<^ª6ªU«–Åb),,4¿|ù²øïyG"CBB́Ï,!l×Y˜ áè@½zơrssµR´ÉÊỂîR=€„£={ö,))ù₫ûïmG¬VëæÍ›CCCcccUO áèÀàÁƒ+Uªôî»ïjïkB$''çää 4è–[nQ=€«Ơªzo´té̉9sæ4jÔ¨sçÎ'NœØ¾}{«V­–.]j¿M€IN­]»vơêƠû÷ïoĐ Á]wƯ5nÜ8mGs" …÷8@ á)„#¤B8@ á)„#¤æŸÿüçàÁƒccc;v́8uêÔ¼¼<Ơ)STTôÁôíÛ÷öÛoïܹóc=¶uëVƠCy…3gδk×nâĉªQéÀÏ<óL÷îƯï¼ó΄„„;v¨H™âââÅ‹?øàƒ±±±=zô;vlFF†ê¡È̀̀Œ‰‰ùé§Ÿ̃k¶§V«a§V×ÿ6lxjơ$±b̀Ÿ?Ú´iÇ»óÎ;«W¯¾jƠª'x¢¨¨Hơ\ \»vmäÈ‘³fÍ:₫|‡5k¶cÇQ£F-X°@ơhY­ÖÉ“'Û~º9mܸqèĐ¡7n Ư»wïđáĂ7nܨz.JJJFŒ1wîܼ¼¼Î;7jÔhưúơ صk—êÑ<-%%ÅÙ]&|ju¶æ|juñoƧVO³â¦>|¸E‹;w>wîœv$11±y󿝼̣êÑøøă›7o>tèĐÂÂBíÈ‘#Gîºë®–-[₫üóϪ§Sié̉¥Í›7õ¼ùsÏ=§z5̣óóÛ·oß¶mÛƯ»wkG~úé§[o½5..®¤¤Dơt¦ư—2v́Øß~ûM;²mÛ¶–-[₫å/Q=‡\ºti×®]Ó§O×₫»Ø·oŸá¦zj-w5LơÔZîjèñÔêaœq¬+V¬(--7n\xx¸vdÊ”)!!!_}ơUii©êé<-55Uñ /iG¢££Ÿ|̣É’’¿UÅ…ŒŒŒùóç·hÑBơ *­Zµª  àÉ'Ÿl×®vä¶Ûn»ï¾ûrrr8 z:OÛ³gbĈÚ‘:´lỤ̀øñă/^T='ôë×oذaŸ~ú©³˜ê©µÜƠ0ƠSk¹«aĂS«ç`×®]•*UêÖ­›íH@@@—.]rssµŸ ¦’••U­ZµÖ­[ëFGG !N:¥z:5®]»6ỉ¤ĐĐĐ)S¦¨E¥ï¾ûÎb± 8Pđơ×_OOOoÛ¶­êé<­AƒB}#Z­ÖüüüJ•*ÙR̉¿Íœ93))))))..ÎáLơÔZîj˜ê©µÜƠĐđÔª„)ÜÊjµ=z´víÚµk×Öõ¼¹âÔ©SíÛ·W=£G-Z´È₫Ç̃Áƒ…ª§Săw̃9tèĐ̉¥KkÖ¬©z•̉̉̉BCCëׯ¿{÷î½{÷æçç·hÑ¢W¯^¶3(¦̉·oßeË–Íœ9388øöÛoÏËËKJJÊÎÎ~øá‡Ṃï¤S§NÚM›6Ùßk¶§V׫!LöÔZîjhxjU‚p¼Y………%%%µjƠ2 7N0‰V­Zlß¾=99¹J•*†SM&±o߾ŋ'$$ÄÅÅiỊ̈æT\\üË/¿4kÖ́¥—^Z¾|¹íxDDÄ[o½uë­·ªĐÓbbbRRRF9räHÛÁ„„„©S§ªÍ+đÔjÀS«O­ªđRơÍ̉®ï«V­áxơêƠ…—.]R= J%%%Ë–-{üñÇ gϦz"O+**4iRDDÄ„ TÏ¢Ø/¿ü"„8zôèºuëæ̀™³cÇÍ›73æôéÓcÇơïëd*((˜={ö•+WZ·n=dÈ̃½{­^½Úœ×˜Ûă©ƠZyjUˆ37«V­Z‹¥°°Đp\Û@ûÇæ´cÇ—_~ùرc 4xíµ×\¿UÅ_Í™3';;{ụ̀åæ|5V¯jƠªÚÙ³g÷èÑC»ừ3Ïœ9sfƠªU_~ùåC=¤zF4ỉ?₫8eÊ”G}T;ræ̀™!C†<û́³kÖ¬‰R= b<µ:ĂS«à©U)Î8̃¬ÀÀÀûÿù[PP „°] h*ÅÅÅ3gÎ1bÄ™3gÆŒóƠW_™ó©mçÎË—/=z´ ¯ü°W­ZµªU«uï̃]¼W¯^BˆĂ‡«Đ£ÎŸ?¿iÓ¦fÍÙªQѰaçŸ~ú·ß~ûüóÏU¨O­öxjƠđÔªg+@½zơ=ZPP nVV–v—êé<­´´t„ 6lèƠ«×Œ3̀ùü®Ñ~ ˆvm ₫ø5kÖ¬YưÅ_¨Ñ£ÂĂĂóóó-‹₫ vÂàÚµkª§ó¨ÜÜ\!DÓ¦M ǵ.\P= Wà©U§VZƠ"+@Ï=ÓÓÓ¿ÿ₫ûx@;bµZ7õ«z:OKIIÙ°aĂ#<2cÆ Ơ³(Ö¤IÛ? Í¥K—¶lÙ̉°aĂØØØúơë«ĐÓºwï₫á‡9rD»0V£í«b¶mØ6m‘‘aµZơ%.„hÖ¬™ê½O­z<µÚđÔªáX¼páÂwß}·k×®Ú·“““srrüñ[n¹EơteµZ?úè£5jLû́矾téRË–-ïºë®Ñ£GßrË-¶äää,[¶́›o¾ùÏ₫#„hĐ AçÎ}ôQí=”¯¿₫ú’%K´GÆÄÄïƯ»wâĉkÖ¬ùàƒ:tè ÿZ­ZµªY³æöíÛ…Úc6mÚt₫üùW_}5##cƯºuúÓŸ$§²7pàÀÛo¿]QTTôöÛo«^WæB8đsçÎưÇ?₫aµZ4h¾{÷î;v|ÿư÷IIIuêÔBäää 6́øñăAAAM›6---=~üøûï¿¿aÆU«V…††¶oß₫ÚµkŸ~úiqqñđáĂ]·½C‡M˜0¡¨¨HQZZ*9•C=zôĐnäçç<ŒpàĂl!¥̣ùçŸk·7mÚ´xñâÆÏ›7ï¶ÛnBäääL:uóæÍï½÷̃´iÓ„«V­:~üx=æÎ[­Z5!DAAÁÓO?½k×®ÿûß=ôP=zôè±fÍk×®M:ơ÷Î9}úô6mÚ<ơÔSÍ›7 “œ ¼ €đaV«ơ´#gϵ=fΜ9Bˆ·̃zKë3!DXXØ[o½U¯^½•+Wæçç !®]»Ö½{÷ç{N«F!DÍ5ûơë'„8qâÄÍÏY­ZµÅ‹ÇÅÅiƠ(9xÎ8đaÚ{ ]< ///+++**ªuëÖ†?÷ù矧¥¥uêÔéoû›á^¸páË/¿¬¨9û÷ï_µjƠß;•Â…‡G₫,33Sûÿ111`;7yúôéï¾ûn÷îƯ§N:ỵd^^^Ѹqă?6x€?+..B4jÔ¨W¯^аaC!Ạ̈å˯]»Ö¸qăöíÛ÷êƠëÖ[oÍÊÊzå•W~ïW,))±Z­†ƒ†Ư%§oC8đgQQQBˆàà`W´\¾|ùƠW_­\¹̣¢E‹ô/kụ̂ü^gΜ±]7}3S€ââ₫¬^½zuëÖ=v́ØÁƒơÇKJJ Ô¹s眜œ”””Üqdž·>|XæK^Ô₫úë¯+d*Ơ+üÜøñăKKKÇèĐ!íÈåË—Ÿ₫ù´´´Ö­[‡……i[|>|Ø–k%%%Ÿ~úéG}$„Đ6_´)---,,Ônkï\LII±Ù¾}û{ï½W!S©^6p€—ªø¹øøø;w~₫ùçlÔ¨QhhhfffaaaÓ¦MgÍ%„ˆêÙ³ç¿ÿưï̃½{·k×Îjµ¦§§çåå 6lÙ²eÿú׿~ùåm÷œZµjååå :´qăÆï¼óÎÀ?üđĂ={öốÙ³U«VçÏŸ?zôhHHHưúơ¯^½z“S€âŒ#?g±XfÏưöÛo÷èÑCû•0‘‘‘ăÇ_½zuhh¨ö˜yóæưưïoذáîƯ»Ï;×¥K—Ơ«W¿đ Æ صk—ö°)S¦4nÜøØ±cGBDDD|̣É'½zơªT©̉–-[9̉¨Q£Å‹Ëœ/”™ ¼Å₫ê?ÀïuåÊ•ÜÜ܈ˆ‹Å¢zpÂRx©RGH! …p€ÂRGH! …p€ÂR₫?ÏùÅDœ‘/çIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/gustafson_kessel_202.png000066400000000000000000000452641463010412100243670ustar00rootroot00000000000000‰PNG  IHDRh\­AJ{IDATxÚíƯ{\Tu₫øñÏxC ñ¶ˆ×-ÂÚ¼ßË­¼ùKǶ™–›i*k^Ú’MͲG¦¦™hÚÅƠ¥̣V麑ë]KI/hi Jëæ÷Çñ;Ï̀>%̀gæœ×óñ}́c8s”7Ÿ¯Œ¯Îp>:œN§JSAơ „#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@J°ê,(&&Fơ edd¨A ±\ØöÏ“»˜˜VĂ…ƠĐc5ôX DƠĐó“Ơđ“1|·ª …p€ÂRGH! …pDùZ¿~½êü«¡Çjè±,ˆ«¡Çj¨E8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@­Ă1+++&&æ»ï¾3?íôéÓqqqăÇW=/€J¶Ç”””RÏq:'N¼xñ¢êa V=€‡₫́³ÏV®\YêÉK–,Ù±c‡ê‘Ô³c8öêƠë§Ÿ~’9333sΜ9M›6=tèꩳc8&%%]ºtI±lÙ²­[·z;íêƠ«&L KLL:t¨ê©³c8¶oß^{°yóf“ÓæÎ{đàÁÅ‹רQCơÈêÙ1éÛ·oáÂ…ƒ jÛ¶mzzúoưå111†#ëׯWư5©‘““£z?Âjè±z¬† ¢Çjè)Y={ª₫ºưáèAQQÑ„ 4h0nܸß÷;ddd¨₫"üHdd¤êü«¡Çjè±,ˆ«¡çûƠpÿkƯư ‘M̀œ93''gÅ!!!ªgđ¶̃ÇÑ£;v¬X±bĈw̃y§êYüW233…ÉÉÉÉÉÉúă©©©©©©ÑÑÑŸ₫¹ê n¿ưö‡zHäÂ… iiiơêƠ‹­S§êÔ Ú·oïÚ¯G“––Öºuë×^{MơtÊđ3B8@­ßª>}úôéÓK=­E‹́ËÀGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p„5=«zÀœNƠ!„8vLơ„„£e8Âḩ,6FíÚfíè›1ÿçpˆví¼>;dˆ¨PAûbŒ ¼>;eˆŒ[¶(Y!7 ­ÀƠ@̃b¨Ô,9†·vôÍ€ÿÓ¾¶nơÜC†ˆ¥K…"8¸|ÛQ#'Çs;N™"¦OBˆÎiG@=ÂÑ fμ₫Ø=†ôG̃{¯ÇøđCÙ1¦M+Ç1₫óŸëƯÛQ?ưaå8@ÜÛÑU  _Œá̃®jÔtê¤n!Gk˜0Ák;ªqøđrcà@¯íh¨Æ—^*Ç1:tđÚ†j\´¨ÇüŸ₫çơíh¨Æ̣₫1Gưï¯oGC5úÉO[6G8Z„Çvôe5j<¶£/«Q㱩FÀ{;ú¸Ư?‹Öo¼F5~ˆp´“뾩F¡£¢"]}S÷vt¡=C;ú¾Ư?WNxûíJÆ`p´C;j|YC;j|YC;j¨FÀÇ2ó}®ùÉLV3a‚ñˆ«Q3p ñˆ«QÓ¡ƒñÈ«¯*đƒßđaÛ¶jƘ<ù†ÿđUëÀ3ÂÑj̀ogf óư{2ü\£đ¾GO¹2Ü #¼ïÑ@ÂÑRôôè£ûxŒ= ưaŒ‡º₫˜vôÜ«Qăăvt¯F íøÂÑ: wĂ|̣I)û;ú`ŒiÓDṛóư}0ưaâóÏKÙß°'÷{¨½íÑS®Üw̃ÉÊÊv}H;₫ƒp´÷P›Ügíƒ1\wĂ˜́ïèƒ1\wĂ˜́ïØ“·w|Ü̃ökô¶¿#…G+0ÙyÇ—íh²_£/ÛÑd¿F“=z»yùe³w|Ö6˜ị́M;₫†p´×k«ÇwôíX®[¸~s;ïèÛÑ7cxÜyGßló;›:UÜ{ïµÇ¥îƒóí·å5ƈqădÇ8ỷ׫À€p´§Ól¿F­}ĐIN§Ù~Z;úf “ưµv¤íÛŽ÷}/hO•÷7Ë́ÙbÜ8ơcA8Z‡ù~îû;–óưƯ÷w,'æ»|»ïïØÓöí¥œà›\›=Û/ÆP*ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p´g1{vÀѧٳăÇûhŒ»ï6{ö­·ÄÙ³>đgÇÍ`%>(Nœ0;ÁV«xdëp̀Êʉ‰ùî»ïÜŸ***Z²dÉĂ?|×]wuèĐaøđáß~û­êyÍ8"9Ùk; >úÈ/y‡HMơÚăNjٳ}4Æ̃½^Ûñ­·ÄsωڵiGØöÍḥ-Yê ṾàƒbƯ:qûí^ÛÑV«xcëpLIIñxüêƠ«C‡}ơƠWÏ=Û¦M›Æoß¾}ذaï¼óê‘=s½ylG­ g–ëÛQ«F_á±µjÔÔ®]c~îÍ7¯?öø-©?8z´êqËYf¦X·îÚcí¨_ ó74k³c8́ÚµkÚ´i~ø¡Ç>₫øă}ûöÅÅÅmÙ²ẽ¼yï¿ÿ₫êƠ«kÖ¬ùÎ;ïƠ¨ÑÚñ̃{¯}xûí7\º´ÆÔ°í‚DƯø_¾‡W lØĐ¦«á‡|¿î­»_!² ;̃#oûöí½zơJJJ _´hу>¨z¢Rî†Ñ˜́ïXN~Ă.ß+–߆»a4&û;¶Uêv<¶âñ 7Ùß°Âѳ˗/'%% 2äôéÓ£G^·n]Û¶mUU “{¨}Ù†wT1¹‡vô ÷P›́Ñc†{¨Möè́‰·ª=())7nÜÆ»wï>mÚ´ˆˆƠ•Îc5î³B”÷{Ö₫\†û¬ï¾›u¼î¼£¿ÏÚ>÷“yÜyÇpŸơñăBí{Ö€Z\qô %%eăÆ?₫ø;XƠè₫¸¼¯;ús5º?æº#à­Í÷·*oû5zÛß°'ÂÑÈét.[¶¬zơê'NT=‹,ó]¾ íX~̃{OơB!„Đß¿n¾{÷ªđî;ïÚÑVÜw̃1´cåʪGÔá­j£Ÿ₫ùĉ!!! îÏÆÇÇ4HơŒF®7a½½£Tê e"?_„…‰óçµÏâ7(eîr°v­xđA±nâƠüŸö½àm¿F×₫6ùNÑVĂÛ~®ưÏœđFP^G#mƒ¨¢¢¢¸?ë··È”úÊî›—₫ü|Ư÷ß/6lđÚå9ĐÚµ~±€ÿ3ÿ^3æZ>Ú„ùjÜs¸rEó×&́ÍÖßÓ§OŸnØ»Lˆ»ï¾[á.ŒVsÿư…Ư»Wùê+ăqOQ~jø&@ù:³`AdÆ"(Hơ àfqs ÊƠ€%B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8Z„Ă!›:ÁJcüéO~1C8Z«¼ÅP©'XiŒ?ưÍØ¡~ ¬‡p´‚'¸₫Ø=†ôG^x¡ǘ:UvŒÇ+Ç1|RvŒ¶mËq ¬‡p´‚Å‹½¶£¡_{­Çøûß½¶£¡W®,Ç1₫̣±`Aéc´m+¾ư¶ÇÀzG‹đؾ¬FÇvôe5j<¶#ƠÀM"­Ă亣oªQchǨ¨H×cßT£Æäº#ƠÀïC8Z¡5¾¬F¡5¾¬F¡5T#¿áh5‹ø¸5ÿ»ñˆ«Qó—¿Pün„£Ơ˜ßG̀lÁÀïF8Z¾Z¶ô|ÜÇc4irÅƸăe«€eÖa¸fÿ₫RöwôÁ=&Ö¯Ï1ßßÑc´m+ñz¯ D8Z„Ç{¨Mî³öÁ®»aLöwôÁ®»aLî³2G+0ÙyÇ—íh²_£/ÛÑdçÚ€›A8ZÓyíÇwôíè:³\Çđ¸ó¾}3†Çwôíxơj9€ơ«eĂéăÇ{ƯyGÛ£Ç}§̣cÀ¯;ïh{ô¸ïÔSc´kçuçmaĂDPP¹O€•Öa¾_£ªQc¾_£ªQc¾_£û₫ T¼U )„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8€}EF–r‚Ă¡zD7¯”*WV=" ­Ă1+++&&æ»ï¾óǿ'Ÿ|̉¿ÿØØØvíÚM4)??_ơ¼P–"#űcfi¨=e“vœ7OŒeöÅV®,.]²Ëj̃Ø:SRR¼=5gΜɓ'=zô{î©V­ÚªU«zê©¢¢"Ơ#@Ù˜2E;ví±Ç̉|àƠă–³̀L1j”ÙjhƠ¨©ZUơ¸€:v Ç‚‚‚]»vM›6íĂ?ôxBFFÆ‚ j×®½~ưú lذađàÁßÿứÙ³UÏeă•WÄÈ‘×?4Ô’₫Ăûï6¨·œEG‹e˼®†¾«T¿₫ªz\@;†c¯^½V®\éí„?₫¸¤¤d̀˜1Ú‘ÄÄÄĐĐĐuëÖ•””¨ÊFr²çv´[5j<·#Ơè«@¤¤¤K—. !–-[¶uëV÷vîÜY¡B…Î;»úØñ³Ï>Û³gOëÖ­UP6’“…ĐƯb¸̉fŸjÔ$$!Ä A×Wă–[¨Fàv ÇöíÛk6ṍ₫¬Óé«xÄGºuëV\\üÍ7߸8Î-[¶„……ÅÆÆªʆ·jô¶¿£µy«Foû;öD8zĐ¿ÿ *¼ưöÛÚÏ5 !,X››Û¯_¿+ªʘûÎ;†v´“w í¸h‘êYux«Úƒzơê?~æ̀™½{÷îĐ¡ĂñăÇ·mÛÖ¢E‹¿üå/ªG€2ăt ‡Ăë~®ưṃ欶̃öktíïø̃{bøpƠ³ê 6¬V­ZkÖ¬Y»vmƯºu 4f̀mG° ó(LN¾–6a¾ â¾ûÄw¨PÊÖá8}úôéÓ§{{¶W¯^½zơR=#À_P?ă)¶¾â€¬”±u«¸ë®ëGNŸÿ»ê±Ÿ"0x°‡ƒưû‹–-UOøoUPoû7¶j%P=à;„#̃å啲ëw«V"-Mơ”€x^ú9:ˆ¬,Ơƒ¾@8pÓ¢¢TOøá)„#¤B8pÓV¯V=à „#̃=ú¨Ôiññª|pÀ»O>Ng)ç”z`„#¥1ICªvB8 ¡N©FØL°ê?₫¨z@=®8@ á)„#¤Å1z´×gwï‡ê}»qq¥œ—§zJØáPI‹Â·ßöÜ»w‹Ö­¯ŸfyÚ—¹g×vÔN§¡áđ îíèªFͱcªGô!í¨¯çU["*éwBÔ·£¡³³E£FªgơíjÚQ_~(T=+l‰p(æ̃ÜbĂjt_ W;Rđ„#@=C;öî]Ïơ¡­ªÑ}5ö́QQ‘®©F¨E8ü‚ǽφƠ¨ñ¸T#”#₫b×®><ئƠ¨1´cd$ƠơG€_0Ü #„XºÔlGË3́@”]Ê₫€ơÜ«QămGËó¸o¥É₫€oÅÜw̃ÉÊÊv}hĂv4ÜC­_ Új•¼í×èmGËó¸óÉ₫€/èwù¶a;́×H;Âeôơăqç}-Í«zỤ̈wÿư×xÜyG¿»w«¶D8T̉bÈd¿FíûZφ â₫ûÍök´ƠjÀ« t'OܸqăÁƒCCC;uêÔ±cG÷s’’’JJJ¦L™¢zXÀoVjÙª“6l(å[­ü¿‡ăçŸ>eÊ”ÂÂBíĂeË–ué̉åÍ7߬\¹²₫´åË—åǯߪ>~üxbbbaaaçΧL™̣׿₫5""bóæÍÏ?ÿ¼êÑlǯ¯8&''_¹reäÈ‘cÆŒÑ<₫øăƒ̃´iÓgŸ}Ö«W/Ơ؈__qLOO yæ™g\GÂÂẪxăàààÙ³g_ºtIơ€6â×áx̣äɆ V¬XQ0::úñÇÿé§Ÿ–/_®z@ñëp¬Y³æ‰'®^½j8>jÔ¨5j̀›7///OơŒvá×áØ²eË¢¢¢•+W‡……%&&L™2¥¤¤Dơ˜¶à×á8lØ0!ÄôéÓÇ¿iÓ¦3gθêׯ_ûöí¿₫úëgyæĐ¡Cª'°>¿Ǹ¸¸1cÆ8ÔÔÔ‘#G.Z´Hÿܹ́sÛ´i³iÓ¦>}ú«Àâü:…#Gü׿₫5|øđ?ưéOµjỞ?U¥J•… ¾ổKÑÑÑư? €rà×û8j4i2aÂOU¬XqàÀüßÿ₫—““£zR+ó÷+’*W®Ü¸qcƠSX™EÂåp€ÂRGH! %¶ă18₫ü~üñÇzơêµk×.777<<\ơPÖHᘗ—7õ¼O?ư´¨¨H1dÈvíÚÅÇÇ·hÑâƠW_ S= €•̀[ƠW®\5jTJJJ5âăă]Ç#""6õ<`À­&€•:dö́Œªç³™€ ÇùóçïÛ·¯S§NëׯŸ¡ûc̣ñÇ÷éÓçØ±cK—.-ĂOwụ̀å… >̣È#±±±]»v}î¹ç233U¯öâpˆfͼ¶ăŒâoü«Ă¾0á¸cÇ   üăUªTÑ :uj•*U6lØPVŸ«¸¸xÈ!³gÏÎÏÏïĐ¡Cưúơ7lØĐ§OŸ;wª^́ÂU„ÛQ«FĂ™(oŒŒŒôxLµjƠ¢¢¢?^VŸë£>Ú³gÏŸÿüç/¿ụ̈­·̃JIIyÿư÷…“'OV½ ØÅ×ÚQ_B§Sơ¬¶0áú믿z{6??¿zơêeơ¹ö́Ù#„2dHp𵛇ڴiÓ¬Y³cÇ;wNơJ` -ZxnGªQ¡€ ÇæÍ›ÿøăßÿ½ûS>~F™̃‘ÿư÷ß:Tÿæø Aƒ&MTꯉ‰q?¸~ưzƠë§FNNÎ₫đƠSø VCƠĐc5 X=VC‘™Yéêëdeeû́³÷́ÙÓư`FF†êUQ ̃x}á…âââfΜ™••%„8uꔢV­ZcÇƠḯxó f̀˜ñ믿¶hÑ¢U«VyyyiiikÖ¬¹ï¾ûzôè!ó;Øó“7‘‘‘ªGđ#¬†«¡Çj° z¬ÆG\ºÙ´©>»û_ë/ÙA …£¢K—.]ºtÉÏÏÏÊʺ|ùrTTTíÚµËü³L˜0a÷îƯ‰‰‰O<ñ„väôéÓ x₫ùçSSS£¢¢T/6b¸FÓ¬™8xPø¬¡ ˜Ÿq̀ÉÉ9qâ„ö8,,,..®M›6åQgÏƯ¼ysăÆ]Ơ(„¨W¯̃¨Q£®\¹²zơjƠ+€ªqÆS®Ç&{ƒ£œL8>øàƒ=zôÈÍÍ-ïO”——'„hÔ¨‘á¸v¡ñçŸV½Ø…ûÎ;ÑÑ—MöwDy ˜pŒB>|¸¼?Q£F‚‚‚233 · i?ßиqcƠ+€-xÛ¯ÑÛ₫đ€ Ç)S¦„„„̀›7ïÿû_¹~¢;?~ü­·̃*))Ñfff&''WªT©K—.ªW[0ٯѽássLDDÄ믿>uêỖ½{÷îƯ»aÆî[*vîܹL>×ôéÓ}ôÑäääµk×6õNå&€ĂÑå¾ûîkܸñÉ“'O<©z˲B8 !"""„·Ưv›êA,Ë áXXXøĂ?„‡‡W­ZUơ,–07Çü÷¿ÿơxÔ·£¡¹zø§ózÚQ_Ó¦QP#`Âñ›o¾¹å–[’““kԨѵk×öíÛGFF¶mÛVơÊ+¯ü¿ÿ÷ÿ¢££U øíH5~˽“’¨Fø‹€¹9æÇlÔ¨‘¶­c­ZµÂÂÂ8 =Ơ¿ÿ°°°÷yË đ"1Q¼úêơªđkúïÊ+DTT¤ëCªjL8 !*T¸>mÆ ³³³µÇAAA111ßÿ½êÿehGªđO¿7©F(0áX§NcÇưúë¯Ú‡ 4صk—ëY‡Ă‘““£zFÀ¯%&¸¸P€?3|‡¶lI5B½€ ÇîƯ»½đ GB´nƯúĉiiiBˆÜÜÜƯ»wׯ__ơŒ€_6Ĺ̃}Ăvƒü™á;ôÀRöw| `n\±‚ëP)`®8 !ÂĂĂGŒáúpàÀ½zơÚ¿íÚµ£¢¢TOø);ï˜́ï@-÷w²³Íöw|)ÂQs₫üùüøăơêƠk×®]tttxx¸ê¡?e²_#íø!“ưiGøƒ€y«Z‘——7}úôÎ;>|̣äÉ[¶lBÄÇÇ?ưôÓùùùª§üÑâÅ×»w¡·=z(çqçưw1Ơ%&¯\¹2jÔ¨”””5jÄÇÇ»GDDl̃¼yÀ€EEEªgü‘ö7·«‰®vär#à´ïD“ưÍ¿£̣0á8₫ü}ûöuêÔiưúơ3f̀pÿøăûôéśر¥K—ªđSæÇ$&̣—àGœÎRökä L8îØ±#((èÿøG•*Uôǃ‚‚¦NZ¥J• 6¨ÀÊ&<éñ>˜jƠªEEE?~\ơŒV0áêú÷ƯåççW¯^]ơŒV0áØ¼yóüñûï¿wêàÁƒ§NjÖ¬™ê¬,`Âñ±Çs8ăÆKOO×OOO3fŒ¢oß¾ªg°²€Ù¼]»vO>ùäÂ… yäí߉ùꫯ¶nƯzôèÑ’’’øøøx@ơŒV0á(„xá…âââfΜ™••%„8uꔢV­ZcÇƠḯ€̣Há(„è̉¥K—.]̣óó³²²._¾U»vmƠCØ‚ÿ†ăåË—…•*Ur*,,,..Nơ€öâ¿7Ç´jƠªGª§À5₫ÅÇÇßwß}ª§°£ Ç .äçç«À,  á)„#¤B8@ á)₫û/Ç!Μ9«?RTT$„0tÙ»w¯ê‘,˯¯8:ÎÂ9N!D¡ªçŒfÍR=?IHP=` ăÆ©À·œN³gW¯V=ŸÍøïÇÏ?ÿ\ơÀMq8®=˜0Á́ó×DË çÏ‹‹Å¿₫Åjf̀¿Æo¼!̃xĂ.ß,Új””\EƠ[½Z<̣ˆ¼tøÿ†ctt´Úöïß?₫üôôô‹/ÆÄÄŒ=úOú“êUAÀp½ÆMœ(„§vtàpXÿ%O«F!DjªèÓÇC;Új5æß Z5œ`1®Ơ¨PÁC;ºªÑ&«á'üú­j…6mÚ4pàÀM›6EDDÄÆÆîƯ»wđàÁ›6mR=†₫%lâDă{Öú—¿™3UÏZ₫ôÿP¨Ö̃V£woƠ³J{ư±¡“ôƠ(́qíŸÿ¼₫¸B…¾d}5 !JJTÏj„£.\˜8qbpppJJÊG}´`Á‚+VTªTiÊ”)%üÙ„4oíh¨Food[Œ~5ôíh¨Food6ñúëÛцƠ(„ˆ÷ÜîƠèñl”ÂуU«V<ưôÓqqqÚ‘?₫ñ₫óŸsss÷ï߯z:C;ΟjÏjt_ÔTñÔSµ©FÀ{;&%ƯjĂjÔ¸·ă† U¨F…N[ư”3tèĐmÛ¶ưûßÿ®S§Îïøå111ª¿‘©z Å<¾¨Ù­]<®ƠÈw b¸ÄèbÏ¿´ —]V£mÿ®÷ß›c:pà@XXX:uvíÚµwï̃óçÏ7mÚ´{÷î!!!ªGC@r:/m¶­F«A5î^]alG{V£ø¿ë†väZ£„£ÑåË—ùå—Æ¿ổK+V¬poĐ Á›o¾Ù²eK™ß$&&Æpdưúơª¿25rrrTà'n¸vrîܹ́́ ªGRè†Ơ(,,̀Î>£z$ÅøN1`A„.Ü*D¨₫Hvv¶ê¡”9s¦µơG²³³}={öT½₫‚·ª̣̣̣Ú¶m+„ 4iRçÎÿ÷¿ÿ}úé§ï¼óN½zơ>ÿüóR¯;Úọ̈µG¼ß$x«úF¼Uíß),oUëñVµÿàæ£Ê•+kf̀˜Ñ·oß5kÖ©SçÙgŸÏÉÉùâ‹/Tˆ£Q›8ñœî±ÿ]ưjtï~ư_{rߣ°3C5~ư ¾9k¨ÆääëoPöèFU«V­\¹rHHH—.]ôÇ»wï.„8tèêH ÷PqÁ|Gk3ÜC½`Áo{ôvæ¾ó΋/3ÙßÑÚÜw̃éÙ³ĐdG”7Âуˆˆˆ+:nüÖỖ¡¾zơªêé0¼í¼cÏvô¶óíèyÛ¯ÑÛ₫Öæm¿Foû;ÂGºtéRPPpøđaưÁ={ö!6mªz:óư íhyaa×»ÿ8£¡;3ٯцíh²_£{;Â7Xiâăă…“'O>wîÚO¤í߿ѢE¡¡¡=zôP=ƒëßÛM0®́đÊùù¢fM!¼ßc«ƠL˜/èÛÑß,®¯ÑăM0úv´Ăjø ¶ăñ Y³fcÇ}ă7zö́ÙºuëÂÂÂ;w:¤¤¤Ûn»MơtN§˜5Ë́Öi[½̉åç‹„±|9«”Âü{AÛßQû_;p:=l₫ꢵc|¼ê)í„pôlĈáááK—.ƯºukXXX·nƯF­z.{n¸ăI5gŸjÔ˜¿)O5úáèU¿~ưúơë§z ÁÏ8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¬Éá0{¶Oñ䓪Gô!óƠ˜5«”Đ«({Z9ÂéôđlŸ>"5ơÚă÷̃S=«êƠ˜5KLœhv.\q„ƠDG_́~!M_‹©µü j¶®j@á«É̀_ÿP_KújÂØ–,C†x^ C5Úa57‰p„ylGV£Æc;R€ßŸq„5efèhqäȵ ï̉Ú­“–,Bˆ>`57…+°,ĂuG{v’ả‹=Wđû°²̀LQµê ǴÜIK–ˆ¸¸Øy5¿á+ëÓGüúë Ǵ¼aá¬Yb÷îØy5¿áË2Ü ăbÏẒ¶ó=Wđû°&÷{¨½íÑcî÷P{Û£„#,ÈăÎ;&û;Z›ÇwLöwÀÂVc²_£ ÛÑd¿FÚđ[°—_¾₫Øư®a};Ö¬©zỌ̈7a‚ÙjxÛ£GXÍw}û„đ¾×ŒÖ5kü|Ơ³ú„¶̃VĂƠlÍ(á ºóÎR2(3Ó.Ơ¨1_%K¨F€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …pÊQjªê (;„#P^ѧY;:ÂáP=%̉Ç̉>}:..nüøñªA q¡·vt@;áX §Ó9qâÄ‹/ªæ̣åëƯÛQ‹O<¡zVä¥X²dÉ;TOÀS±¢×v4TăâŪg@áh&33sΜ9M›6U=’{;~ơUª¸G¯®^½:a„°°°ÄÄDƠ³ PÚñ©§j»S€€¬zÿ5wî܃.^¼¸FªgAÓÚ±R¥R€@D8z¶oß¾… 4¨mÛ¶ééé¿ơ—ÇÄĬ_¿^ơפFNNêüD¤₫ƒ6mÎdgªI1₫lè±,ˆ«¡§d5zö́©úëö„£EEE&LhĐ Á¸qă~ßï‘‘¡ú‹đ#‘‘‘7ÿ›4÷ wzªö¿₫%z÷V=™jüÙĐc5 X=VCÏ÷«á₫׺û"›àg=˜9sfNNάY³BBBTÏŸ¸t©ü~o}5öëw}_'ó½ÁđC„£Ñ;V¬X1bĈ;ï¼Sơ,đ ‡CT®|í_qqư_Ùữ.OƒÇwôíH5oUåÅé4Û¯QkGª@G ™ị̈]±¢êùø-x«ºt-Z´`_F®8@ á˜̉°«jƠ¤Nsí€í°«_~û÷—r÷< C8ÂÆZ¶4kGª€°·–-EOßT#nضW\¬zW …p€ÂRGH! …p€ÂRGH! …p€ÂRG‹(.}ú˜Đ®ê}«V-³gÇÿú—ê4„£‹à`‘êµÛµ[· ‡Cơ ¾âpˆÜ\¯í8~¼˜=[ôíK;đÛV|íÇvÔªQc‡vt}ÛQ«FMß¾ªg  Vàt^lhG}5δ*ư×hhG}5Úd5(C„£ExlGV£ûWêjGª€›|ó¿ü„Óyư]ÚÔTqÛmâܹµưjäæ*UDQ‘}W€2ÁGKÑ÷«Ñư«¦¸y„£Ơ¸W‘;‰Ơ  Vă¾_£ù₫Ö6~¼ñˆù₫Àáh)†»a4&û;Z›ánÉ₫Àáh&÷PÛ°Mø}G‹đX¶mGƠH;p“G+0¹ÖhĂv4¹ÖH;p3G+øá‡ëÍï#₫é'Ơ³–¿ĐPÙƠÈÍU=+…p´‚ü|Q³¦̃÷Ñß{¯Ø¾]ơ¬åọdñÊ+¥¯†`k~#ÂÑ"̣óKÉ §ÓƠ¨™<¹ôƠ ø­GH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRG”%‡C87uđ[ÁªđSEEE}ôѧŸ~““S½zơ&M 6¬]»vªç̣k®"t8„Óù{N₫Œ+\½zuèĐ¡¯¾úêÙ³gÛ´iÓ¸qăíÛ·6́w̃Q=_›?ÿúc÷Ëú#cǪüv\qôàă?̃·o_\\Ü¢E‹BBB„™™™ƒ zçwºvíÚ¬Y3Ơú©§Bˆ#®}¨¿¬h¨Æ×_W=+øí¸âèÁúơë…/¾ø¢VBˆèèè§Ÿ~º¸¸øÛo¿U=_{ê)שF¬pô ;;»jƠª-Z´ĐŒBœqâDHHHBB‚û³ñññƒ R=£ÿr:Ÿq^÷kÔ®;jÿ áh¤mUTTtàÀ÷g¹E¦Tæ»|S.ÂÑèî»ïfFwüŒ#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8@ á)„#¤B8ZÇĉfÏ®z>ßêĐÁ́ÙE‹TÏ@"-Âá³fymÇáĂÅâÅÂáP=¥W#-Ík;.Z$|̉F«@Y!­ÀƠ@ÛQ«FĂ™æú=¶£VöY ÊáhNçơdžvÔW£áL«̉†vÔW£MV€2D8Z„Çv´a5º¥®v¤¸IÁª@™q:oxÏzƯ:±ÿ ÏÚ~5̉̉D“&"3Ó¾«@™à£¥è{ÈÎƠè₫USÜ<ÂÑjÜ«ÈÎÄjP†G«q߯Ñ|Gks߯Ñ|G`‚p´ĂƯ0“ư­Íp7ŒÆdG`p´“{¨mØ&÷PÓü>„£Ex¬FÛ¶£Çj¤¸I„£˜\k´a;\k¤¸„£˜ị̈mhGË›7Ov5̉̉TÏ @@!­ÀC̃ö)ơ+ÙµKÄű”=₫å‹(µlI»v•r‚­V€²ÂGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH! …p€ÂRGH!½úä“Oú÷ïÛ®]»I“&åçç«( ớÙSơ~„ƠĐc5ôX DƠĐc5Ô"=›3gÎäÉ“=zÏ=÷T«VmƠªUO=ơTQQ‘ê¹”!=ÈÈÈX°`Aíڵׯ_¿`Á‚ 6 <øû￟={¶êÑ”!=øøăKJJÆŒ¡ILL ]·n]II‰êéÔ =عsg… :wî́:Ô±cǼ¼¼={ö¨@ ÂÑÈét9räÖ[o½ơÖ[ơÇ›4i"„8ỵ¤êÔV=€ß),,,..®Y³¦áxhh¨âܹs2¿ILLŒê¯Ă°z¬†«¡Çj° z¬†«¡áh¤Ư:]µjUĂñjƠª !.\¸Pêï‘‘¡ú‹({¼UmT³fM‡ĂQXXh8~ñâEñ×lˆp4  u¿²XPP „pƯg `7„£µk×ÎËËÓJÑ%;;[{JơtjtëÖ­¸¸ø›o¾qq:[¶l ‹U=€„£ưû÷¯P¡ÂÛo¿­ư\£bÁ‚¹¹¹ưúơ«X±¢êéÔp8NƠ3ø£Å‹Ïœ9³~ưú:t8~üø¶mÛ7o¾xñb÷mzl‚pôê³Ï>[³fÍ÷ß_·nƯ{ï½ẁ˜1Ú<öD8@ ?ă)„#¤B8@ á)„#¤B8–™O>ù¤ÿ₫±±±íÚµ›4iR~~¾ê‰”)**Z²dÉĂ?|×]wuèĐaøđáß~û­ê¡üÂéÓ§ăââÆ¯z•öïßÿ́³Ïvé̉å{î4hĐöíÛUO¤̀åË—.\øÈ#ÄÆÆvíÚơ¹çË̀̀T=”YYY111ß}÷Çgíö̉j²6|i5ÿ³áÂK«/ecΜ9“'O>zôè=÷ÜS­ZµU«V=ơÔSEEEªçRàêƠ«C‡}ơƠWÏ=Û¦M›Æoß¾}ذaï¼óêÑs:'Ntưèö´iÓ¦nÚ´)"""66vï̃½ƒ̃´i“ê¹(..2dÈ́Ù³óóó;tèP¿~ư 6ôéÓgçΪGóµ””oOÙđ¥ƠÛjØó¥Ơäφ /­¾æÄM;tèPÓ¦M;tèpæ̀íÈôéÓ›4ị̣Ë/«MåË—7ỉdàÀ………ڑÇß{ï½Í5ûá‡TO§̉âÅ‹›4ỉ¤I“^xAơ,jœ?¾uëÖw̃yç®]»´#ß}÷]Ë–-Û¶m[\\¬z:_Ó¾S{î¹+W®hG¶nƯÚ¬Y³ûï¿_ơh>ráÂ…;wN:Uû¾Ø·oŸá[½´–º¶zi-u5ôxiơ1®8–?₫¸¤¤d̀˜1Ú‘ÄÄÄĐĐĐuëÖ•””¨Î×Ö¯_/„xñÅCBB´#ÑÑÑO?ưtqq±åßU1‘™™9gΜ¦M›ªD¥U«V<ưôÓqqqÚ‘?₫ñ₫óŸsss÷ï߯z:_Û³gbÈ!ÁÁÁÚ‘6mÚ4kÖ́رcçÎS=/ôêƠ+!!aåÊ•̃N°ƠKk©«a«—ÖRWĂ…—Vß#ËÀÎ;+T¨Đ¹sgב   ;æååi7ØJvvvƠªU[´h¡?-„8ỵ¤êéÔ¸zơê„ ÂÂÂUÏ¢̉₫ó‡ĂÑ·o_ưÁY³feddÜy窧óµºuë !ôèt:ÏŸ?_¡BWJZ[RRRrrrrrrÛ¶m=`«—ÖRWĂV/­¥®††—V%lṇ̃T®œNç‘#Gn½ơÖ[o½U¼I“&Bˆ“'O¶nƯZơŒ>5₫|÷¿ö̉ÓÓ… 4P=sçÎ=xđàâÅ‹kÔ¨¡z•8V§N]»víƯ»÷üùóM›6í̃½»ë ­<üđĂK—.MJJªR¥Ê]wƯ•ŸŸŸœœœ““óØcÙäÏIûöíµ›7ovÖn/­æ«!lö̉ZêjhxiU‚p¼Y………ÅÅÅ5kÖ4 7^N°‰æÍ›lÛ¶mÁ‚·Ür‹áR“ḾÛ·oáÂ…ƒ jÛ¶­ö*oO—/_₫å—_7nü̉K/­X±Âu¼Aƒo¾ùfË–-Uèk111)))C‡:t¨ëà Aƒ&M¤z4¿ÀK«/­¼´ªÂ[Ơ7K»¿¯jƠª†ăƠªUB\¸pAơ€*/]ºôÉ'Ÿ,,,œ1cFxx¸ê‰|­¨¨h„ 47nœêYûå—_„GY»ví̀™3·oß¾eË–Ñ£GŸ:uê¹ç³ö}²̀˜1ă×_mѢŀzôè²fÍ{̃cî—V¼´̣̉ªWoVÍ5Gaa¡á¸¶5€öÇö´}ûö¿ÿưïG­[·î?₫ñóU±ª™3gæää¬X±ÂïÆêU®\Y{0cÆŒ®]»jŸ}öÙÓ§O¯Zµê‹/¾xôÑGUÏèS&Lؽ{wbbâO<¡9}úô€₫ùÔÔÔ¨¨(Ơ*ÆK«7¼´ ^Z•âăÍ  uÿÏß‚‚!„ëf@[¹|ùrRR̉!CNŸ>=zôèuëÖÙó¥mÇ+V¬1b„ ïüpWµjƠÊ•+‡„„té̉E¼{÷îBˆC‡©ЧÎ=»y󿯻ªQQ¯^½Q£F]¹reơêƠªT—Vw¼´jxiU‹+e víÚG)((Đÿ|nvv¶ö”êé|­¤¤dܸq7ń̃½û´iÓ́ùú®Ñ₫í̃@ưñÔÔÔÔÔÔèèèÏ?ÿ\ơŒ>q₫üy‡Ă¡?¨]0¸zơªêé|*//OѨQ#ĂqíBăÏ?ÿ¬z@¿ÀK«/­.¼´ªE8–nƯºedd|óÍ7=ôvÄétnÙ²%,,,66Vơt¾–’’²qăÆÇ|Ú´iªgQ́öÛowư‘Đ\¸p!--­^½z±±±uêÔQ= ¯ué̉åƒ>8|ø°vc¬FÛWÅnÛ°5jÔ((((33ÓétêK:##CѸqcƠú^Zơxiuá¥U-± ôïßÿƯwß}ûí·;uê¤ưàö‚ rssŸ|̣É+ªÎ§œNç²e˪W¯>qâDƠ³¨×¾}{צôôô´´´Ö­[¿öÚkª§S >>₫ƒ>˜̉±cÇÍ›7¿ơÖ[£G®P¡‚"33399¹R¥J†wóm‹—V^ZơxiU‹p,ơêƠ?~ǜ™3{÷îƯ¡C‡ăÇoÛ¶­E‹ùË_Tæk?ÿüó‰'BBBÜŸ4hê¡L³fÍÆûÆoốÙ³uëÖ………;wît8III·Ưv›êé|múôé>úhrṛÚµk›7o——·{÷î’’’É“'ßqǪ§ó ¼´ºđ̉ ÿA8–aÆƠªUkÍ5k×®­[·î AƒÆŒ£ư'²­äää!8à₫¬=z#FŒ_ºtéÖ­[Ăºuë6zôhí_¿°›đđđµk×¾ûî»iiiÿ₫÷¿ĂÂÂ:uê4räÈV­Z©Íđ̉ªá¥₫Ăát:UÏ€Àv<B8@ á)„#¤B8@ á)„#¤B8@ á)Áª€ß#33óá‡6?gÿ₫ư•*UR=)Xá €9Úµkû́Ó¥¥¥wêÔIơ×}ÍË/¿üÙgŸíܹSơ ́‚pÀBBB¶lÙâ³O÷ /üđĂª¿n!„8sæ̀gŸ}¦z öB8@ ¹té̉ñăÇwíÚơ₫ûïÔ¨QCơDl„p€@2~üø 6¨€MláÛo¿ưè£~øá‡ .4kÖ́̃{ï1bDÅ]'äææ.]ºô«¯¾úé§Ÿ„uëÖíĐ¡ĂO<¡ư å¬Y³-Z¤S¥J•½{÷?>55uÉ’%mÚ´Ñ®æÍ›×¨QcÛ¶mBíœÍ›7Ÿ={ö•W^É̀̀\»ví₫đÉ©ÜơíÛ÷®»îB½ơÖ[ª×€½¬oö́Ùï½÷Óé¬[·nDDÄ®]»¶oß₫Í7ß$''ßvÛmBˆÜÜÜ„„„cÇ…„„4jÔ¨¤¤äرcï¿ÿ₫ÆW­ZÖºuë«W¯®\¹̣̣å˃6o;w7n\QQ‘¢¤¤Dr*ºvíª=8₫<áÀÇG¬¨¨ÈRz¡¡¡«W¯Öõ¼yáÂ… 6|ươ×ÿøÇ? !rss'M´eË–yóæMÚµk×®]»¦¦¦^½zủ¤I¿uΩS§¶jƠjäÈ‘M4 —œ ü €`N§ó”'?₫ø£ëœ™3g !̃|óM­Ï„áááo¾ùfíÚµ?ưôÓóçÏ !®^½Ú¥K—^xA«F!D5zơê%„8~üøÍÏYµjƠ… ¶mÛV«FÉ©ÀßpÅ@Ó~ÖĐä„üüǘ́́¨¨¨-Z~aÛ¶mW¯^}àÀöíÛ?ó̀3†_øóÏ?ñÅe5gï̃½+W®ü[§R¸°àáÀʲ²²´ÿ‰‰ñx‚ëÚä©S§₫óŸÿ́ÚµëäÉ“'NœÈÏÏ/Ă16løû¦¿B8°²Ë—/ !êׯ߽{w'Ô«WO±bÅéÓ§_½zµaÆ­[·î̃½{Ë–-³³³_~ùåßú‹‹‹N§á a·EÉ©À߬,**JQ¥J“;Z.^¼øÊ+¯TªTi₫üùú7ˆµ}y~«Ó§O»î›¾™©Àqs +«]»v­Zµ=®?^\\ܯ_¿:äææîß¿¿¸¸øî»ï6üXá¡C‡d>…áMí/¿ü²L¦R½ràáÀâÆ[RR2v́؃jG.^¼ø·¿ưíÀ-Z´×¶ø>tè+׋‹W®\¹lÙ2!„¶ù¢KIIIaa¡öXûÉÅ””בmÛ¶Í›7¯L¦R½làoU°¸øøø;v¬^½ºoß¾ơë× ËÊÊ*,,lԨѫ¯¾*„ˆêÖ­Û×_Ư£G¸¸8§Ó™‘‘‘ŸŸŸ°té̉₫óŸ¿ụ̈‹¶{NÍ5óóóذaĂ¹sçöíÛ÷ƒ>سgO·nƯ7o~ö́Ù#G„††Ö©Sç̉¥K79ø!®8°8‡Ă1cÆŒ·̃z«k×®Ú? 9v́Ø5kÖ„……iç¼₫úëưë_ëƠ«·k×®3gÎt́ØqÍ5/¾øbBBBPPĐÎ;µÓ6lxôèÑÇ !4hđá‡vï̃½B… iii‡®_¿₫Â… e®ÊL₫Æá~÷à·úơ×_ọ̣́4hàp8TÏå…p€̃ª€ÂRGH! …p€ÂRGH! …p€”ÿ~p̉÷VmIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/octave-logo.svg000066400000000000000000000075711463010412100226560ustar00rootroot00000000000000 image/svg+xml fuzzy-logic-toolkit-0.6.0/docs/assets/pimf_101.png000066400000000000000000001313051463010412100217310ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwXÇđ÷ ‚4AÄ̃± hŒ%ÑXر÷^b¢ÆK¬$&ÖØS~1*ÑhṔ]cAc‰P¦”ûưqº;R¯́î́Ư}?O<ïííÍ̀‡¾̀î̀h´Z-ädžwÀ< 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½ q½ q½ q½ q½ q½ q½ q½ q½ q½ q½ q½Øñn€̣ơơåƯWDDï&p€ÄQÖùe’¯¯/ºTBèOÉ¡K%‡.•úSrV;H„[Ơ $ $ $ $ $`öïßÏ» ư)9t©äĐ¥̉B‚T8€^8€^8€^8€^8€^8€^8€^8€^́x7$ăëëË» f)""‚ẁG‹‚ÿ …߸ô‡[Ơ $ $ $ $ $ $ $ $ $ $̣÷÷×h4¦S§N¼Ûb±†ªëä2eÊđn‹EAâ ´ªU«ñ¼ỳ˜1·nỬä"00Pwr||ü!CÊ–-ëèèØ¬Y³“'OæQ̣7ºuëVºti—wß}÷×_eß5¨(A³fÍfÍ•å`̃EIX‘ --­aÆ5̉§¢~ưúm̃¼¹aÆ2₫)Z%;̃ °:={ö$¢Çey7%%e÷îƯ*T ¢„„„ºuë̃½{·k×®îîî»víjÓ¦ÍáÇưưư³{óæÍzơêÙØØ999ưïÿëÔ©ÓÚµk dhQ‚ .;v¬eË–́Á¼‹’°"ÖôéÓO:Åæ‚yTT¿~ưúơëïÙ³ç₫ưû¼ÿ´-‹¤æăăĂ» –&::w, úSrêéR³₫û'=====]™º^¾|™‘‘ÁëJk×®Ç &Lđ̣̣‰‰Ñjµ3f̀ ¢ơë×ë̃ºuë–‹‹K```́Ó§F£¹té’îejjªO±bÅt/ **---44tÆŒD4sæLöƯ¼‹’°"ÁŸ₫©Ñh́́́6l¨g3´Zm÷îƯK—.?8fư³f $̉³Ú/“|Ôó¯²e@JN=]jÿ”/_~̀˜1ß~û­£££MơêƠ'Oụ̈åKá„o¾ù¦FEquu­_¿₫æÍ›³|ö̀™35kÖ¬Y³¦>ç5j„ … *P €nD*--mÊ”)UªT)Z´h@@ÀƠ«Wu''''Ï=»J•*öööeË–0`ÀÇ%¹ä¼ÇcÇÙÚÚîÛ·O÷̉×××ËË+33S8!88ØÆÆæÁƒÙ?[¿~ưR¥J±GtcOŸ>5´¨G±ĂLỴ¹¼‹’°"áOOÏ–/_M󭉣äđŒ#€uøï?ÿåiçÎ#GlÖ¬ÙäÉ“=<<,XĐªU+­VKD3gÎ7nœ‡‡ÇäÉ“‡úâÅ‹   ßÿ]ǿ½{÷Z·nưâÅ Ừ|Ïß¼yó† >û́³Y³fEGGwíÚµyóæ‡ưôSƯ™ÁÁÁ_|ñE™2eÆçïï¿~ưú;Êư§”Ú·oß^½zµiÓ†ˆñ¼¨Ñh„sZ´h‘™™™ăSƒï¼óΣGnß¾­{™‘‘qæ̀™̉¥K»»»Z”§§§.Q¸qăF–·̣.JÂt´Zmï̃½]]]—.]ª3ä₫“²ZxÆÀ:”.ͳv­67ÿûï¿yóæM:U÷r̉¤I .ܾ}{÷îƯ7mÚäăăjgg§{ËƯƯ}ÿ₫ưíÛ·×¼{÷îY³fMŸ>ƯÆÆ†ˆ̣=?11ñ̉¥KUªT!";;»I“&%%%9s¦@Dtụ̀åđđđ/^ØØØlß¾½OŸ>?₫ø£îƒÁÁÁ¿ưöÛǽ¼¼äë§eË–Ư¿ö́Ùº—?Öjµ́9Å‹'¢§OŸfÿø„ ₫øăfÍ <ØÉÉi×®]W¯^Ư°aƒEå!ï¢$¬HgáÂ…aaa'O,R¤ˆ₫ÍúO^C✹»»?^x9cÆŒƠ«WïØ±£{÷î§OŸ.\¸°. $¢ØØX"JNNNọ̣̈²F"Ê÷üúơëë²F"̉M[îÑ£‡.k$¢–-[†‡‡''';99i4cÇƯ¹s§\¹rDôư÷ßÿư÷ÙŸ₫Çävi}ô‘₫ưóƠW_3¦ô›,_×r'''ö4gggá̉²(_¾|ï̃½çÎûùçŸë¼÷̃{ºé&†•‡¼‹’°"":}úôôéÓ.\X»vmƒahE '$À™ŸŸ_Á‚…—¾¾¾·nƯ""WW×ăÇ8pàÆ‘‘‘W¯^MOOg?ëëë+dúœïîî.ĺ|1û"²··_ºtéøñă+T¨àçç׸qă6mÚ|đÁl;u’’’̣¸…­Ís¨5‹ ¤¦¦N˜0!Kk_¼xÁ–@DnnnÙKèƯ»÷öíÛ-ZÔ³gÏ"E„…… >¼Q£F§OŸ6´¨<ä]”„%$$ôèÑ£U«V£F2´UúCâ`̀ê©/;;»¤¤¤—/_vîÜyï̃½ơêƠ{ÿư÷;tèШQ£w̃y‡=ÓÅÅEˆơ9_Çï̉¥Ë={>¼wï̃__ß°°°,÷F Ês“úĂ?tîÜ™Mz<==mll²Üx‰‰!¢R¥Je)áŸ₫ùé§ŸFŒ! ß¶oß¾@mÛ¶ưî»ïƯQyË»Uµ9ok×®îØ±ă×_­;Ÿ‘‘±`Á‚²eËvëÖMª@HóƯ¶mÛ;vÔªU‹w[LĐ ïäêÚµkiiiÂh_JJÊơë×ÂĂĂ÷îƯ»té̉Ñ£G 'gAdz~bcc£¢¢|||‚ƒƒƒƒƒ333W­Z5räÈ5kÖè–€aË—äVơ;âââ À´³³«V­ÚÑ£GÙƒGÑh4~~~YJˆ‹‹#¢J•*±u/ccc **oy%aE¯^½"¢o¾ù†=ǿÙ³)S¦ôèÑCª@˜UM›6ñn€…{úôé’%K„—sæ̀IHHèÔ©“néæªU« oíÚµ+)))·>CÏÏCDDDÆ /^¬{icc@̀½lîVunô¯ñ§Ÿ~rvvv‹ 8đßÿƯ³gîå“'OvíÚƠªU+Ựà¬:uêØÛÛoÙ²ååË—ÂÁuëÖÑ»ï¾kPQùÊ»(©*ú́³Ï²¬#,Çsøđai¯ô„Çœé&ùÿ₫ûïÛ¶măƯ çååơùçŸ?~¼V­Z'Nœ8pà@£Fz÷î}ÿ₫}‡ö́Ù³T©R'Nœ8t臇Gxxø¾}ûÚ¶m›¥œÀÀ@ƒÎÏCƯºu«W¯>₫üèèèêƠ«GDD́Û·ÏÍÍ­GYΔäVuJJJXXXË–-Ùç5uúöíûĂ?ốÙsøđá...ëׯONNÎq_>‡U«Vơë×ÏÏϯsçÎ… >räHXXXçÎuŸú•¯¼‹’°"SrÀˆcÎÚ·oß³gOd hĐ Á?¾lÙ²{÷îM˜0áđáĂ666eË–Ư»woé̉¥¿ưöÛ%K–ØÛÛ_¾|ù«¯¾JHHX¶lYör =? Ü·o_Ÿ>}?₫å—_₫ư÷ß­Zµ:v́˜LCYaaa©©©Í5Ë₫–““SXXØ'Ÿ|²k×®… V®\9,,,·-˜ûöíîăă³eË–eË–¥¤¤¬Y³fÇF•·¼‹’°"SrĐḤH¯å × ơõ¼ùøñă=ăèëëÁû ,ÊíÛ·¹ßwxJOă(ˆnÓí TA÷ÿ$Jr "zBOSñ£÷o—N«p6övƯb̉R &¢› |œJè8S×ÁëEjRÑÂDtăñ¿U<ËŸ½­néjºÿ§¦½*\  ]}åçU™}ëUzZA»DtéAD­’¾́[¶¶¶DtáÁuÿ’UÙ·„ö³ÿ~P³ *”‘™ikcóºm±·ë«péÙƯZ®e‰(-3ç’-{±ÿÑ¥¨¥QZ*pƒn4¢F…¨39óư£Q5|EùñïŸ *Ô®]û—_~áƯåøûû»¸¸èn¶‚¬zôè~ï̃½¼O3âÇÖ$[Ơ9k̉¤‰.À6hH£ï©º•×r̀*ä₫ rk› -ü˜>₫€>èM½y_ȉ£,|}}³Ù¿?ïF™1ƯïÊ»Xèbç’y_½ÙØA;vĐ>Ô§ÆË[m-’YÄô2ͯ¯(˜¯'Olß¾½T©RÂ8Hë́Ù³·nƯºsçç û4æH·$G™Xç𵬔¿X™*ߢ[¼¯Û,])t¥z¹êD´’V£a¼›£•ܪ6GmÛ¶-_¾<ïV(íÚµkƯ»wïØ±#G™¬[·nÍ5DTZ¿Í6ó₫Î₫Ïzö"+Ä ûi–¬ñCú°u«Cu¢(ª2UÖư?‘Vw$"̣|L=ë5íăʧb£«œ–âTÀˆnÄ?¨â\̣Ô„ ¢bOU.Ö *6qá|ÇBEˆèÚÓèjO=ø§AÉêºÿ'¿J-R°0]~YÓÓ›}+-#½€­]xáïå˾•I™6dCDç^Ç«*û–Đ~ö`ø¥°&§ỏ•+6ÛL­®U§}Ö r½‹Ï₫­íZ₫ùsz—qü¨mØQq§ß\nÙ»t·,QÁWKœñ¿söd¿ÖÅQÜ:“c7§áĂix,źvq€\­Zµw”váẪM°|«W¯^½z5ïVX LÉÇôéÓwî܉É1|)?ó€}®qMZđö3‰yoÛFŸ|’G‰̀ƒ’¼èÄ₫́Ù“~ú)߆edP@…‡g=₫ô)1[µÑI:9¦¦ îLwÓn¾W-+L0k˜£?,Ç›5₫@?ä–5>y"fDyfqqbü̃{¼¯±e MŸÎ\yÎÓ€lméèQ̉j©uë·{x»×WCjxˆiI»Ÿ²>Ñû3ư¬!nZ:˜/$oñ%ñ±•nÔ­ơËíLv»Ú#G̣,t̃<16÷%¾mölª][|Ù¾}çîߟuP²xq:p ëi­©µ–´·)ë“æÅ¨ØtN`¶8ˆîѽ›tSx¹ƒvèùÁ¦Mó|ûÍ®eDDÙöă}ÜêÍÎ]yĐj©LñåûïÓÅ‹9œVÊkI»ö±ç̉\<ï`¾8ˆÊRY!>M§ó8sáB1;—w»MÇîÉ^°`¾§ß½Kß~+¾ô÷§»ws>³ µÑ’ÖŸü…#Ïè™Kc€ qxí#úHˆÈ©ƠËăäI“Ä8Ÿ›Ï‰q»v¼¯2AAbœ–Fźô:b}÷ø²\9Îơäót₫/ú‹=‚ÜÀ!q̀Çœ9s"""ôŸR æëô?!§xÉÊưă18÷Uæç2s¦>Ÿ¦ĐPñe¥JyÜ‚Zhé­$‘;˜$DD¿̉¯B\Œå}̣Æbô₫ûôñÇâKM~© –´EHÜQ¹#€yAâ@DÔ‰: ñz’÷ÉĂ˜ÍP؇sÆ&*wù²ûûëù¡íÛ©qcñ¥½}>ç'Q;W¹#€Aâ@Y6‰±Éïç")É̉¯^å}}z«VMŒ_¾Ôÿsljqj*͘‘Ïù?ĐĐÂK俉#U¥ªB|̣Ù Œ½…ëí­Gé÷îñ¾>ClÛ&Ǽ¶0ùa×wụ̈Kzñ"Ÿó÷ĐÅ$®R„ܬ¿¿¿F£Ñh4:u2½4ÈÑĐ¡Cu\†]? L†Ä€̉(MˆkSí¼Of—¡ùơW̃M—»Nl¬Ae'Ê89å₫87›f /‘;‚U©ZµêæÍ›ÇŒCDiiivvv·yxx'ÇÇÇ2¤lÙ²Í5;ỵdẽºuK“‹ÀÀ@}*ÊM³fÍfe[l!VIU‘)WÔ¯_¿Í›77lØ÷µ¥±ăƯÎ&‘¸²Îpïù«W‹1{k×r´mKû̃¬ÚưĂÔ¿¿Ÿ{ÿ}jƠJÜH¦eKúë¯|>2¦Ÿ¡3Â|v i²̀¼°T={öÔÅ·oßÎÈÈhܸqÅ…uABBBƯºuï̃½ÛµkWww÷]»vµiÓæđáĂ₫ÙDvtt b—Ö""¢”””Ư»wëöRÏ»¢Ü\¸páØ±c-[¶dæƯ*©*2åêׯ_¿~ư={öÜ¿_¹?Wk ©ùøøđn‚¥‰–¯p̉’đŸ^ç3Đ¯‚7g—(¡Dgé!ÿ₫4ø"s₫hd¤^© ­ |ÈWëË»{Œ!ëWÔ fư÷Ozzzzzº2u½|ù2##ƒ×•Ö®]; @xùÇÑÁƒs{ö́ÙZµj îæ}₫èÑ£'NœèääT¸pá üñÇéééS§N­Zµª““S``àµ7+!¤¤¤̀™3§jƠªE)W®\ppđ#v=éDEEQåÊ•s|wÛ¶m^^^½{÷Ö½¬X±b×®]ĂÂÂ>|˜oÉÇ_²dÉ?üP¬X±|+Ê"66¶uëÖ³fÍzÊ.̣ª_«$¬HÂ+I q«Ö•º ñnÚïù́}êQ£ ¬̀ŒÇ+Äxă>Z³æ[)u¶»L9cïP/¦Å‡èï.EíܹsäÈ‘Í5›ûlÖ¬YÑÑÑ]»vm̃¼ù¡C‡Ü«W¯°°°O?ưTwfppđ_|Q¦L™qăÆùûû¯_¿¾£Ç̃AηURUdúáVµä0âÖë,â@ Ôç#úm§Â`q4£G"̣̣ăÄDC?"ÆEèơ7r›EâlJL²¶*îîîăÇ^Θ1ĂÑÑqÇDtúôéóçÏÛÙ½ÊKDÉÉÉÂÉ^^^Ó§O·±yưÏY¾çׯ_¿J•*ºX73·G ĐÑÍ̀HNN¶±±Ñh4Ç»sçî­ï¿ÿ₫éÓ§^́¥§§ÿ–;}.?***33sÖ¬Y›ß́À7Ømcüüx_±!fÍ¢Aƒ^Ç#FĐúơ}zà@ñÓ))4>M™’ÿ§¾ /ÖÓúÛt[÷²µÀ=k+áççW°`A᥃ƒƒ¯¯ï­[·ˆÈƠƠơøñă¸qăFddäƠ«WÓÓÓÙÏúúú Y£>ç»3 ”ệǺGˆÈ̃̃~é̉¥ăǯP¡‚ŸŸ_ăÆÛ´ióÁ°íÔIJJÊă¶–]ă4ÿưwáÂ…ƯÜÜt/û÷ïŸ:|øpƯTe"zñöʨ D$œŸ£ ¤¦¦Nx{SÔ<*0`€₫^ºË£URU¤Ø₫8‚ơ:M§…¸å?ø¿ÿ‰ñÈ‘úƠÁ&Åé÷u`S¿  M‰(&F\A|êT½G"¦ha¬ñ0£°æÔœw_Xv«Lơ³³³KJJzụ̀eçÎ÷îƯ[¯^½÷ß¿C‡5zçwØ3]\\„XŸóơ7|øđ.]º́Ù³çđáĂ{÷î ñơơ óôôdOsvvÖ';̀CÉ’%³yÿư÷‰èêƠ«}úô±±±É2k$&&†ˆJ•*•[©©©?üđCçγ$—yTdPƒ===ón•T)vE ?$`¥Ø ©kRM}>²w¯÷é£_5fư—W”–fô§‹£Â…)5ơơËeËhôh½>ø”zĐë…‚(+;JeåJ̃-ÈƯµk×̉̉̉„Ѿ”””ëׯ„‡‡ïƯ»wé̉¥£™oO–D–¡çç!666**ÊÇÇ'88888833sƠªU#G\³fÍŒ·wƠLOO×- “£>ú(ïîܹ³gÏ-ZT­*na¥½+W®œ]µjƠ=Ê~äÈ‘#Æ/÷›;v́ˆ‹‹Ë2ä–wEuÑ­’°"Å®ô‡gÁJ q²°÷©ẃc__ưªaGÍ›hä»ÿtNRRÄx̀}?åNî́SxØÑ<}útÉ’%ÂË9sæ$$$têÔI·t3›́Úµ+)))·>CÏÏCDDDÆ /~½1¦M@@1÷²º[Ơ¹É·"{{û & <8íÍïi™™™ .´³³kƠª 8đßÿƯ³gîƯ'ÓÚµ«U«Vº°sôÓO?9;;ëàÔ¿"ƒäÑ*i+Ŕ@_¼gçX «i%9¦¬1טyƦÍM–‰ưirû?üP, M>È₫}§ưs—åÇ,fU«Vụ̀å½¼¼ ,øÑG}ñẓ́5j”‘‘qç·²eËN:uÅ={öộ̣̣đđ¨T©̉̃½{uŸíر£P”¡ç_¼x‘ˆ¾ÿ₫{áÈœ9sˆèÑ£G/_¾¬^½º­­m=æÎÛ»wo777I₫¬³̀ª^°`•+WnÈ!S¦LÑm¾"L3¯U«–““ÓÔ©S,XPµjƠ¢E‹8q"·Â“““ .üÁd+ïr“ădç¼[%aE&^fUKNEÿ˜Y «ư2ÉGÖÄÑEë¢ïG̃|¦`Aư«±öÄÑ”2̀hu$¦Đ%saaaÍ›7wvv®R¥Ê„ RSSu…5nÜØÑѱR¥JÁÁÁOŸ>ư₫ûï=<&Ê’8jµÚ]»vƠ¯_ßÑÑÑƯƯ½E‹ûöícß}₫üùÀ½½½ƯƯƯÛ·o₫üù< ß·o-X° Çwó®(G¹åsy·JÂL¹"$’Sû_ÇæÈj¿Ḷ‘ü_åöÚöBF²Y»YŸ¤¦YL¯^z×dî‰ăgŸ‰íŸ1øêjÖËè×Ï€N×NºÏNkÇ·Ọ́†ÄÑÙ“?‹—=q™ q”qkô;‰ÛHô¤ú|„}Àñă ¯̉LŸÔ3GŒ ŸX­ĂnBøă|p6ÍâtJßFÛxw€µCâ —íÛÅøĂ ÿ¼y­₫£7Ë aàÀœă|±Sª{P̃] ™'Olß¾=<<œwC,ÖÙ³g·oß~Ç„¿¸ GHÁê\¡+Bܺëù©ÜWÛĐy­₫ͪɬUdÔ²&ôöF2ßoØg{Q/!~—̃åƯ ½¶mÛ6b78·×®]ë̃½»0k$·nƯºîƯ»Ÿ8q‚wC, G°:_ĐB̀îq'½û÷ÅØ|G¿üRŒ¿øÂèbºu㉠øàFÚ(ÄÇéøU2ç¥1!'«V­4iïV(êÂ… ºÇÅ~ùå̃m±X«W¯Öụ½{÷x·Å¢ q«ó+ư*Ä>äcèÇ+VÔûTóƯ¨Å._üƠWFĂ>$ºh‘aŸe÷ø©NƠy÷€ơBâ¿[·Äø“Oô₫˜ùnT-€1^»Ö€Ö£zÂ^2D´Œ–ñ¾+…ĬËNÚ)Ä3HßƯPŒœRÍ8::̣¾t°×üÏ?Fsø°bØgÙ-"ÇĐ̃=`¥8‚u ¢ !I3ơüÔ×_‹qíÚzWváïË•û˜cëÖ¦”Tª”¯ZeØg¸M­/é¹ç#H ‰#X—WôʈO=nTeOỴ̈¾\‰°;s?x`JIçÏ‹ñđá†}ö{çcߤ›¼;À!q+Å>3'—‡y_¥ê/₫ÖK­Ö°³3¬]È…÷ƠX$`E~£ß„x<7¢„²e 9ÛØUƠ¨O1¾ỉhßîƯbܸ±aŸe×tŒ§øàƯ/Ö‰#X‘E$.3&Q‚iø™³ñLmÚ’Å;‹ñÉ“ügçT¡*¼ûÀº q+Nâî^¶d«ç§BCÅØzÇ5ĘƯÆ(́Ó†îâG~…©°đ̣ô?̃]`E8äcÿ~1nÓ†wk,ÂblÄ c%ñGô‘ÁŸc!qkq‚ÄKÇÑ8ư?È8:8U·»;ï«—BÛ¶bläX¼xñbÅ5ỉ$ËÖñññC† )[¶¬££c³fÍNæ2PëÖ-M. **‹fÍÍ5Ë w ªẹ̀åËŸ|̣I‰%ëÖ­»dÉ’tfrãEåön¿~ư6õܰaCÅ₫L­„ï(ägúYˆ½ÈKѺ-#qlÙRŒ-¢Ù³M)̀Û[Œ?6¦„&ÔDxhu>ÍŸBSxw€<=={ö́©‹÷îƯûÁT¬X1((È̃̃~×®];w₫î»ï‚ƒƒ‰(!!¡nƯºwï̃íÚµ«»»û®]»Ú´isøđaÿ,e:::e9˜’’²{÷î *TëÂ… ÇkÉ₫ ß»U‘‘Ñ©S§²eË>>¼›`i¢££M/„´$ügØß|¬bEC«|óÉ~ư”ë,=ߟÄô¢É¾øB,lüx£ćŸ©ä$ùJ¬ÿ₫IOOOOOW¦®—/_fddđº̉Úµk/kÖ¬Y¢D‰çÏŸë^&&&–-[¶té̉º—3f̀ ¢ơë×ë^̃ºuËÅÅ%00PϺ&L˜àååchQiii¡¡¡3f̀đđđ ¢™3gêÿ®A}ôÑG666§OŸôïߟˆöïߟoQùVÔ½{w¡'ó`ÄYÿ¬™‰£ô¬öË$ÓÿUÓÆ ÆÇÚơÿ`Z˜› j`­Â'?ûLé.Ë“ñưY½º„‰£ÖäD4P(0O;O®₫̉GS”/_~̀˜1ß~û­£££MơêƠ'Oụ̈åKá„o¾ù¦FEquu­_¿₫æÍ›³|ö̀™35kÖ¬Y³¦>ç5j„ … *P €nD*--mÊ”)UªT)Z´h@@ÀƠ«Wu''''Ï=»J•*öööeË–0`ÀÇ%¹d6qLMMµµµ fOĐ F&''kµZ___//¯̀̀LáƯàà`›ä[ѱcÇlmm÷íÛ§{iPQ=b‡™²¤†y¿kPEºngœ?ˆf̀˜‘oQùV„ÄQrxƬÂZ#Ä=gü”ềL1¶Œ[ƠD4dˆÿö›ñå¼aÇ<,eđÇÑ!!FÓxö ˜fçÎ#GlÖ¬ÙäÉ“=<<,XĐªU+­VKD3gÎ7nœ‡‡ÇäÉ“‡úâÅ‹   ßÿ]ǿ½{÷Z·nưâÅ ƯÓlù¿yóæ 6|öÙg³fÍîÚµkóæÍ:4xđà^½z………}ú駺3ƒƒƒ¿øâ‹2eÊŒ7Îßßưúơ;v”üÚmmm/]º4gÎáHzzú•+WjÖ¬iooŸpóæÍÀÀ@F#œĐ¢E‹̀̀̀|OLMMíÛ·o¯^½Ú´iCD†åéé©KnܸaĐ»U”>|øđ#F°ïܹCD… Ê»(S:Œ†gÁ*°‰c j¡ÿ_Ä‘ƯÓÙKÙG*å3x0 ¿¯YC™ºÎÙ³T»öë¸cGúçƒKhA-„ôq.ÍưŒ>ăƯGê¥!é…MKyí/ùßÿÍ›7oêÔ©º—“&MZ¸páöíÛ»wï¾iÓ&ŸĐĐP;;;Ư[îîîû÷ïoß¾½îäƯ»wÏ5kúôé666D”ïù‰‰‰—.]ªR¥ ÙÙÙM4)))é̀™3  ¢Ë—/‡‡‡¿xñÂÆÆfûöí}úôùñÇu ₫í·ß>|è%éO´ŸŸŸ.̃¸qcTTÔüñđáĂŸ~ú‰ˆ?~¬Ơj===Ù/^œˆ>}wÉË–-»ÿ₫́7#›R”A ªÈÎÎ¾bÄÅÅ}ơƠW¶¶¶]»vÍ»(Å®XHÁ*Ü¥»Æ}M 2ä“lâh1#́!;k¬ZµÄøêUcJø‹₫̣¡é4‰£™rwwÏLÛŸ1cÆêƠ«ẃØÑ½{÷Ó§O.\ØîÍw/66–ˆ’““…“½¼¼„¬‘ˆ̣=¿~ưúº¬‘ˆts{ôè¡Ë‰¨eË–áááÉÉÉNNNæØ±cwîÜ)W®}ÿư÷ßÿ}öƧ§§ÿñǹ]ÚG†ü~5{ö́¨¨("jƠª•®R]ËœœØÓœ…KËMLL̀W_}5f̀˜̉¥Kë]”¡L©èï¿ÿ4hPTTÔêƠ«½½½/]º”GQ]°8‚uq&gƒÎŒ4ètÆĂ‡bl1‰£ ‚‚hóæ×ñúơÔ·¯Á%Ô§ú§é´.₫¾Hy_̀Ïϯ`Á‚ÂK__ß[·n‘««ëñăÇ8păÆÈÈÈ«W¯¦¿½ ¼¯¯¯5ês¾;³®ª._̀~„ˆ́íí—.]:~üø *øùù5nܸM›6|đÛN¤¤¤çëoøđáÿ₫ûoHHHÍ5÷îƯÛ¹sç5k>ζ|”³³s3 ­´H‘"-[¶œ?~\\ܯ¿₫êééicc“åÆkLL •*U*·BRSSøá‡Î;³ù“qEÁˆ¶nƯZ½zơ³gÏ®]»öÚµkº¬1ߢ»"`aÄ,ŸÑ3cX+øvÄÑ΂~І !aÁÚµôfùb¾*RÅhÖÅ_ÑWSi*ï©Q<ÅónB®®]»–––&Œö¥¤¤\¿~= <<|ï̃½K—.=z´pr–D–¡çç!666**ÊÇÇ'88888833sƠªU#G\³fn ¶|SnUÿñÇ;vܼyó'Ÿ|"tuu%"­VkggW­Zµ£G²9räˆF£Œ̀nÇqqq `W” ­è÷ßïƠ«×ǼfÍ,÷ó.J±+FẠ́}Gß qª`\!MøvÄÑ’´k'ÆkÖ_ăÍ*ÈDD#GS»‘ ¦W›£§OŸ.Y²Dx9gΜ„„„N:é–n®ZµªđÖ®]»’’’rÉ3ôü999 SRRÂÂÂZ¶lÉ>ú©chQFÓ¿¢ëׯ߸q£jƠªºmrX;wnß¾}̃E)vE ⽤²ÚEAåcâêÊÂѵµµ úàêƠậÔׯXkíÚ̉®•-!SW«.XP̣Ksq‹LJ2¦„Hm$Çd°¸)Ê—/ß±cǰ°°æÍ›;;;W©Re„ ©©©ºwĂÂÂ7ńèèX©R¥ààà§OŸ~ÿư÷­[·>Ë–fĐù/^$¢ï¿ÿ^8¢[OñÑ£GZ­ö̃½{ưû÷/W®\¡B…Ê–-ûé§Ÿ^7ø/‚œeÙ9&33sÆ ơë×wuuƠíU½mÛ6öüçÏŸ8ĐÛÛÛƯƯ½}ûöçÏŸÏ£đ}ûöÑ‚ r|× ¢tt+5fYâ;ßwơ¬è·ÜW„3g>Eåư.—œFkÂïI#__߉Fb@çöíÛFßwØK{? tqOê¹™6ëÿÙ  q$̀àOOẓÄØËË”₫$"ª]›.]Ê¢̣åMỏ₫ư$ uè`äâấ:…©”Zˆ Z?É$¦v©t̀ñïŸ *Ô®][·1±•đ÷÷wqq9|ø0ï†X¾=z„‡‡ß»w/ïÓŒøÁ1ÇŸ5IàG°phƒ³;êăíG® $d–gƯ:1̃°Áøŕ®<ÿûŸ‘…üNâî ÉĐÙL?$`ávĐ!¶'{ƒ>{×ÈUĂ-]:b¼q£T¥Ö¬)Æ̀₫pø>âdϘ‚9{̣äÉöíÛĂĂĂy7Äb={vûöíºƯ ABHÀÑÑR•ôf_7"¢7{¤¬‰“¾ƒ(ˆW¯€AÚ¶m«›>lU®]»Ö½{waÖ6HnƯºuƯ»w?qâï†X<ă(=«}îA>¦<@&<÷V•ª^£k†}öÍ#s†ßyÖ0û«́§L‚̣ä¹:IJeŸt̀{d áG³†gơ‡G°dÇé¸÷¦̃F—cđ",Kü)ëƠKŒŸ?—ªTvÍ#aú¡Ú“¸·Í*Z¥pÇX6Kü' à$>ׇúôYöGƒqdYäFƠ}˜Î”î1Ç~că¶$¢ÿ‘8¹f8 Wºg,G°dlâèE†mÍN©6iÄÑ’6ª´l)Æ̉%•+‹ñ… Æ—ăFâ₫¼Wè¢=`Ñ8‚%K¡£?ËNv¬WÏ„FXäˆ#ëÜ9  `v*}S2e¸̃‚Ĭ‚¡Ădâ",‹O%Åέ6z ·%‰¢ñÏû,G°X×éº13†Ư¨Ú$y«ˆÚ·7½Œ́ØmhRS/g -âÔS©N°pHÁb  BlÊ”jc$'‹±¥8öfºtèP nÜXŒ##,d âŸè'%;À‚Ùñn€\¸ôb5ªft9… ₫™‡ÅØRÇ®]Åø¿ÿ$,xơjªUëu  ưÈÙ³bf:ööm f×ߺƠørºP!w£!qËÄ.ư }bèÇÙÄÑƯƯđêÙ[Ớ¦c·o—¶lFr:Q'!^OëåïK†Ä,Óvó˜BTÈĐ³‰£1¬dÄÑß_Œẃ0¾œœ°ûV₫¹ñåüL? q?2vl "$`©^Ñ+S>nê}W+IY¦́-“¾}ÅxÎ̃WD„Ä,+¹r¨ƠJnU›‰m´Mˆ;RG̃Í0cHÁÅQœ13FñV³?rÓ¦̣•=a‚oÛf|9́C®¿Ño ô €¥BâÈÄ™1¬zơx_ŒÊ±óc‘¶́… Åx̀“jNÍ…8”Bè‹„Ä,;3&M) ‰c>Øy¤XÍzüؤÿAq;j'w¯X*$`₫¦¿Mù8»g›1‹8Z1₫₫{É‹oƯZŒ¯_7¾râL2b/ B⻩# đ¾½2i&{ØùÔ“&™TT_ê+Ä“i²R`Q8‚%«Hø»ß`ơꦵÀÍw˜7vÄwÏăË!¢éG!₫¾æ}efÉZÇ;wvëÖÍßßÿƯwß6mÚ³gỊ̈>ÿƠ«Wß}÷]çÎưưư[´h1zôèÈÈH̃zyBO„ظµWL]ư›U¬ï₫_›6²ïè(YQ.ä"ı+k³,’U$K–,™>}ú­[·êƠ«çèè¸{÷îAƒ¥¤¤äv~FFFŸ>}-ZốÙ³¦M›–*U*44ô£>:#eBra×[áŸ8ZĂˆăG‰ñ±c’ÿ538¸h‘IEưB¿1»!èẸ́LjˆˆOOÏưû÷‡„„„††öîƯụ̂åË‹rÿ'hûöíçÏŸoÛ¶í–/_¾iÓ¦ü‘ˆ¦OŸÎûj ¿̉¯BÜ”ŒYe0-MºÖXCâØ±£ÿú«äÅ*Æ&>æ@B|”ÊÛ-–Ẹ̀Ç;vdff3¦xñâº#S¦Lqvṽ·o_ffΓ+ÏŸ?OD}úô±³³ÓiÔ¨QƠªUÿư÷߸¸8ưªnö̉^̃M`XĂ­ê%ÄX†Ä‘¥ƠZB[j+Äûi¿¬­°<–Ÿ89sÆÆÆ& @8bkkÛ¬Y³ØØX]‚˜——±9¢V«}₫ü¹J‚5(SÆä"¬aÄ‘%G©́*ă6˜TÔÚ"Ä|v0g8jµÚ¨¨(777··ÿưöññ!¢{÷îåø©?ü°páÂsçÎ=qâDJJʃ>ÿüóû÷ïwëÖÍÉɉ÷5¾ÜÉƯÄ$XÄÑFå7moÙb|9ôö̃å/èï+03>~–œœœ‘‘áââ’帳³3½=¦Ẹ̀ơơƯ´iSß¾}ûöí+ Æ₫ó•'__ß,GöïÇM1ăƯ¿_Ï3_j^Rù×qË-oÇÜ6´®/lˆÊéâÊ•ŸƯ¾ư܈WxÄdf¾¸mpä¦êÉ«NÂçÎéâÛ2\oÑ¢$tê¦V1ÀmÀ:çuºø‹Ø/ú%ô3½…’w) K¥…₫4Q™—0#8ê¦N;88d9îèèHDñññ9~*!!a₫üùIII~~~5jÔˆ ÿơ×_6lتU+}ê`÷)T¨PAŸÓ¶Ñ6!îU´W…¢z}ơ×_bü₫û®*¸Z1‹=¹ûø¸ë×r…éÙŸúúäz“8VHL¤5$o°£#%&JÓøïéûuô:qœ]lö—ž”¤…w) K¥†₫4EöÖ³Y ¿Uíââ¢Ñh’““³OLL¤7ăÙM4éܹsS¦LùùçŸg͵bŽ{÷:88Œ;6::÷5A^صx> Œ(añb1®ZƠ¨F°#ÙVr«]‘Gù1́2kÖđ¾^keባ³³sö‘Å„„"æY³å}A—TJ5±„Ë—MnD,³%‰•Œ8²rY¬@B±&ïù2˜ 1åĐŸå'-[¶̀ÈÈ8zT\́W«Ơ†……¹ººúûûg?¿|ụ̀¶¶¶‘‘‘Ú·—ŒÓ=ßP¹rẹ̃ºrÅä"¬pÄQ͉ñ“'Æ—£S” qI¸æ;€%³üı[·n666+V¬H|óh}HHHLLL—.] ( ;’””tûömƯ¤3{{ûfÍƯ¹sgụ̀å ᑑ‘«V­*X°``` ï ½t¡.ÜêfIJM̀²XUªÈ]û˜ă”)¦–¶™6 qÉƯxË`ᳪ‰¨dÉ’'N\°`A‡6mzçΓ'Oúùù 8P8',,ĺر̃̃̃{ö́!¢9sætíÚuƠªU{÷î­V­Zlĺ¹sç233§OŸ^©R%̃¹:FâFÉí¨·vXçöBíÚѯăçÏ)ÛX¦kẾùăôĂ&•Ö:ñÚ±¶+ĐIæỊ̂G‰¨ÿ₫‹-ªP¡Ẫ½{ăââ‚‚‚6nÜè’û?lîîî{÷îÍ»™ RÉ$n,iồ˜K—ÄØøG«MÙÇeẴ­̃¹ÓỔj¸­öq:®@û̀ZÇW¯^…„„èâ *¬X±ââÅ‹gϽxñâêƠ«u»¶dddl̃¼Ù¤jÀrI2¥Mgµ‰#;ẮÚ5™*a÷4ư1G"jH ÅV“\Ͱ jIŸr䈻»{llldddZZ•*Ujö́ÙY>µ’| jBML/{’ÉƠ•)ºÿÊƯ»R•Ä›́́ç…ǃ qFFÆơë׳œpæ ?‚œ±·ÈÁô_Ä‘e…ä*•8úøĐÍ›Rø½sÎëâéß̣T^«0;*ºU `´p âydäÍKvoKăqd+ƵWx˜9SŒĂĂ.&_Ó¦‰ṇ̃åB!BŒ»Ơ¹Qшă°aĂx7̀Ơ: ÄïĐ;ÆÂ.â(͈£›×^ááư÷ÅøÀj"Ác9êÓ‡úö}Ï›G£F™Z`ª#6œù:KE‰ăèÑ£y7̀ƠŸ$Á¾Å̉́7ȲÂÄÑÓSŒf…îü<~,M9¾äAºøƯªDxĐ +ܪK@ ¦Â8V¨ E³¬đV5ëÄ Y‹¯QĂô2̃2œÄE¦̉TY`¦88vé̉…ˆ/¾zơj]œ¯,ûYHEưYV8⨠€ºråu¼l™~Çb$E¯ïyï$“·Á°DœÇ₫ù‡ˆJ•*%Ħ`÷6ÔßKƯëqtr¢ €óµ|9}ûíëøë¯%H‰ÈÜâÈZ·ĐnUƒÙ{Lâ3nïÓûF—£ƠJƯ2ëqlƠJù:<¦œU´Jˆ…ÑGpqœ5k9881€¡Ø9°­ˆCỌ̈vĂL«M…çI.\ ùªª\™¢¢¤,đú¤;u×Åß̉·ËI•~,çı{÷î9ÆúcGI¶1Is£Ó:oU³+̣üù§¬‰ă¤IâöƒëÖÑ€¼¯À̉áV5˜=ÉWƯ+W΄³‰£u8²3̉È» âÀbüơ×̉”¹”– ±)O>X$­ă¨“––vëÖ­;wîd°ûx0ÚµkÇ» .é¡´V«f‡ccÅØ:GYư¥XURí@8F¡1º+d¡¢ÄQ«ƠnذañâůاIJAâr3)qĈ£²J” Gx7Àj¨èVơÏ?ÿüƠW_å5ä¡&¿Ă4;-W²G«Mí”ût̉$1–jó)v>ơ.ڥص¨ŸÇ7 ±­­mÉ’%Kå„w3A]^Đ !6剴k×ÄX²Gó'uQpE±cÅøäIiÊ\FË„x4a+T‘₫a»sçÙÚÚ.X° eË–EáƯ"0R­ÅĂ&U«Đ 8,MÔªíÛ÷:ˆ __eª=}Zú2DKDX8V¬X‘ˆ|}}Û·o¬ô4‡æ±T‰£³³ boU[­J•Äx̃<¹k³µ•¾̀6ÔFˆ¯ĐJ°(*JëׯOD/^¼0¹$°"©”*Ä̉]›8#DÔ¡ƒ''Ë]{·úÄ iÊd—₫₫ˆ>’û̀…Ç¡C‡V¬Xñ̃½{́Ăy»N×%)G²Ä#Y>,w ăÆ‰ñ7ßHS¦7y ñmº-÷%˜ ÎÏ8>œ}éîî=wîÜmÛ¶•+WÎÆ&‡¼våÊ•|Û I²|#YÈŸI{y‰ñ.éæ@—¥²wé®Ü0/œǃæxüÖ­[·nƯâÛ60/îäλ D„ÄÑr|Cßt¥®ºxû†$̀0g*ºU `@ äƯ"­ê7LZÓÈ`,Æÿư'M™]¨‹/¡%J^€jqq6lï3v•® ±T‰cụ̀¦}^₫¹ æ!0PºçFó7níØñ:₫æZ¼˜÷åX(Ήăh©¶z«t˜Ä‰R%Ê”Y®À@G>|˜ånĐ@Œ%L§̉Ô¯è+]¼…¶ô¤²^€úáV5˜±¿éo!®BU$)Ó¤Ơ¿AÀf̣O¬–É<¡GăL( ÀB¨.qŒ̃¼ysLL ÅÅÅM™2¥eË–:uZµj¶±†,ØGS°OÅaÄQ́>Ư$uêÈ[₫z¢ÀU¨œºÇŸ~úéĂ?œ={ö³gψhäÈ‘¿ụ̈Ëưû÷¯]»¶lÙ²hµZ̃m‰#i¦0K¶Q5ä(<\JF㔬ØbTLˆ£(J P3%7nÜø̣Ë/322t//_¾|ö́Yö„Ó§Oï̃½›w3ÁÉ’8jŒßÆŒĐ§/_n|9YüE ñ$Äû*8SQâ¸nƯ:Ư€â»ï¾ëêêzèĐ!Ưñ5k~ùå—… "¢Ÿ₫™w3AüÈÏ”³‰£““Dm*V̀ô2̀¿ÔùâEɪEµ„øú…ר„ÇëׯQ­Zµ~øáww÷#Gè;ö“O>iÑ¢EFF̣n&¨…–ÄçLœR}]m ߯>ägdI<«D¢B _€j©(q¼ÿ>Ơ¬Y“ˆbbb®]»FDNNN 4 ¢R¥JQ2Ƀ7$\‹G–‘8²‰ăăÇ T8j”Ÿ;'Y±_Ó×B¼Œ–)p!ª¥¢ÄÑÑÑ‘ˆ|˜ˆ<==y7Ô‚M]É•ws²Á/9ï¾+Æ$́®?7ÊRÅ+¢``ƠT”8vèĐˆRSS—.]zûöm"*X°`³fÍ={Ö¦MƯÊM›6åƯLP‹ctŒẉtơªéeXơëy·À$©³¢C¼›ÀÇnƯºépd888dddèÖè)\¸p=x7,Y¹r̉•ơÑG¼¯FM”Z½ßß_–b‡Óp!^LØ ¬—G;;»-[¶ 6́w̃ñóóχđˆ1Ỵ̈HWIzKù=zOˆïĐe.@UT49fÔ¨QDT¢D‰¨¨¨÷ß¿jƠª®®®&Ëi+W®äƯRàMMÄ&¦Â­ê<(•8V©"Æ«V‘„a|E_¤ƒº¸-µ½FrlU  j*J<(Ä)))çÏŸçƯ"P¯ ʪ(¹GŒ8fqù2.Ơâëtws8PÑ­j.¤LÙ[Ơ¼¯̀zƠªÅ»JE#ĂØG“ôăO¦ṇ́™t­aGA§P!zù̉ôb R£]ºô:̃½û­ÅM4…¦̀§ùºø7úí#Â₫@`]T”8fY÷@&N©–Ḉ6%æ)elÚD›7¿×®•2qœM³…Äñsú‰#X•̃ªˆˆ Ư¶m[bbbzzz¼²›O€Ê…S¸«+qÄ5;vEK´8 eiv̀/ÛWẹ̀—À—Fuvï̃½bÅoÖ nܸ±““S```¿~ưF™}’5X!vJµ‰Ûư<ÿüósçÎ Ç—/_^¸pa"Ú°aïfI”$UQZ­cÄQv§O+V;â¸v-ï °*J¯_¿NDíÚµ ²··gßjƯºuóæÍ‰èƼ› Eʪ ‰£JI¾cơ‡$¦¥ÿ̉¿¼¯@9*Jccc‰¨B… 9¾ëííMD111¼› *R˜ ›X‚ĉ#nU[‡™43ÇÀâ©(qôơơ%¢ŸbÔjµ§OŸ&¢+̣n&¨HOêib qTBÆ\ª4HŒoß–²ä:TGˆ7Ÿ+¢¢Ä±FDṭäÉQ£F…‡¿^¨ï̃½{G1b„.q¬V­ïfg×è7¢F&–Æ& ܸÄDN½¢ns©–ÓÓÔ_1€HU‰ăàÁƒƯƯƯ‰(44tÀ€ºƒưû÷8pàÁƒ‰ÈÉÉ ÛÂq:.ÄÉÔŒDʪ!7˜ü₫Ä Åª}ç1’¸đ‘4Rˆÿ¦¿»(¾T”8º»»/^¼ØÍÍ-Çwœœ,XP²dĨÍÎN˜yT¥ª&–Éûz¬;âxü¸ñå˜àéS‰ Äc`ÔµsLÆ 8đƯwß=zôöíÛÉÉÉåÊ•kܸñàÁƒœœx7øcGM÷ß¼¯Ç°¿ï)8âHD®®ố™,%»‘ø+n…)yQ©+q$"GGDZcÇ;–ˆy·ÔåaI&s¦́ˆcp0-\ø:₫çª^]ÊÂmÉ6ƒ2”¼îTt«•‘‘q÷îƯ«W¯̃½{7#5X‡•¬íÍẲDDëÖI\ø|/Ä¿9₫¦äuđ¢ºÄ1**jøđáµjƠjƠªUï̃½[µjU«V­Q£FƯ–v9 0¨€„¥ahÛ"ùú±ä‰ă Äߺ|ËûZ” ®ÄqÛ¶m:t8xđ`ZZp0---44ôƒ>ؽ{7>¥%Á"¬B…”í ƠswçƯzñBÆÂ£ Dó¾>%¨(q}ú­[·êƠ«çèè¸{÷îAƒ¥¤¤äñ‘C‡ơèÑăĐ¡CÅ‹÷÷÷¿páBï̃½:Ä»“¬»ˆ£é‰#›,²é…0☿¥eÓú ñl­äup¡¢Ä±páÂDT½zu//¯,oyxxÔ¬Y“ˆlmm -6"""$$ÄÓÓsÿ₫ư!!!¡¡¡½{÷¾|ụ̀¢E‹rûH||üäÉ“í́́6mÚ´}ûö­[·,XđóÏ?Ï̀̀äƯOVq,FÅL,-y,­R%IÄ1 6qTv)ÇråÄxÍ+¥X%¯ € %₫₫₫DưêƠ«,o¥§§GGG“Q{UïØ±#33s̀˜1ŋי2e³³ó¾}ûrËwï̃0dÈ:uêèÔ¬Y³mÛ¶111W®\áƯOVMÚƠ¿oƯă%m(nUgaÇ,Ëió™Ô¥ºBœLɼ› /%'N,[¶llĺèÑ£=z$̣äÉØ±c?~lcclh±gΜ±±± ØÚÚ6kÖ,666·©6GÑh4;vd~ươ×µjƠâƯOV-â$,MK”´¡q̀ƒâ‰cÙ²2̃Z ñBZhBIf€óÎ1Çg_:;;Ñ¡C‡9âíííîî©›4ăèèøĂ?£€úĐjµQQQnnnY¶Àöññ!¢{÷îƠ­[7û§₫ùçWW×%Jœ={öÂ… ÏŸ?¯R¥Ê{ï½§{́,F´|+¨ q̀ƒâKú÷íK_~ù:>̃yGÊÂçĐœ¹4WÏ£y3h†ÂW $ΉăÁƒs<~ưúơ,r;?7ÉÉÉ...Yë2Ô¸¸†¯^½zơâŋʕ+Ïœ9sëÖ­Âñ2eÊ,]º´º~{–ù²ëÑ₫ưûåïN‹uÿ₫ư×Ñ›ÅOJd”¸}×Ô5á¯]+IôzÁEIV˜–fy®Ơ>Sñ’ơb*ˆ]·Fáơüß{ÏîË/ËèâeËfΔúaÄ7×ö^a«©pù–Z0ô§‰Ú´iĂ» j¡º½ª¥¥›:­›‘Í̉mŸư#/^¼ ¢¨¨¨§OŸ.X° 55u×®]+W®=zô={ôwŒˆˆà}é–F·$“ ‰m“,GŒÀ₫Ejzi,—²e]$-Pr̉^¯^ªU£k׸ÔÎÖöóÏN6H<ÜŒ¡#ºØ£‚‡#a"ipø–Z4ô§)²ÿ³}„ÈJpN‡ &kù...&99ë뉉‰ôfÜ1 Ưän"?~‹-tñˆ#ówêÇÄQ&x˜ëâDJĦƠ`yTt«zÍ5º‰Y°ÛÆØ“½é²·ª¥Ä1_uë±âK9Qbœ,ĂâŃcói¾̣ 78={V4lذM›6.Ç@̣Ơ¿ÙGiàVµAßuˆzơ¢­[_Ç›6ÑàÁ—Ï.ư=—æÎ¡9Ê_#€¬T”8ÚÚÚ‘³³óºuë́́TÔ0PƒgôLÚ¥O1âh#mÛñÆ̉'OE·ªëÔ©CD^^^ÈAiiR—ˆÄÑ ̉ÿæøqYmD„8“2ù^#€äT”85ÊƠƠơæÍ›aaa¼ÛêåA¼› ܪ¢‰4Qˆ̉B̃͘Æö-ZT¢D‰gÏ 4¨zơê9.dzråJ̃-$Y‹GqÔG… tû6Çú[¶¤¿₫’±üNÔIˆÑ"vº €PQâ*ÄÿüóÏ?ÿüĂ»E I6IB,ÉZ<,OO‰ B⨠ø&•*‰‰ăo¿ÑGÉXW Åp¼R9¨èV5@n.º(Ä’8J³ú7ñhÏ<°K9>|¨|ứ‹-[d©¢*UU₫º”¡¢ÇaÆñn¨Ô¶¢Û„X̣ÄQưAÓ®ƒ?₫HÓ¦)\?;ơnçNYª˜HûS]B!ƒhÂ× %£GæƯP©tMº;“³´…#qT»¸kp«@?ê'$ i!G°$*JYÿ₫ûï³gÏ>üđĂÂ… '%%9;Kœ.€¹\đ²´>z$Æ’Ưª},(ÆçÎqiBÅ2́”‹(âr2QƯ3»wï ́Đ¡Ă¨Q£f̀˜—˜˜°|ùr­VË»uÀÇC;‰†cWÿƈ#7o6‹RXÏb,Ó<[²årirSWâ8₫üiÓ¦=xđ Ëñäää•+WÎ5‹wÁB°NH¹‰á3é˜Me³€ñÏô3—˃ǫW¯®_¿^ë¶ÔVsܺuë™3gx7x’j çÀ1.Q‚÷U²|}Åø§Ÿd©bâoè̃W %kÖ¬Ñjµ666Ÿ₫ù9æá'ggçåË—.\˜ˆ6lØÀ»™ÀS]ªkz!Dd+ëD''E:Ăl9:̣nèî]YƠ¸yÁ1:Æû*$£¢ÄñúơëDÔ®]»   {{{ö­Ö­[7õœˆnܸÁ»™À“T‰£¼KPc"W̃êJó‡ÊSQâKD*TÈñ]ooo"áôPpAB,Uâøï¿r¶#ySAâøé§bœ*Kci¬Ÿ¢S¼¯@*J}}}‰(ǧµZíéÓ§‰¨"–N±>gIœ{+Uâxçœ-Fâ˜76q¼x‘KØù1S¦ÈRs‹¤¢Ä±FDṭäÉQ£F…‡‡ë̃»wïÈ‘##FŒĐ%ƠªUăƯLP›8V§ê¼›£ܪΛ8rZ‘§];1–iẺTZˆwĐ.— 9->xđà½{÷ÆÄÄ„†††††êöïß_8ÁÉÉ ÛZ!6q4q̀»̉Ù³̀·9ưÅ·~s¢¢Gww÷Å‹»¹¹åø®““Ó‚ J–,É»™ 4$–ŒÓˆ£2>¡O„ø4æƯ ¨(q$¢† 8p`È!~~~E!"‡jƠªÿơ×_-Z´àƯ@à •ä™¼@DD2[Ơúă´ë Ơª%{­©µăn5XƯªÖqtt;v́رc‰(11ÑQMK¾åÉe¿i0âhºw§K—^ÇçÎQ:̉WÑúơ§×Û,¥¥‹hï‹0•ºF³@Ö,O’~x°|yÄÑtï.ÆÛ¶É^]eđ¾b pq|₫ü¹¡qqqáÛfàEªµxX²Œ8âVu¾Ê——y-M½ ض.”¥–ºT×ü̉ÈçıAƒ†~$""ÂĐ€ùzI/…XªÄ1!AŒ%qd ňc¾êÖå8²îß—«äÑ4ºởÅkií`̀ûZL¢ê[Ơr¬₫Íf,’8"q4»”£á·̀H ñRZÊ»9¦Bâª&GâÈnT-Yâ/ƸU/¬ND,Æ™™²WwƒnđºR©¨eVµF£©T©RíÚµkÖ¬Y´hQ̃͵`ÇTB’2ÙÄ·ªùÈ’8¾÷—VtïN;̃,’³mÛ[XKȉœ(ÁôrÔ@-‰£V«úùçŸ+W®üÎ;ïÔ®]Ûßß¿¼,³^ÁlÈ1±€½Um'ƠOGƒ°ƒ²üF;uă­[åJÇĐ˜/éK]|ˆµ ¬G fŒsâ¸{÷îKoüûï¿D”™™yóæÍ›7onÛ¶ˆ\\\j×®­K"kÖ¬©[¬‡w÷ØGÉ́ß/ƶ¶̣uˆúí7̃- "Ú³G®’Ùı'ơ|Hy_+€ñ8'Ơ«W¯^½zÏ=‰(>>₫̣åËBODÏŸ?ÿûï¿ÿ₫ûo"²µµơöö₫Mÿ̀€ù’e:¯ŸŸ˲åJOçƯy¹’«?¢G¼›`µÜª&"ggç¦M›6mÚT÷̣Î;—.]ºxñâ¥K—nܸ‘‘‘qă.SÉ2☀‡Ø̀’·7EF̣n€ùPï¬ê¢E‹::::::)R¤@¼›œU§êRơâ… ícgUƒ>4̃- z{ÿ˜k×䪥ơâû$Û¢‘̣Sшcfffddäùóç/^¼xáÂ…;wîd?se¬–ÛÆH #†ª[—ΜáƯêуfÏ~oÛF_~)K-ch̀VÚª‹±i5˜5ΉcBB‚.M¼páÂåË—“’’²œP¸pá5jø¿áêêjT=`–₫£ÿ„¸ƠáƯœƠb$`Ö8'ơë××jµY–(QÂßßÿw̃ñ÷÷¯Zµªd+¦€™‘cơoVáẨ•…[Ơ†ªĂü&E•+ónB;fPï 0çœLÈu €ë†½¼¼4 %&&É6&ѨQ#¾mÅÈ8J¶m aÄÑpYÖWAâ(ïåR]9%P˜Zó„ÀwîÜ™÷™¼ aÿ¡µ“á»*å³H U«–Ÿ=ûÖ,eµoO¿ÿ.{-chŒ°oơZZ;˜óº^S¨wV5€Ü#4R8âVµ)ømCoO¬₫å¹jéI=…x)-åx½¦@âêC1²–[Ơj¡ÄqÛ6%j”c?$ep¾U½G¾}¾rÂnƒ[Ơj‘m9%Ù0¿>ïØAÛ·ËU‘ ¹<§ç¯ÀtœGooõ=f Hf©ÇÙÄQÊÇÄDE{̀Đxÿ9}®‹÷Ó₫6Ô†w‹ †[Ơ`j¾ª)UQ́~ƒXN3̃-xÍÖV‰ZÆÑ8!^L‹y_4€18‚¨ñ²†TE±#Åñ¾0+WW-»/Æ̣­æX„ñA:Èû¢ŒÄTê"]b GvÄ8cÇ´4 é)Îx¦-[86@í8‚J£sB,Ó­jà,ËàüÔd¾_²&Chˆ_¦Ë/À8HA¥ØE˦••ªØèh̃6q̉¨Q#¾mÈ‹“ï€1:uă-[((H®v̉ÎfÔL/¢E_Ó×¼/ÀœÇbÅ=ỵä́Ù³g™U}ûöÍă#|Û ³“ç[Z±¢<ÍEâh₫öï—±đ¦ÔTˆ̉B$`^8ߪñ¼9ïµëLå(¶R%y‹[ƠñóăƯ0çÇÉ“'ÛÙÙ;v,&&F«Ơ¦¤¤Q‘"EL.̀Ûcz,Ä ¨UÈ•8bÄÑ pºQP»6]¼¨DEM¨I8…ëâ4J+@x_:€¾8'E‹9s¦.~đàA`` ]¸pw·g§è”×§úR«Ơ1nU«BƒôĂ¯ă[·dKçơRª”˜8;Fï¾+WEi¢8.¢ESi*Ç«0ˆÖq,\¸đ{ï½÷̃{ïñnđÇ&8̃º%ƸU­ ơ™ß N2¾)|ÿ½oÚ$cE¨ƒ/¤…|¯À *JƯÜÜV®\¹råJƯË̀̀̀§OŸfddđnppN ±„7̣Ømcp«Zj×ăÓ§.F%JˆñÆ UúŒñ½jƒp¾U]RR̉5k₫₫ûï;wî¼|ù²@åË—oÖ¬Ù°aĂy·Â8JˆqÄ­jƠá=âÈJI‘·|?̣»Jjy¸@*q$¢3gμÿ₫û!!!7õÔ-ñ˜––¹nƯº6mÚœSÍn¶ ·ôBbÙıhQy[ƠFSAâèéizziA-„x­â}ƯúRQ☘˜8qâĘ˜˜ß}úôé„ ’’’x7̀{«ZJ/_1FÆÎ]â¤W/1Œ”±¢å´\ˆĐ̃×  /%!!!>$"WW×qăÆưüóÏÇûå—_&L˜àââBD<øî»ïx7åE^–Æ8J)>^Œ‘836qT́1Ç»t—÷uèKEÏ8^¾|™ˆ́íí7nÜèăă£;èîî^­Zµ€€€nƯº¥¤¤`¥k#í"r% bŒ[Ơ†̣ö–wpÏ5kñ¦M4{¶ŒuU¢J·H¦o$€\T4âxóæM"ª_¿¾5 ¼½½7nLØoĐ:°óL%\Ä‘ˆäz̉M1âh¨úR₫KèÎyËŸL“…ø;½0*Jur['33“ˆlmmy7dÇ®Å#Ó¶1Câh̀ñ½{¼[CB ¤B<Ÿæó¾n½¨(qôơơ%¢3gÎ\¹r%Ë[W¯^=qây{{ón&ÈN¦Ơ¿eÄ>ăˆ[Ơ†bG̃K9Qï̃büü¹B•F“Ló¶$¦¢ÄÑßߟˆ^¾|Ù·oßeË–;wîîƯ»çÎ[¶lYŸ>}RSS…sÀ²±‰£9ÈQ…««¤ÅaÄÑjÚ<†̃3x°¼u•¥²¼/À0*3pàÀßÿưîƯ»‰‰‰«V­Zµ*ëÚfeÊ”4hïf‚́Ø[Ơ2‘xơo6q´SÑÏ”ùQAâØ²¥GEÉ[×d<œ†ëâå´|â}ơùPш£½½ư7ß|SªT©ß-Y²ä7ß|cooÏ»™ »1½¼I¼ß {«L¡‚[Ơ¬óçå- â´‚÷åäOE‰#Ơ¨Qcï̃½£FªY³fÑ¢E‰¨hÑ¢5kÖ9rä¾}ûj²KehçÎƯºuó÷÷÷Ưw§M›ö́™ûĂ>xđ N:'NäƯ= ‰GvÄL‘Ê»ÜD’ZÖ$ȃên«.\xøđáÇ'¢ÄÄDIö§^²dÉ5kêƠ«wçÎƯ»wGFFnܸQŸñK­V;ỵäÄÄD̃cÜÈMẨââÄXÆ[Ơ`₫:w¦Ÿ~¿zE ÊXWY*‹ÀÀŒ¨kÄ1 I²ÆˆˆˆOOÏưû÷‡„„„††öîƯụ̂åË‹-̉çăëׯ?­²ÛgÖC¾Ơ¿q«Z]ʪkHß¾b¼~½¼uM£iBB!¼/ ªN%±cÇ̀̀̀1cÆ/^\wdÊ”)ÎÎÎûöíÓ­ ™‡ÈÈÈ%K–T©R…÷EX‘§ôTˆ¥MÙªq«Z]¨kÑ¥öíÅXîÄq0‰3·çÑ<̃—ËOÏœ9ccc ±µµmÖ¬Ylĺù<}OOOŸ4i’««ë”)Sx_„¹D—„¸•“°dvÄQâ.$&*]ZŒ<àƯ·œ8¡\]wHæÍjLfባV«rssss{ëi9Ư®†÷̣ܦâÛo¿½~ưúW_}å„•ùtœ q'ê$aÉrmTM¸Um²nƯÄXÉLM¼ û€ÙPƯäi%''gdd¸¸¸d9î́́LDq́t‰·]¼xñ»ï¾ jܸñƠ«W ­W· kÿ₫ư¼;Ă<üUâ/z3g)îv\ÅÑưû÷M/ùÚ5/¢ÂºøöíÛ¶¹L\œđƒ$mÉ2‘¤?¥T¢D…7aü¾}qï¼Ă»Aèyøp]¬ÏŸ©)]:Đqà$Iºxf́̀> }x_½*¨î[jæĐŸ&jÓ¦ ï&¨……')))Däàu÷Ư´›ø\RRR&MT¦L™ñăÇWoDDïK7Wé¢W¨P!ÇØ8ÿư'Ʀ—ö–äd¹J–jÛé|ơª³ Ú6l>ü:>r¤B=r9£»t"MœD¯Ç%Å–̀,6“÷Ơ«…j¿¥f ưíÿ¬g!²*½UºmÛ¶ÄÄÄôôôxcoº¸¸h4dæßuỰ:ιl+¼`Á‚û÷ïươ×Xo\y $×ó‚y>˜`ܪ–ĐÉ“¼[@DÔµ«Ë=?†%ß÷@ªqܽ{÷+¼y@¾qăÆNNNưúơ9r¤F£1̣́́́œ³ç D$̀³f>}zë֭Æ «U«ïÎ3‘λ £¿ÿ–½ZT‹ Zêqœ?₫´iÓd›V™œœ¼råÊY³fQ¦§§glllÂÛó^u-yzzf??22’ˆV­ZåûFçΉèÿûŸ¯¯ï‡~È»“¬…´SªỐsú\ˆçĐ̃ÍȕǫW¯®sOÈÖÖV8.Œ2nƯºờ™3†Û²eËŒŒŒ£G G´ZmXX˜«««¿¿öóË•+÷ÁÛ4iBD%K–üàƒ5kÆ»Ÿ¬Ecj̀»   6•IÛ¶ÊƠƠ…ºñlÍû̉r¥¢[ƠkÖ¬Ñjµ666Ÿ}öY—.]j×®­;î́́¼|ụ̀I“&¥¦¦nذ¡^½zÛ­[·5kÖ¬X±¢yóæº91!!!111ÁÁÁ Đ“””ôäÉ“ ”.]ºI“&ºLQpơêƠđđđºuë.\¸w'Y¸é_!–/q”xơoDăÆtù2ïF¼eÀÚ·ïu¼n  P½¯èïKÈ•F¯_¿NDíÚµ Ê2+¥uëÖÍ›7'¢7nZlÉ’%'NœƯ¡C‡3fôíÛwÉ’%~~~Î kÓ¦Í!Cx÷µcqlDdªÅLJ÷uBv™ß.©âi¿.â ­['{u-¨…ÇR,ï«È™ÇØØXÊ}½ooo"‰‰1¢ä₫ưû/Z´¨B… {÷î‹‹ Ú¸qcöÅ;6q¬CudªÅË-«P#æ÷„ăÇ/G ¬JÎ>戻Ơ Z*ºUíëë{áÂ…ŸbÔjµ§OŸ&¢+WxûöíÛ³Đ¾­]»víÚµËí]???¬Ë¨Œ$׿Ḯä(Œ8ªQåÊb|ü8 Ê»AJ  !^FË–̉R̃-ÈFkÔ¨AD'O5jTxx¸îà½{÷92bÄ]âX­Z5̃ͧ󦒣›7ÅXÆÄ1—•AÁ0ªÙu°sg1NIáƯPQâ8xđ`www" đæAô₫ưû8đàÁƒDäää4lØ0̃ͳ¤PâˆmÍ%!ă¶â†a'Ä(đ˜ci*-Ä×é:ï«ÈGww÷Å‹»¹¹åø®““Ó‚ J–,É»™`–ØÄ±œ| D"q´,́, $¡*Ä3i&ï«ÈG"jذᆠâççW¤H"rpp¨V­Zppđ_ưƠ¢E “kóP [t)_lâ(#ܪ6E‘"¼[—‹e¯¢‰ấ ¼¯ *£ăèè8v́رcÇQbb¢nåE°6’/â¨PâˆGS4nḶnäE]#‚ˆˆˆĐĐĐ={ö$&&¦§§gßl,Ïi:-Ä’/âˆÄÑ °K9&%ñnÍkAAbüø±́ƠM¢IB¼ö™P€,T—8î̃½;00°C‡£F1cF\\\bbb@@Ạ̀å˵Z-ïÖŒØE%q|ñB‘kÀ­jS¨r)ÇÁƒÅ8$DöêØGñ˜#¨ºÇùóçO›6íÁƒY'''¯\¹rÖ¬Y¼2ÚFÛ„¸ •áƯ£`ÄÑƠ«‹ñO?ñnÍḱ₫£k×Ê^=‰›f±cđ*¡¢ÄñêƠ«ëׯ×Ŷ¶¶ÂqF£ ¶nƯặà`تÍGS”£¡;wx·&ÿư§D-Å©8ï È•Ç5kÖhµZ›Ï?ÿüܹsÂqggçåË—.\˜ˆ6lØÀ»™ —Ç$ÿdD^^r–[ƠR9z”w D ïN:–Æ ñJZÉûễ¢¢ÄñúơëDÔ®]»   {{{ö­Ö­[7õœˆnܸÁ»™`̃äƯo#RIOçƯÑ Ab|á‚́ƠM¡)B<¦ó¾z€·¨(qŒ%¢ *äø®··7ÅÄÄđn&È®,••¯péGvÊ?GK¤đüÖszÎûễ¢¢ÄÑ××—ˆr|Q«Ơêöª®X±"ïf‚́RSi LKcéÇ„1Æ­jƠ®Í»9`ÿÖQ`~ 5§æBü„đî‘Ç5jÑÉ“'G®;xï̃½#GŒ1B—8V«VÍ”*@µØy%OåƯ¨M1âh¢fÍx· ʬ 6›f ñçô9ï‹©(q¥ZvH¥U¥ ïäŒ]ÑA™ÇçÑúè£!C†tíÚµté̉ºƒ 48p`Ç=<<ˆèùóç6làƯj0›8ú‘Ÿäå#q4?lâxø°ñåÈ́RûHM_ ñ$ÄûºÀª©èVu¯^½>ưôS"êÖ­ÛôéÓ .¬;‘‘ñÍ7ß|ÿư÷W®\ù́³Ï|}}“““‡ẓäÉđđđáÇón8˜„Måđ̣%ï+C+&Æ*q$"OOzüXÑK’8›]-@y*q\ºté½{÷/₫å—_ Y#ÙÚÚN˜0¡L™2ÉÉÉ+V¬ ¢"EL4‰ˆ₫ûï?̃­SÅ¥¬ecoÏ»–èÈ̃-ÈjÔ(1w”[q*ÎûºˆT•88q‚ˆJ•*e“m ƒF£)Y²$]ºtIw¤hÑ¢DôLáư¿ÀœÉ>3†'ËÅ&Ë—+TérkÂƯjàHE‰cRRưóÏ?ײ=•}ụ̀e"̉¾Yxÿ₫ưD¤{Ø,CUª*kù²¬ÅĂrs“¹PGG1₫ă…*ư„>â…´w€ơRÑ3ơêƠ;xđ`ZZZï̃½ƒ‚‚4iR¼xñgÏ:uêÇLII!¢ÚµkѬY³~úé'"*S¦ ïVƒdä˜RÍ’=qĈ£„Tøt#¨hÄq̉¤I®®®DôâÅ‹Ơ«W÷́Ù³U«VüñâÅ‹ăââˆÈÎήwï̃DtáÂƯG:uêÄ»Ơ`’0 b³O1â(!vbơÓ§¼[“UP+¶÷àDÜNÛy÷X)%åÊ•[½zuñâ9?^ @™3gÖ«WO8R§NvíÚñn5˜DîEÙª«Ê{'‰£¤ÄX}+̣Œ'ÆK–(T)»(Ï8gBIÆSQâHD₫₫₫œ:ujíÚµ‰¨P¡B•*Uêѣǟ₫Ù­[7Ưi5jÔ1bÄ?ü€]Í›8#éoơÊ¾ß ·ª%Ô¬™«/qô÷ă+84à=àƯ`¥TôŒ£N¡B…úöíÛ·o_"JLLtppĐh4YΙ={6ïf‚4¼‹­(8bÄQ&êKyiI-ÿ¢¿tñ_ôWKjÉ»E`uÔ5â(ˆˆˆ Ư³gORRRzzz||<ïY’}£êŒ 1ƈ£LØTƒe¿²Lƒ…x1-æƯ`T7â¸{÷î+V­Z‰ññă¼[“;Oú°w«—Ñ2̃}VGE‰ăơë׉¨]»vAAAööö́[­[·ñ¼9Ư¸qƒw3A2è€ס:²ÖÅ aK ·ªåĂ&_l–1iÛÏ?;_€ùPQâKD*TÈñ]ooo"‰‰áƯL ›8ÊM®Ơ¿ÙÇB…»«àå%Æ₫i|9²6LŒ×®uV¬̃94Gˆ̉@̃ƯÖEE‰£¯¯/åø£V«=}ú4U¬X‘w3A2Ïé¹buɵˆ#;ậQå­jVd¤r›|FŸ ñ:ZÇû̉Àº¨(q¬Q£'í©ưïô».>E§dz̃ u8f¬Ñ‚)°Ï¥Ḳ_nU˪R%1Vå|ø—_~9|øđ?ÿüóÓO?µnƯZwB||üÆù6$Á₫#çFnƤŸ5M/8)Èlåwơ*ïÖä́3q @7OѪ«Su!ƺ< Î‰£°µ`—.]V¬XQ¿~} »0Q:u–/_₫ñÇg9̀Ú^Ú+Ä́Æ»2©U‹÷ƒÑ,ă½{/GŃbO§O+Zu…1îV€8'wï̃Ơ#Ù5-²=z´.¸sç߃$ØÄQ&ÿü#ÆJ$˜¹%véö?₫àƯ\9:fr©·5â?H½ưƒsâøâÅ "rssọ̣́Êă4www"JLLäÛ`»ß LØE•¸Uí&û w °0̃-ÈƠ°aÏ…xéRE«.Kâ3¼q„é@^œÇŒŒ "²··Ï÷LƯ„ºọ́Å&¾¾̣×W¬ï+† ‰âuëL(ÈpßÑwBÜúñî °pf°ÔX0™6$¢Ë—•½Œ8ÊÇÜ’rö1 °[½ÿ₫ÇûêÀ©bđ—/_8q"ïsRRRx7¤Iâ.í¨Lµ(±ß ‰£|Úµ£M›x7"eË̉›g¶•V™*GQ”.~L=É“wg€ÅREâÓ·o_̃­…°3cäK™µAan£bæ„M V²/üiœ3hÀ€×ñ̉¥4fŒrUÿH? ƒ÷ư¨Ÿ“ÏÀjáV5(ûÉ®`l̃0â(Ÿv̀oj]‘‡ˆú÷ăY³­º 5â}´wO€%CâJ;@x7Aq”““«8qd=®tU©ª XHó­ê={öđî°p~~²œ,Æq@!é2€IDATTÆÍ›¼[—Æéøñ×ñ‹T´¨rUO¥©½©·.HÓã–‰sâèííÍ»€›¢¤Ä¿«2.â+ÆHhÆ z³C*ÍE‹)Wu/ê%$Ø·äƒ[ƠÀ|3c’’ÄXÆmcâ˜Å–q«ZVƠ«›^†̃ơŋ•®½!5â‹t‘wg€e²–ÄqçÎƯºuó÷÷÷Ưw§M›ö́Ù³¼ÏOIIY¿~ư‡~X»ví¦M›0àØ±c¼/„‘¸ù‡|‰#»ˆ£B‰#FeÅΉ‰áƯ•ÚL›…8ˆ‚x7,“U$K–,™>}ú­[·êƠ«çèè¸{÷îAƒå±0dzzzß¾}¿úê«'O4jÔ¨råʧNêß¿ÿÊ•+y_Ù›L“…X™Eq«Ú|đOÊ»5y b¶³ÊÎQ©D•„ø*]åƯ`™,?qŒˆˆ ñôôÜ¿HHHhhhï̃½/_¾¼(÷çv́ØqñâÅ:uê„……­^½úÇüå—_\\\V®\yưúũd̃‘8ÖëNî2ƠÂ&%KÊv1qTL³fb̀æëê3gOŸ®tíí©½ï¢]¼;,å';v́È̀̀3fLñâÅuG¦L™ấ́¼oß¾̀̀̀?²ÿ~"ú́³Ï„M´½½½‡ ’‘‘Ö&ºIJ̀Uh¿Aug0ë×_y· /åʉqh¨̉µ³w«‡Đ̃Ẹ̀Ç3gÎØØØGlmm›5k{₫üù?rûöm¿·×qÑM¿wïï ‚ü K¢È‹qÅhµ¼["E¸UíDâ—±„_l@z8jµÚ¨¨(777··ï$úøøPîYàÚµk·mÛ–åàƠ«W‰¨L™2¼¯ÉB4¢F¼›`2$Jb—W7önuHˆ̉µ§áB¼†Öđî °4ªØ«Z>ÉÉÉ...Y;;;Q\.ÿđW«V-Ë‘“'O†„„*T¨cÇúÔëëë›åˆîö·•»Yđ&•z7kz;₫¶¼ÿ¾UU¢Û·ơ­ÅP÷î CḲƠ"Ăû“?÷̃süùg]|ûÖ-²Q×/½l—v́HăÆ½₫NѪƠ]%[2Ư¬đzßPÚúvkÓÊăÆ¿¥j†₫4Q›6mx7A-,p€ZµâƯ ¼LJÓ¦½'M¢à`¥ІÚ́§×ÏZ̣m VẠ̊G"êß¿¿‡‡Ç¯¿₫ºwï^//¯   1cÆèVäÉN7’̣Ï?ÿdSdŒÆ&uIÆg£¢x_*È$ËÄju'¬gÏL/Ă`¿Đ/öôúá́NÔé%½äƯ ` 4ZƠïßev|}}±cv́ÓúZ2́[wûömưW c„“÷Û­\M3¨?ƠEès[[JOçƯQ]Ú¦¸]ơŸrHtMù¡ăÎŒ¿¥ª„₫”œƠ₫[oùÏ8È®P!̃-°>¼[?æqZÂcUöIÇI¤ø²@`‰8‚̉”Yú›ˆ̃yG©K*YR©Àœté"ÆûöqhÀ!:$Ä i!ï₫K€Ä”pƒnñ'ô‰2•Ê» ‰£bºvåƯĂpŸ×_‚Jñm2§Ơ@8‚¶Óv!₫˜>–¯"vfŒ¼«³¼¼”ªÉê}̀|yvíâƯü-7ÿ£‰94àúCˆ? x÷˜=$ „´CˆưÈO¾ØE1âhºuăíÛ/G)Ư»‹ñ¢Eđ‰Ol\§ë¼û̀GPÂ5º¦LÉ"µj)uyH¹0‡G5&q Ée´̀„’8‚eQnơïøx1Æ­jÈƯgŸ‰ñàÁđ}'Äch ï₫ó†Äơ½'kù́­jy=x ÆqT’¹ơöœ9b¼e Ÿ6 BC1œ{̀GƯ: IJΌ!¢”¥®êáC16·TƼ±óc₫ûwk “”ħ̃ƒtPˆå₫å ,G;3F±µxdÇ8âVµ’>a¾B;v_‚zơăưû94 5âKt‰w€Câ²c×âq"'e*µ‘û«Í&®®Ê\5l(Ææ0±ˆV¯ă¡Cù´a0‰ÏW~Hrî0[HAv/è…̣•²›vÈ‚½U ¼œ:Å»zqpăÿåÓ†5´FˆÙÅ ‚Ä”S˜ ËZ~t´7i"óŰ#ùiÓFŒÏăÓ7rbv3'ư!qy=¡'BDA²Ö.ÆM›Ê|aqä¨qc̃-0{·ºC>m8JG…˜}ê@HA^i£÷¦̃²ÖuTüg‘üưe¾0Œ8rÔ›ù"íƯË»5z)_^Œy}wªQ5!~JOùv˜)$ ¯ ´Aˆ›’¼Ă€lâ(;$ơé#Æ6_²5ă«Wù´a-âOéSÎ=f‰#ÈëúG±º""¼0åVŒ„l 3ËÉÔÇ„’ #û”jà}̀ñøq̃­Ñ—îVÓÛ cER$ÏsƒÄdÄ&í©½¬u=—ư‘G–³³‚•Á́Äê/GY•*‰ñ… ÜqN q}ªÏ³GÀÜ q±ëÆÉMÑEYب ¶ÛÍgb5¹¸ˆñ±c|ÚPƒjñszε?À̀ q Á®Å£èˆcÉ’¼/Ưꥦ̣n®_ă=¸5£'ơâ@ äÙ#`V8‚ZRK¹«`G5¯ ‰#/æ9Ö[¢„߻ǭ›i³ÿMś0/HA.?ÑOB\*È]ƯÙ³œ®Ó<ÓKP¶¬_¼È»5`ŸÏÜÊo-ű4Vˆ‡̉P=æ‰#Èe ­âïè;̃Í‘ FyÙ²EŒ×¬1¾űÏd~Êo÷–oè!fẒ€Ää¢ä̀¥±S¸‘8̣ÂNQ^»–wk̀R[j+ÄKh ïæ€@â–F‰™1́FƠ¸U †û́31;—[3ö̉^!Găxö˜ $ ‹XâîÔ]îêØÀ*Uä¿<6qĈ#G5ḳn‘æ̀ăéÓy¶¤ƠâM´‰gSÀ qY°L ¦ÁrWwäˆwë&ÿå=|(ÆH92DŒù…wk cg'ƺH…¸7ơ6¾ °HAlâ@rW·¿¿ÿ¾ü—Ç8ÚÛË_ä‚MÍj~ ưú«ẃȳ%¥¨”Ï£y<›ª‡ÄdqŸî+Y]h¨²—Ç8Ǵ₫É»5†ùà1Vú ü¶›tSˆ?£ÏL( ,G—+¹*PË}EÓÔ·GŒÈ́زh·f¡"© đ̣ äÙ) nHAzgI\Œ{ 1¡$µBâ¨}$ÆII¼[cönơ´i<[̣„Äùe­¨Ϧ€º!qé±Ûà*œ8ÖªezzÀ­jơ`sä¸÷³QœœÄ8-gKœÉ¹(^bĐrƒÄ¤Ç>2U–ÊP’^=ăÖ­¹BŒ8ªG›6b|æ ïÖléR1îߟgKs6 7HÁ́±SªÙ,BF™™¼/ṛèïlôh1₫ñG-q&g ‰“~¥_y¶Ô ‰#H,†b„¸=µW FvF*;Û¬»÷ ª[WŒâÙ’tJâNÔ‰gS@­8‚ÄÓb!O㨑ïR&Àß„ b¼q#ïÖŒ]G¨eK-±!_̣^®¦Ơ<[ª„Ä$¶ˆÄeESsj4Ăû“ )v~̀âÅÆ—É«+VéëƯâa4Œws@u8‚ÄØ»]–¯xq̃-€·]¾̀»Æ`ŸnTè9Ưܱ¿ïM¢Iœ[*ƒÄä̉€(\c:_$6ªV‰¢EM/ƒ£¾}Řû£ÓßB¼rn ¨ G̉Z"ÄÊ<àøD\·˜ÇP——âUBNØÇÙiöæ#(HŒ¿₫scFÑ(!Æ̉<ÀBâRI3…¸uS Æß~c…qdaÄQ%Æ3¿¥°+ܘM›Äx̣dÎYFË„‹ ‰#H)®qçN1nÚTñ ¾qĂô2@b|ó¦ñåpÅ₫räçÆ¬§ơB́@Æ–‰#H&“Äe±kP e*=p@ñë¼}[Œ‡XâNÜfÊÎw Luü¸7WbA‚¼ô¡>BœLÉGé(ç€: qÉ|A_ñ—ô%ïæÈæÚ51®VwkàY³ÄxË̃­1F¹ro½ä¾±åcz,ÄͨçÖ€: qÉ̀¥¹BÜ‘:*\{é̉JƠtơª#qTiÓÄø‹/Œ/‡+vб†B£ö¹*NÅưÉ_xù>½Ï¹A HÁŒƯ»'ÆŸ|¢T­́ˆcá¼ûrÍ»FjÔHŒăâx·†è<â¤üs! :HA×HL§ºRWe*Ư±CŒ?₫X±K½fz ??1Öjy·ÆH́¦‰́ñÂn"êH¼›œ!qipyÀqûv1®__©KeoUƒª|É|ñ̀önu¯^b¬†_RÆÑ8!N¢¤¯‰÷"“ÀGÆnÚ-ÄU©ª2•9ĂăR““yÔ zèÜYŒç̀áƯă}ÿ½׬ɻ5D¯è•O&̃‹LWHÔeÀ1¾r…wkˆ P²TVxÉΘkƒÄ$°‚Vqê¯|6äƯ -Zˆñ_ñnñÖ®cîÓ«‰èƯâ‹tñ87¡00cHA#i¤¯£uÊTzâ„+7¥¥†™ Ånñ‘ 1‚wkŒ7hÿóedđnÑCz(Äï̉»¼›| qsÅgJ5 ‹8ª‹‹›ù†¿₫*Æ*˜Í\‚Jt&ñ)̉*T…w‹€$`ªÿÑÿ„x 2¡$Ă|û­³›ü*‰£:±{–GF̣nñ>úHŒSSU1›ŸA[i+ï€̉8‚©FxC}ØQn|ñ±ƒX¸U­N+˜/¡9ß­&¢₫ăêƠy·†ˆˆ´$.ù)}Ê»9 4$`ª{$îßR€ (߀âŬ û ª»€ÍỴ̈nI²üṇƯw¼DDDóhkHĂ»9 ($`’m´Mˆ[SkÅê=Àl~6j”‚̀®ÈŒGƠ*WNŒŸ=ăƯ“°;à RîI¼L¥©öd/¼lOíy·”ƒÄL2…¦ñTªX½Ë—‹1·ÄT«_?1îуwkLƠ³§«ä†u2‰Ëàï¡=›i3ï€B8‚IØƠƯSsÅêƯ³GŒ‹Uđ‚Ơ0C̣5c†‡†̣n©63YÙƠ«”’»ADDô’^ q/êeBI`N8‚ñ¾#ñ‘«` æƯE`ÄÑ\4i"ÆG̣n©¾úJŒ‹áƯ""*HûPá%v°HÁx́â;l)·GÄXéƠ°3èƒ] ¼K̃­1Ơ”)T¦Œør̀̃ ""¢ơ´¾‰O w°HÁüp{À̀;Ù₫éS̃­‘ÀƯ»b¼lïÖ¼ñưäDNÂK¬ `ñ8‚‘ª“ø”₫*Z¥dỚ̉ßị̈Úù¬paNƒ̃Øß*:w6¾ƠزEŒ5ªƯ‹§x! ˆJT‰w‹@FHÁHWIœ&2”†*Yub"ï‹',âhØq¹_~áƯ |úé[³ªß{wƒ̃`W¦è 4w‹@.HÁkh·¢VJV#Æ… ñë$f¡lY1>|˜wk$påÿơ—¦Œ³¹ăbZ¬äª® $$` vˆñORtsaĂÄXé5Ó̉Ä«›… ĸE ̃­‘;ẫ¦ ïÖ0ØÜñOú³;uçƯ"G0Øq:.Ää©pí;wqså$¢·×âÁˆ£Yps{ëel,ïIÀÁ‚‚Ä—êyØ‘̃ηÓṿçƯ"G0Ø»$NH¹@L(É$Å)^%»U0GsÁ̃¡.Q‚wk¤±i}̣‰øRµ¹ăEºˆ5z, G0̀>ÚǾô"/%k9RŒW):“›ˆˆ₫₫[Œ+WV¼z0J@€§§St4ïIcÛ6r—Á!GG̃ b°¹#iHs°r>€…@â†iGí„8‰’®}Å 1VzéoÂ~ƒf‹}̉±’å,O6o₫ OJRï¸#ù‘ßÀ»Q $¹Ú¹sg·nƯüưưß}÷ƯiÓ¦={öŒw‹øû”>âFÔ¨©cï3åy):Î ¦ª]û­'.äƯ ÉdÙÉHm¹cYgµÿ@?hHsŸîón˜‰cΖ,Y2}úô[·nƠ«WÏÑÑq÷îƯƒ JIIáƯ.ζ̉V!f§È(£aC1f7QÈ?ñ´iW¦a—q4‰wk¤¤}kh4Úµ‹w›̃¸CwúSöH*ăHjº­B☃ˆˆˆOOÏưû÷‡„„„††öîƯụ̂åË‹-âƯ4؇ÜgÑ,åpꔳ;*d̃<11BùËS}*—«khÎdZ-98ˆ/»uăºÄéÛÖѺ,8&Q’†4äÁ»i` $9رcGffæ˜1c¿ÙîvÊ”)ÎÎÎûöíË̀̀äƯ:>ج±%µü‚¾P¸åʉ1;ö§œ¨(µ‚t¶lyk=pËÚ421‘́́Ä—¯^‘FC¥KónU¥ªZ̉ú{0†b4¤ÑfíàƯ@0Çœ9sÆÆÆ&€™ŒikkÛ¬Y³ØØØóçÏón̉fĐŒ, j¤ƒ ·aÖ¬bwï/ûöåÚ#åËs­Lpç¿|I ­Yc|i*“–F_ưÖ‘ÿ₫#†4:•ââ87/‚"æÓǘÇ?¡Otd{jˆqn%äK oË̀̀¬ZµjăÆ³_»v­ÏÏ?ÿœo ¤%K₫w öSkÎ- áư%5Utt4ï&pÅưK,ç·©<ï&ä÷ߨo¸7ÿåøß²]ëxÿp̃MàĂÎÔÄÓâ$''gdd¸¸¸d9î́́LDqÜmçK£å[ÿ0ZƠ8ïÎ{û½÷èöm¾m0ÑưûÖ=³5:ºBż!—̣ô¯–4ß̉ÈQ¤ü 2ư,KKÆRŸ ´¾/ï¦À[ââo›ù_ṇi£ªư=¹B☕nê´û¨99::Q||<ïr²v0 á|So% FʯúͦÇ+T¨À·$aWa<­–Ú·§={x·C.#éÛ‘ôíÔ¯?ưÀ»-¹ØĐ‡6ô!"ú¥uü•wk€ˆÈÙÉÙÚÿfÈ]DDD–#¾¾¾¼ÅǬ\\\4Mrrr–㉉‰ôfÜ1ovÿ–&¢ổ́î—È,’j“\˜ˆ2Üâmăœu_¿Uø•MjA"ÊpfăúÖ[Ól^ ¢ôâqvOÜØ·´̉5ivD”îk÷¸ûÙfR† ¥{=µ{èñÖ[6D™DDé¥ÛưçùÖ[o°u§‘æe!篇?ÿadi»G÷)½´Ư£‡éŽ́Q†ÖÆV“y?½Di»Gºÿ?Jw/aCDéZ[;MûÖ“ôbÅíb‰è•¶@AMûVL†«»í3"JÍ,XØæûVl†K1ÛçD´²Èøvn§é₫}*]îß§̉¥éÙ3ru%"JJ"‡×uÿ₫œtƉ‰äèøÖ[ ¯wÛĐ́[/^PÑ¢Dôúắ[º*ˆÈƯSd,Çï¿­^M3f¼₫óƠ}©Ø?ú”²·'"¥bÅ̃z+5ơơô˜rw×̃¿¯̃zơ $"ẓ„ëSéé¯ç°8æ eË–́ˆ£V« suuơ÷÷çƯ:>8æ [·n666+V¬Đ=×HD!!!111]ºt)P ïÖđÉ19(Y²äĉ,XĐ¡C‡¦M›̃¹sçäÉ“~~~äƯ4n8æ¬ÿ₫¿₫úë̃½{½¼¼‚‚‚ÆŒ£[‘À:!q̀Uûöíó@ `=đŒ#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#è‰#˜6mÚđn‚EAJ]*9t©´ĐŸ $ $ $ $ $ V«åƯKăëëË» ¯ˆˆ̃Mà‰#è·ª@/H@/H@/H@/H@/H@/H@/H@/H@/H@/H@/H@/H@/H@/H@/v¼`9vîܹcǨ¨¨"E4õ|âĉ®®®¼e6ºvízåÊ•,ƯƯƯ;ÆA'ç-::ºmÛ¶;v́¨U«Vöwơé=ôpyt)¾´IIIÙ¾}û®]»îß¿_´hQŸ₫ưû¿ûî»YNĂ·TOúô'¾¢y₫üù̉¥KÏ={ÿ₫}êƠ«9²bÅYNĂW‰£4–,Y²f͇zơêƯ¹sg÷îƯ‘‘‘7n´··çƯ4óp÷î]{{ụ̂å˳]\\Ø—èä|mÚ´)··ôé=ôpvyt)¾´úKOOïÛ·ïÅ‹5j”zêÔ©đđđQ£F >Ü îB—êߟøê/!!áĂ?|úô©··w``àÇ÷îƯûçŸnß¾½zơêu—åw©LvăÆ*Uª4mÚôñăǺ#sæ̀ñññụ̀Ë/y7Í<ÄÇÇûøøŒ=:sĐÉyˆ?sæ̀_|áăăăăăsñâÅ,'èÓ{èaV¾]/­A¶lÙâăăÓ£GäädƯ‘›7oÖ¯_¿jƠª×®]Ó¿»Đ¥:úô'¾¢Ñ]ø7ß|#Ù½{·Ï'Ÿ|bPwYC—âG ́ر#33s̀˜1ŋי2e³³ó¾}û233y·Î ܽ{—ˆ²üZœ:9íÛ·ïÙ³ç¶mÛr;AŸ̃C³̣íR|i ²ÿ~"ú́³Ï„Aooï!C†ddd·Mñ-•¶?ñ5ȉ'́íí‡*éܹs‰%®^½‘‘¡wYC—"q”À™3glll„#¶¶¶Í5‹=₫<ïÖ™;wîQ¹rạ̊8œ‡¹sç®ZµjƠªU7Îñ}z=̀Ê·Kñ¥5ÈíÛ·üüü؃̃̃̃Dtï̃=ƯK|Kơ§Oâ+j—-Z.\˜=X¨P¡W¯^½zơJ÷_Q<ăh*­VåæææææÆ÷ññ!¢{÷îƠ­[—wƠN÷ÜÇ{÷î}ưúơ"ET«VmÈ!Âttr̃4i¢ >œư]}z=œẼ]Jø̉híÚµvvYÿ¹¹zơ*•)S†đ-5P¾ưIøhóæÍYœ9sæîƯ»µk×Ö ëâ+*Àˆ£©’““322²eË–]°`î8¾¢Œ8*%%…ˆ²wtt$¢øøx̃ 4>´··7n\ï̃½uG?>dÈyóæ5ỉ¤dÉ’èdSèÓ{èaCáKk´ŒŒŒ-[¶|ươ׋/vww'|KMc¾¢ÆˆˆØµk—V«%"??¿‚ êă+*Àˆ£©\\\4Mrrr–㉉‰ôæ÷ ÈÛúơë/^¼(üíFD7îƠ«WJJÊÁƒ l}z=l(|isêÔ©öíÛÏ;×ƯƯ}ƯºuíÚµÓÇ·Ô8¹ơ'á+j¬îƯ»_¿~=<<|̣äÉ¡¡¡=zôĐu¾¢$¦²³³svvÎ₫›DBB óªÀPơë×'¢›7o:Ù4úôzXø̉æáƠ«WsçÎíӧσF¹oß>vâ¾¥†Ê»?sƒ¯¨>4‡‡Gÿ₫ư?ùä“G…††¾¢ $đôôŒƠ}3·oßֽŻuj§Ơj322²¯S`kkKDE‹Ơ½D'›BŸ̃Cë_ZCeff?~ăÆ-[¶üóÏ?GŒ‘}1d|Kơ—oâ+jÈÈÈ©S§îÛ·/ËqƯ¼ơÇë^â+ªƒÄQ-[¶̀ø{÷ÓäƠÇüđRÔƒÉF"*å† ƠWÔ"W…Œ 1 ˆ(‹s,Å-n¸)‰b„¡Lda ,›N„ " 3°pQXƒ€L¢µ«( èú₫q̣4-àS䢾ßÏ_§ÏsúœÓŸÒ/ç†Z]UUÅ®h4ÊÊJ ±X<Ư½{Öuuu¹¸¸lÛ¶MçzCC!D$Ṇ̃Óà=D˜;¼´†úî»ïJKK·lÙ’‘‘1Ú¸ ̃RîO¼¢?ưôS~~¾ÎuzæÂ… éG¼¢Ç fddtêÔ)º’••¥T*CCCg̀˜1Ư½{ÖÙÛÛ/[¶¬®®.//]lhhÈÎζ±±ñ÷÷§Wä§Á%zˆ0wxi ¢ÑhΜ93õ¼ŒQ o)G\â‰WÔ ÖÖÖ"‘¨ººº¼¼œ]lmmư₫ûïçλbÅ îáú)n‚§”œœ, ½¼¼ºººd2™‹‹Kvv¶₫¶|Đ×ÚÚ«T*]]]nƯºơǘfddH$V A~¢O>ù$//ïܹś¨6†Kôa}£…/-w …ÂËË‹Ïç/Z´Hÿî[o½Å=\)Çxâ5Hccă–-[†††Äbñk¯½¦P(®^½JIII 2(\/|H§»/±XlooçÎêêj“ÀÀÀääd@0Ưưz>XYY÷öö₫ùçŸÍÍͳfÍZ·n]ZZ³³³v5ù‰ÊË˯]»öÊ+¯èÜâ=DXßh!ÅKË][[[~~₫đđ°b$NNNlW̃̉ Œ'^QƒX[[oܸñ₫ưû]]]<O"‘œ>>.....®­­m´:>>>ÆÆÆ„µZ]SS£s·½½½§§‡–§ûÀ ‰# ££#**êÖ­[́ Íf¨;wî́Ư»·µµ•Ë£æ̀™# …Báüùó§ûg=̀̀̀V®\IË•••:w/_¾L B¡ĐÍÍmº; /,$`€äääÇÓrhhhaaaSSSuuuRR̉œ9s!ưưư{÷îạ̊¨ààạ̣̣̣̣̣̀̀̀̀§ïØ_ư5888-1™²¦ÙPâåË—5ö­ªª*:“‰#puåÊ• Z̃¹sç±cÇœœœŒ_~ùåM›6|øđĉÇßT©Táááíííôckkkkkëơë×i¦;©Msann.‘HèÇÊÊJ6%-“Éè§­­­««+«_\\̀>öôôôôôÔƠƠUTT¤§§OH—d2Ù₫ưû•J%ưøøñăîîî²²²˜˜˜>úḥBÓ#ÀU}}=-øùù™êWÈÊÊ*(((((đ÷÷×¹ƠÜÜŸO?&''—••Í={´ú´ ½ ‰-pÔ§...¦Y#Ç“H$!!!K–,¡·JJJd2ÙøB¤­¯¯oß¾}4k”H$»wï 222̉h4999ùùùOßsæL…BƯÑÑA9}ú´——×ø~æ§Ÿ~E¹qăFHHÈ?ÿüCijj̉ßq2!M››››››óx<úÑÚÚÚÎÎnŒú¾¾¾‰‰‰jµº¹¹ù̃½{–––d”́âöíÛ8@Ëo¿ư6Gnnn–H$ă óƠW_ÑóƒüưưÙ¦X,>rä!äÔ©SSyĐL Œ8'}}}¬<}Đ|>?'''88ØƯƯ}´¼“fi„ÂÂÂüü|§¦¤¤±Á6ÆØØøđáĂ3gΤ]Ú¿?½̃ĐĐÀe%K–Ь‘âàà°|ùrZÖ̃E>IMsdaaáááAÑh445́́́́îî&„,X°ÀÅÅ…ƠܰaCjjjjjjtt4½̉××ÇÚüû￟¾3,7Ư¼y3»JböôôŒqº<§0âœĐMÓÔçTÆÙÙù‰éæêƠ«éxXGGGBBÇsqqY³f··÷믿®_ßÑÑñƠW_Ơ₫:-h4îîîÅ‹ÚIÑ>333öÀÉn»€€ztù¥K—BBBØ<µö¶Ö%•JUUUƠÜÜ|íÚµ¦¦¦GM`Oè +!$66vÄ "‘ḥBS#ÀÉŒ3,,,hYzøđáƒ̃̃̃I L=$À•X,¦…t đôôôôôdû¯™1’0ÆÄÄäĐ¡C2™́óÏ?́ÖƠ«Wơÿ’̃½{÷´? °ùt¡P8©¡˜Æ¦---éºJ¥ª­­¥ñØÛÛëŒíeffæää¨Ơj[[ÛÄÄÄŸ₫¹¾¾^*•NT7æÎË¡³³³ËF4©¡€©‡Ä¸bKÙzzzÎ=«s·¢¢‚ ¶ÑuxT*•J¥rpp000055U&“åää°IjvT!#—Ëéé?Ô•+Wèœ̣Œ3lll&5Ü›Öù»̉:çø°ÁÅÔÔTº¤Rg̣Ă?ĐÂáÇ#""D"‘±±ñíÛ·¹·̣Ä/X°€Ôjµ333@ ÆØÏ)$À•T*]µj-=z4##ăîƯ»„¡¡¡ÂÂB¶u×ÎÎÎÙÙÙЇ···ÿçèùˆÆÆÆ«V­Ú´i­ =I 9rdhhˆr÷îƯÏ>ûŒ^÷ööÖ₫Cˆ“á‰M³́8ổ̉̉ººº±Ë¥u___###BÈơë×éÄñÑ£Gl˜å---\Náá̃sö2üøălhII‰‡‡‡§§§T*Ø%•đ,Àæ0ÀÇ600 Ñh̉ÓÓÓÓÓ-,,T*•Z­¦fÍ•>¼M$YYY)•JµZ!•JÍ̀̀nƯºU^^N+øúúê«´´ÔÛÛ{Ñ¢EMMMt²ØÈÈhÏ=S±›fq „„„8;;÷öö²Ư$:]/xúôi¹\¾mÛ6“±₫s¶²²Z¾|9Ë䨔©©©©©)}æÁƒ‹x<^UUƠØ3ÆĐ¿ûî»çÎS©T¿ưö[tt´‡‡‡\.gk.·oßÎvÀ #`GGÇœœíưѽ½½,k …_|ñÅ8† !FFFtrS©Tæåå}ươ×ÅÅÅt*ÖĂĂăw̃ÑùÊ+lll Emm-MƯè)9“º©™cÓ®®®7n¤å₫₫₫úúú[[[6J§ó4ZhhhHIIá2î¨}8‘₫<5Ç[·nk½¼¼üâÅ‹ÖÖÖô"*÷ ‚ääd:\WWwêÔ©’’zâODDÄîƯ»'û_¦G0̀o¼QZZàááaii9sæ̀… z{{'$$\¸paíÚµă~̣̉¥KËÊÊâââÜÜÜæÏŸobb"–-[–””ôí·ß²ƯÖŒ™™YnnîæÍ›ííí­¬¬üưư¿ùæ›đđđ)—¦SRRöíÛçèèÈçó]\\¢££Ï;7âị̂„„„àà`KKK>Ÿ¿dÉ.‰üưưél5ÑÛOÍéèèH122rrr‰‰)((đññ¡w‹Ø4´>î=÷öö.,, suuåóù¶¶¶¾¾¾gΜILLạ̈+à¹ĂÓ?Ÿ àY–––vúôiBˆOFFÆÿIÓă0<<\QQAF™å¬qx1™˜˜ e€‰…©jà‰#p‚Ä8Áæà#À Gà‰#p‚Ä8AâœüË<Ä xê½IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/psigmf_101.png000066400000000000000000001460541463010412100222720ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\çđO‚€Žw÷Öº·Ö=ª¸G]µZkµu´Ö=Zu[íϽGƯ«nÄ*V«‚q0̣û#xw„•„ÀsI>ï—¯ö{wÏƯ=—ùæî­V """"¢ä؉®Y&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDd&DDDDdѰB¢«@DDD©+00Pt`â˜*ló‡IÍ<==ù¦¨ ßuâû¢B|STÈfoñQ5„‰#„‰#„‰#„‰#„‰#Ù„={öˆ®éă›¢N|_Tˆo ©G""""2G""""2G""""2G""""2G""""2G""""2G""""2G""""2ˆƒè Qệôô]"µ ]ËÀÄ‘ˆÈyzẓ‘(iüre8>ª&""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""""ƒ0q$""¬|ụ̀F£Ñ´iÓFt]¬ÊÀu/l̃¼yE×ÅJ0q$""¯D‰₫₫₫Ç×-¾zơjÀ€ụ̀åsvv®U«ÖéÓ§Û122̉ÁÁAW¶lÙ+åÊ•;æÈ‘ĂÙÙ¹bųgÏ’¶~̃µûáÇëÖ­›={öÏ>û¬F[·nM¢pLL̀‚ Ê–-ë́́\¼xñ™3gFFF&{̃¯¾úÊßß¿J•*©ÿÚ Ñ """xxxtíÚU¿~ưºbÅ}zÆŒ§N:räˆF£ù₫ûï'O\¯^½öíÛøđaëÖ­ƯºusqqiÑ¢…nßF¹ºº6lØ@²åưưưííí¿ưö[‡_ưµ}ûö*Tˆêß¿ÿíÛ·/^Ü¥K—K—.đññY·n]ƒ ÚµkwíÚµ•+W^»vÍØV€Ézưúơ­[·:wî¬Ñh¤•ơêƠ[¶lÙéÓ§ă÷¹sçN† 2gμiÓ¦çÏŸ{yyy{{§OŸ>₫‘£¢¢\±bEåÊû÷ïÈ!ƒ±çMIµííí/_¾́îÛƠ«WË”)ăèè¨wä>œ?¾cÇQQQçÏŸ¿víZÁ‚«U«æäädÂËE)ÄÄ‘ˆÈVåÉ#̣́Zmÿư÷ߟ~úé›o¾Ñ-3æçŸ̃°aC§NÖ¬YS¬X±½{÷:88è6¹»»ïÙ³GJ·lÙ2ỵä &ØÙÙH¶|xxøåË—‹/ÀÁÁà˜1oß¾=wî\ºté\¹råøñăõ¼±³³Û°aCÏ=uMøøøüơ×_?Ι3§_˜'OhµZåẾÙ³xö́Yụ̈wîܱ³³+R¤È‹/tkJ”(±fÍÏ?ÿ\¯¤ƒƒĂ´iÓ”k?>mÚ4{{ûöíÛ{̃”TÛÁÁÁËËK¯^½úÎ;;wî|üøñÚµkăùñăÇ?~Ôh45jÔ8wîœne¾|ùÖ®][½zơV›ŒÅ^ƠDD¤:îîî_ưµ´8ỉ$ggç78{ö́Å‹uY €°°0Ráœ9sJY£!å½½½uY#€ºuëèܹ³.kP¿~}]y;;;FsâÄ Ư-:Ë–-{ö́Yü¬1**ê¯Ä%{íºº¹¸¸(WºººJ•×sçΘ˜˜É“'?zôèÙ³gË—/ÿ÷ß[·nưêƠ«¤OtäÈ‘*Uªœ;wnáÂ…E‹5ö¼)¬¶dÊ”)S¦L¹xñb¹rạ̊çÏ¿€îBV¯^'O7n¼yófÇ?~l×®Ư‹/RXm2ï8‘êxyy)¶:99yzz̃½{@–,YN<¹ÿ₫›7õ¾}ûúơëÊÑdxzzJY£!å•Luùbü5ç̀™óơ×_,XĐËË«Zµj7nÖ¬Yü‡Âoß¾mƯºub—¦ṂV«tö7õ(W¾~ư@Ö¬Yă—?räHÆŒ¥M½{÷~ÿ₫ưàÁƒ7õܧOŸOñàÁƒ!C†lß¾½hÑ¢¨W¯±ç½{÷n‘"E¤Å•+W6hĐÀ¨jKnß¾qêÔ)Ÿ*UªèîJ2gÎ  páÂëׯ׽ÚÍ5ûù矻wï¾yóæ¦M›v^2 G""[eîÆy©ÊÁÁáíÛ·>|hÛ¶í®]»*UªôÅ_´lÙ²jƠª*TP–tss“bCÊnđàÁíÚµÛ±cÇáÇwíÚåçççééyôèQ½ç¤®®®Éf‡Iđđđ°³³Ó{̀ wB CsåÊ¥·æ‹/¾pưúơ¿nƯº₫ưû;;;ÿöÛo½{÷–îÅu^i±jƠªÆV[)S¦Lơëן>}z§N¶mÛÖ¯_?½s¨^½º2G¯^½:€€€€¯¾úÊäó’ ˜8&#((¨I“&7n,[¶¬èº™UåÊ¢k¨7nDFFJwû̃½{P§NăÇïÚµkΜ9Æ “ ëƯAT2¶|ÂÂÂîܹS¬X1Ÿ˜˜˜E‹ :tÉ’%ºá`”Ç× ‘“ V­Z%}"‡’%K₫ư÷ßÊ•ÇÓh4R»@Éưû÷ẃØQ¯^½%JH+u÷Û|́»}ûöîƯ»ùå—K–,Ñ{¼kÔy¥Q'%†ï¾sçÎÖ­[ûûûẃØQZ™%K$tGÖÉÉ©P¡B=R®Ôeỵä1ªÚ”rlă˜Œ5kÖˆ®‘Íyö́Ù́Ù³¥Å©S§¾~ưºM›6ºaœ•ỈæÍ›ß¾}›Ø>cË'!00°J•*³fÍ̉-ÚÙÙƠ©SgÙƯ£êÄr®¾}û̃»woǺŧOŸñ¼¹aÆ Ô+éèè8jÔ¨₫ưûKÓ¨ÄÄÄüüóϺNåJZ­v̀˜1yóæ]³f^Öh́ySXíÊ•+X±b…̣Xµj€ªU«Æ?rÏ=:t́Ø1é§OŸngg§kÂj“QxÇ1aºîưÛ·o_¿~½èºÙœœ9sNœ8ñäÉ“eË–=uêÔ₫ưû«V­Ú£G‡:99ơíÛ·k×®¹sç>uêÔ¡C‡²eËvüøñƯ»w7ỉDï8uëÖ5ª|*V¬XªT©éÓ§•*U*00p÷îƯY³fíܹ³^É>ªĐ«W¯ßÿ½k×®ƒvss[¹reDDÄäÉ“u[g̀˜1}úôiÓ¦ 0 {ö́“'O;vlÑ¢E›4iâææ¶wï̃₫ùç§Ÿ~*Y²¤̃añ¼Y¢D‰ø³³´mÛ¶E‹IŸ×ŒƠvwwÿöÛo'O\©R¥Fi4ưû÷Ÿ={vøđáeÊ”‰äAƒmÚ´©aÆ]»vÍ“'ÏîƯ»ÏŸ??f̀ƯĂÀV›Œ#z I•ªU«V1…K—.¾¯Í ªfkZ…ø¦¤ Kü‹T @Ö­[=z´víÚ®®®Å‹5jÔû÷ïu[=Z­Z5ggçÂ… ûøø<{ölÙ²eÙ²ekÔ¨‘´¯̣hF•×׸lÙ2iÍÔ©Sü÷ßZ­6$$¤wï̃ùóçÏ!C¾|ùºté`–KÖ\«Ơ¾|ù²oß¾E‹uwwoÑ¢ÅÅ‹¥Mßÿ=€9sæHk6ṍííí́́́îî^¯^½Ư»w'x–$útO:5ÙóÂđjÇÄĬZµÊÛÛ;K–,º¹ª×¯_ŸÄ‘ĂÂÂú÷ïïåååââR­Zµ?₫øĂÀój9¸Yi´)ûVd­?₫áĂ₫₫₫'O4ª£§§g`` è+ 8‚ƒƒù̀Bmø¦¤ Kü‹T°`ÁråÊéfO¶åË—wss;|ø°èX§Î;?~<$$$±&üXâo–YđQuÂjÔ¨¡ økL–íăG„„àÁƒØë×£|y¼x—/åíLgoGGdÊGG<~Œ2eàê ùß‹¨XîîÈ–-ö¿DDdi˜8¦ OOO½5{ö́])›¦k o•́̃¼ÉúóÏZ Ăơëé¯^Ơ$Û]ôÆT©Gt4ÂĂ»x₫|²{$q³1ÆÅ%²@È‚uÿ́"#Ă[µ̉ÚÛ§ÎKH¤ OŸ>Ư°aCîܹ¥;”rçÏŸ¿{÷®4f{‚ƒƒ“ØÚ¸qcÑ—¢LS…m̃¾V9+y* °y3¬ú)Ưë×®\Épå´Æ}Ô¨8%2fDúô1 €Ÿ²V§I“& ]‹´văÆN:µnƯ‰£-_¾|É’%̣$7Áf̉Ÿñ?Öăß!²L‰,Á=?ÿü#ºªñ₫=̃¿ÇäÉĐë8™'† A×®‚ga¦”Y´h‘è*¤µøÛ:/^¼xñbѵ°*L‰ÔêăGŒÓ>Asä@¶lhÚụ̀!o^äˇ|ù%‹ø+ ųgºÿ¾]½Ú©ti<|(ÿûø1¥§xøăÆaܸØÅL™Đ¥ úö…··àk'"² L‰ÔçƠ+”.Ä;ʲeC»vh× ˆ®´̉§G®\ø4=ÚÓÊ• j?pï6nDx8.\À… x̣Ĉ3FD`Ù2,[»Ø¦ ÆcIDd2&Djrî\2iM¡Bhß3fˆ®h¬ÈHÄ›5ĂÜ À˜1 oẓÄ₫3¤ÿÓÖ­rÛĐAƒ°paZ¾VDDV€S©Ă@£I4k6 oßB«ÅƯ»©5̃¼‰^½Đ¡J”€F“̀¿ôé“Ú/Z¶Ä¤Iض ǧB]=<е+V¬@H´ÚØgÎÀן}–̀¾‹ÅÖrĐ T}=‰ˆ¬ ï8©€»;ÂÂX¿hLƠ3?x€±e NŸ6ÿÁCB‚íÛơ×*„æÍQ©’cªôt÷ö†·7æÎ]¼|¿ư†$ZÇ/^»µ}{lÚ” ""²¼ăH$Ô£GĐhÈ€V›zYă/¿ÀÙ ̣çÇèÑ©’5&!(óæ¡{÷̉½É=qêTꜬlY,Z{32$$©û‹›7C£A¹rˆNÓ—ƒˆÈrpÊAó³ÙiˆÔL¥³Û‹™3ă¬quÅƠ«È›75Îvîz÷Ƶk¦́ûÙgpuEƯºÈ” ™2ÁÉ)6¸pÅIư¤cƒ  Ơ³xqüôÚ´I×@á?Ч>|H´À™3Öц‘ˆ’Å) ÇGƠD‚d̀¨Ÿµ¤Ú·¸¾}åÅI+SíÛ£];”,i¶³GGcưzܽ‹;pî\̣åõDÛ¶±q¯^øé'ä̀™ /J×®èÚÖ®EŸ>xÿ^¿@åÊđÓOøæ›T8=‘Eâ£j¢4wë48YcÇ©‘5îÜû 8‰¬±n],]*w,¹|'3k`o®]ñƯw8{V>ÑË—è̉åM•*É́»r%rå‚FƒR¥ ˜GƬºtÁ»wĐj1aB[LJFƒçÏSçÜDD†‰#QÚúóOèMTụ$Ö¯7ïI¦O‡FƒæÍ̃Z V®ŒMà‚€—ÁƠS§†:[GđƯwÈ–-Ṇ̃ׯ£lYh4hÔ¡¡©S§)S Ơ&<—ăgŸÅ̃€$"²mL‰̉Đë×h×.έU«ñ Û¶A£Iøáª—î߇V‹à`ố)ú¥ˆ+gNLŒ§O¡Ơ"&Fù%¾}û-4Ô¬™:UiƯZ-<@ö́qÖŸ= Ó§‹~©È:•/_^£Ñh46©̃¼×¶ 8P÷ÂæM¶ă6ˆ‰#Qru•ă–-Íûx:0MÂ}JæÎ…V‹k×/ŸèWÀ ¦M‹½ỵ$räH¸ØñăĐhP¨>M…JäÍ‹'O Ơ"C†8ë¿ù ñư"‘*Q¢„¿¿ÿđáĂu‹¯^½0`@¾|ùœkƠªu:ɱ>\·nỨÙ³öÙg5jÔØàóO®\¹̉±cÇ9r8;;W¬Xqö́ÙQQQ̉V£ÎŸQ»']=111 ,([¶¬³³sñâÅgΜ™́y¿úê+ÿ*É6‹!ĂiÉÜ+&º ¤/((Ht´Z@₫7v¬yíäçđºÙ³kß½}Ơ‰3êM¹uK[©R×(ưÛ²%Ơ*zèPç›?_ôëg(₫E²åÊ•«S§´øêƠ«"E¤OŸ¾K—.¾¾¾¹råruu½xñb‚ûîܹ@¡B…FŒ1~üøbÅXºti‚…ï̃½›%K—={Nœ8±jƠªZ·nmÂyă3j÷¤k¢'::ºY³fº;²cÇ­Q£€̃½{x̃N:åÉ“'‰›đkb³¿YLÍÏf˜ÔL|âèî.çŸnÆÏ@VS¶¬àË5„ioÊ‘#ÚܹM½½S­º¾¾ú'«XQÜ‹g‹₫‹•6çúđáCtt´¨+ƠK'M`åÊ•ºÅ»wﺹ¹Ơ­[7Á}Ë”)“#G—/_êĂĂĂóåË—XÔªU+;;»³gÏJkz÷î `Ï=Æ7>£vOº&zV¬XÀÏÏOZóå—_¸uë–!çeâhFLÍÏf˜ÔLpâØ©Sœ„Ă| ĐOf̉§×¦ƠçlJ¥đMùñÇDÓÇ R­̉™2éŸLơ,ñ/R†>₫|ggg;;»R¥J;öÇR_ưµté̉™2eÊ’%‹···¿¿¿̃¾çÎ+S¦L™2e )ïëë;jÔ¨ 2¤K—ÎÛÛ{Ç‘‘‘ăÆ+^¼xæ̀™ëÔ©sưúu]ለˆ)S¦/^ÜÑÑ1_¾|}úôyüø±Y.Y/qôôồ™3gLLŒ´ÆÇÇÇÎÎîÑ£Gz;¾ÿ̃̃̃̃ÇÇG¹²k×®"""âŸHwEÊ5/^0ỉ$£Î› £vOº&zªU«V @Ä2ûdÏËÄÑŒØÆ‘(•-_§Ó´™Ú5¾y÷îÅYyơ*>|€½½èKNăÇC«Å±c l2 ¶mK…³¾}‹}ûâ¬Ñhpâ„èĂ mÚ´ièĐ¡µjƠ;vl¶lÙf̀˜Ñ°aC­V àûï¿9rd¶lÙÆ;pàÀ7õtëÖm»bjËF½yóFײ-Ụ̀₫₫₫«V­úöÛo'OÔ¾}ûÚµk:t¨ÿ₫Ư»w?zôh—.]t%}||¾ûyó9²|ụ̀+W®lƯºµÙ¯ươë×·nƯª[·®F£‘VÖ«W/&&&~“A{{ûË—/O:UZuơêƠ2eÊ8::êo «¿&z›‚ƒƒôèÑ£R¥JRö’/_¾ăÇx^̃q4#ÎC”jâ ¥}₫¼Y-›₫@†œ7T£Á™3а!ˆ³I7k ù_"­^^¸q#vqéR,[†˜ѯ„ơpwwÿú믥ÅI“&-^¼xăÆ:u:{ölÆŒb?¿ÂÂÂDDDH…sæ̀9aÂ;»ØGjÉ–÷öö.^¼¸.®[·.€Î;§K—N·¦~ưúLjˆpqqÑh4'Nœ¸ÿ~₫üù,[¶lYBĂëGEEé:¬$¨U«VI_»®n...Ê•®®®Rå3eÊ”;wîhذ¡®†I;räH¿~ưîܹ³xñâ¢E‹^¾|Ù´ó¦°Úñk¢·ơƠ«WV¯^Ư¦M›U«VåÍ›÷èÑ£>>>íÚµ HÉyÉL‰R2kœ>Ỵ̈C*Å@Ó¦HüăÉíß%J蘣Ñ`æLŒmÖ“]¿3ä1'µZ4j„½{E¿VÂËË+}úổ¢“““§§çƯ»wdÉ’åäÉ“û÷ï¿yóæíÛ·¯_¿®7†‹§§§”5R̃ƯƯ]uùbü5ç̀™óơ×_,XĐËË«Zµj7nÖ¬™²:oß¾Mâ¶6¹ï1º³¿yóF¹̣ơëײfÍÄ·o߈ˆ8uê”O•*U²ë GúɃ† ²}ûö¢E‹8p ^½zÆ÷îƯ»E‘W®\Ù Aª`MôdΜ@á…ׯ_¯{µ›5köóÏ?wï̃}óæÍM›65íå"Ó0q$J»w˱Fƒ±cS~H½¬qß>4l(ú2U) 11psƒ̣£d̀Œcî[cÇ¢gOy.í}ûĐºuê4®Lƒ‰®1̃¾}ûáǶmÛîÚµ«R¥J_|ñEË–-«V­Z¡BeI777)6¤¼áÜ®]»;v>|x×®]~~~GơđđPsuuM6;L‚‡‡‡Ư³gÏ”+CCCäÎ;é}3eÊT¿~ưéÓ§wêÔiÛ¶mưúơ‹_fƯºuưû÷wvv₫í·ßz÷î-Ư‹5ê¼₫₫₫̉bƠªUM¨vb5‰.Ơ«WWæèƠ«WđƠW_™ür‘ ˜8¥¦Må8<<åÇÓËùx:ivvxư@ïyFƒ±h‘ùΔ#´Zùíùë/têdö9$SÉÂ…¢k¸7nDFFJwû̃½{P§NăÇïÚµkΜ9Æ “ '1j´±å“vçÎbÅùøøøøøÄÄÄ,Z´hèĐ¡K–,Ñ £<~JU;88”,Ỵï¿ÿV® £3}út;;»úơë§¼Údѽs¬Íö´R³´îUmÖÔʃ5m¦×‘ª̉øMIŸ^¿W¯b,?3Q}àÀ´¼º$Xâ_¤ ä̀™3}úô­Zµúî»ï6l jƠªÑÑÑ÷ïßwrrÊ—/ß7ß|³`Á‚®]»æ̀™3[¶l… ̃µk—n_ǻ#Æ–¿té€eË–Ikt#Ưü÷ß>|(Uª”½½}çÎüñÇ=zdË–-kÖ¬fùI?sLÙ²e]\\¾ùæ›3f”(Q"sæ̀§N̉m>}º››ÛâÅ‹u‹ºûŸ₫ùøñă¿ưö[oooÇ–ëׯ(Q¢D¯x₫÷¿ÿ%{̃d^ídk¢çÙ³g¥J•JŸ>ưW_}5qâÄ+3fŒ!çƠ²WµY1q4?›ưaR³4ÍQÆŒ‘³‡úơSx0e*̉¢EÚ]DHû1’üươsGƒgÄ0˜̣è#G¦ñ&Èÿ"é’¹£GÖ®]ÛƠƠµxñâ£Fzÿ₫½nëÑ£G«U«ǽ́\¸paŸgÏ-[¶,[¶l5̉ÆK-ŸDâ¨ƠjCBBz÷î?₫ 2äË—¯K—.̉8>)¤—8jµÚ—/_öíÛ·hÑ¢îîî-Z´PN ÷ư÷ߘ3gn1&&fƠªŨ̃̃Y²dÑÍU½~ưúỊ̈×_%viêÔ©É×VÛè ëß¿¿———‹‹KµjƠ₫øăÏ«eâhV-z™›§§g`` èZPÁÁÁi÷̀Bù\9e¿_Ê#µiƒ?ÿL£+Hiú¦(89A1 `ö£Ê·­P!ܽ›öרd‰‘ ,X®\¹­[·®HÚ)_¾¼››ÛáÇEWÄ:uîÜùøñă!!!‰0á×ij̀‚m‰̀JÑ>}ú¤äHÊô£}{kËzûΠ ÑàäIó@™‡áÿ}ÅDDfĂđȬ6n”ă„F62ḱÔ ›6‰¾.ë̉µ«₫]ÆêƠS˜çÇơñ£'×…–HçéÓ§6l8~ü¸èX•óçÏoذA7™!™G"ó©\Yơº̣£eK9ÎëÖ‰¾.+¥Ơ¢@yñ÷ßQ½º™.æ̀‘ơÆR¢ä4ỉ$~`«wăÆN:I½¶É,–/_̃©S§S§N‰®ˆơ`Gó³Ùvj–FÍé̀Ѻñÿ‹s‹ÊAEµqÔ3u*&N”=<đßf:´§'nƯëÖÅ¡CB.‘ˆ’Å6†ăG"3QN±fɇQf‘‘¢/ÊL˜å¸ÂO˜ï₫ ̣Cåđal̃,úZ‰ˆR‰#‘9œ8§OåÅnƯL;Œ2eY¼œÚ)Mä̀©g×l¹£̣¸:ˆ¾P"¢”bâHdC†Èñ̃½¦£\99₫üs  ú¢lLjåÊù ÙØ‘ˆ,G"s¸tI¿øÂ„̀ŸË—åÅóçE_‘M̉j‘=»¼h4oà@”*%/Ö¨!ú*‰ˆLÇÄ‘(Å”41áï̃Á×W^´â1ê÷ä ªT‘5DG§ø W¯Êñ‰hß^ôU™ˆ‰#Qué"Çk×p€L™äxçNÑ—cóNB×®̣¢yZ*¿ lÙ"ú‰ˆLÄÄ‘(Å<‘c77c÷nÑBÛ´AÓ¦¢/‡ÿ8ƯÛÍó̀ZÙ†¡bEÑ—HDd &D)£œ½Î¤¹Gv́cÎ+¨Û¶aèPyÑ ¹£²×Ô…  }‰DDFcâH”2Ư»Ë±ñs *ÓÎ+¨6óæ¡ysyÑ ¹ă‘#ŕî.úúˆˆŒÆÄ‘H½û‹́2¡BÛ·ĂËK^´KáŸ̀Úµ‘!ƒ¼¸b…èë#"2G¢øùg90Áؽ۵“cö¤V­k×ä̃KZ- NÙá̃¿—ẵ½E_©Eụ̀å5F£iÓ¦èºX•ê^ؼyó®‹•`âH”cÆÈñ”)Fíª́Í1*÷ö­¡Aƒ”Nyo¹m[ÑGjQ¢D ÿáÇë_½z5`À€|ụ̀9;;תUëôéÓÍ{åÊ•;æÈ‘ĂÙÙ¹bųgÏ2­°QçÏ´ƯkƠª5ỵä¤ËÄÄÄ,X° lÙ²ÎÎÎÅ‹Ÿ9sf¤bVÖÄÎûƠW_ùûûWQ²E)¤%s+V¬˜è*¾   T9. ÿK»]­Dj½)©Fù–ơïo¾c¥2₫E²åÊ•«S§´øêƠ«"E¤OŸ¾K—.¾¾¾¹råruu½xñb‚û̃½{7K–,...={öœ8qbƠªU´nƯÚ„ÂF7>Óv¿xñ¢Ư÷ߟD™èèèfÍéîÈ;¶Fz÷îmày;uê”'O$o¯‰Í₫fÙêGVj²Ù&5K•eÄù³áB£vM—Ñuùrѯ —8jăæ{ǧà@«WËrpHƠ:[ô_¤¨¨¨¨¨¨´9ׇ¢££E]©^â8ỉ$+W®Ô-̃½{×ÍÍ­nƯº îÛªU+;;»³gÏJkz÷î `Ï=Æ6ê¼ñµ{ddä̃½{'M”-[6I'+V¬àçç'­ụ̀Ë/ܺuËó2q4#&æg³?Lj–*9©7öíăíF­Ö2Çÿ₫3ß{§<Đ©WgKü‹T @áĂ‡ÏŸ?ßÙÙÙÎήT©RcÇưđáƒTà×_-]ºt¦L™²dÉâíííïﯷï¹sçÊ”)S¦LCÊûúú5*C† é̉¥óöö̃±cGddä¸qă/9sæ:uê\¿~]W8""bÊ”)Å‹wtt̀—/_Ÿ>}?~l–KÖK===sæ̀#­ñññ±³³{ôèQü}u•T®¹xñ"€I“&[بóÆgÔîÿư÷Ỵ̈ùg̉‰cµjƠ (XfŸ́y™8Û8™$&FÚU9ô«W¢/„Œáá§CTèyñBSÚj̉ mÚ´ièĐ¡µjƠ;vl¶lÙf̀˜Ñ°aC­V àûï¿9rd¶lÙÆ;pàÀ7õtëÖmûöí̉¾!!!5zóæ®e[²åưưưW­Zơí·ßN<9((¨}ûöµk×>tèPÿ₫ư»wï~ôèÑ.Ÿ$ûøø|÷Ưwyóæ9rdụ̀åW®\Ùºuk³_ûëׯoƯºU·n]â'¬^½z111ñ› FEE M" ""B*œ3gN)k4¤¼···.kP·n];wÖeêׯ¯+ogg§ÑhNœ8¡»E`Ù²eÏ=‹Ÿ5FEEư•¸d¯]W7—¸_+]]]¥Ê'áÈ‘#UªT9wîÜÂ… ‹-jTᔜ7…ƠNÚ«W¯¬^½:O<7nÜxóæÍ;>~üØ®]»/^¤̃y)A¼ăHd¼ÿ•ăB… ßO9%a:¢¯‚R@«•ŸS‹îƯaâ-§&M°{wl<{6FŒ}ejáåå•>}ziÑÉÉÉÓÓóîƯ»²dÉṛäÉưû÷ß¼yóöíÛׯ_×zÆÓÓÓN1V{²åƯ³øẹ̀Åøk8::Ι3ç믿.X° ——WµjƠ7nܬY3e=ũ¾}›Ä#lmr£¶êÎ₫æÍåÊׯ_È5kb{=xđ`È!Û·o/Z´èêƠ«—Ä),lÔyï̃½[¤HiqåÊ• 40¡Ú†Èœ93€Â… ¯_¿^÷j7kÖ́çŸî̃½ûæÍ››6mJç¥1q$2©Ï©ÿ]}øˆÏđ,¡¡ BP^ä-ƒ2¹Kt½TáäIT«çÊeêî»vÉèÈ‘iœ8ºÀ’J888¼}ûöÇmÛ¶ƯµkW¥J•¾øâ‹–-[V­ZµB… Ê’nnnRlHyĂ <¸]»v;v́8|øđ®]»üüü<===ª÷œÔƠƠ5Ù́0 vvvzYCCCäÎ;Á]Ö­[׿ggçß~û­wï̃̉íU£ u^i±jƠª&TÛđ@ơêƠ•9zơêƠ|ơƠW©t^JG"ă=*Ç+«Ư¶CÑ—ÏŃ\‹µk±ÖØ‹ Hôï₫™‘YôE¤©ªU1p /]ÔhLÍ‹‡Ô9`ëV£Z>¤Đ+¨·sÖ7"##¥»}ï̃½ ¨S§ÎñăÇwíÚ5gΜaÆI…“́ÚØ̣I »sçN±bÅ||||||bbb-Z4tèĐ%K–膃QçΉ§U«VIŸÈÁÁ¡dÉ’ÇmËŕØ1Fă¥œó“íÛ·wï̃ưË/¿\²d‰Krí¦“(lÔy»*¿BŒª¶áœœœ *ôèÑ#åJ]¦˜'Oc_.J!¶q$2’r c₫*}ÿ½oÜ(ú*˰Lî_s47!kpwFc´ \tÇ©‹ºs0Gô•¥‘E‹Y‘-ûø˜t”ë×å˜É|̣́ٳٳgK‹S§N}ưúu›6m>| D‰̉¦Í›7¿}û6±;|Æ–OB```•*UfÍ¥[´³³«S§ϲ%ºGƠ‰1ä\}ûö½wï̃;t‹OŸ>Ư¼ysÆ ,¨WR«Ơ3&õ¼kÖ¬I6kL¶°áçMaµƠ³gÏC‡;vL·3}út;;;] ÔÔ;/ÅÇ;DFRÇ¢Œ“¤|H-|î«-Ø̉Ưßá]jüÁ‘`¦Ă8ÁW›Ê^¿–5/_9sà́lä!́́1£<‡ơ¥K(WNôe‰—3gΉ'>>Ï=[¶lY¶lÙ5j$í«öësà6ŒsåÓ';mh¡Í¬/ñ2±ơP¯ ºtE׌ÈhÂñ÷cÿoøm ¶$[̣NTCls¾)¢•,‰€€Ø¸kW(ú LùsơâƯ;RÈÿ",X°\¹r[·n]‘´S¾|y77·ĂÑiÎuîÜùøñă!!!‰0á×ij̀‚m‰ŒñáƒתeàNRÖÈéEñ„§́̀}á«…V íÁƒ>¦e¢áflÖJ í·ø6±’ƠQ]Í$L2æđàÆ 9₫ㄆˆä˜-ú‰H­˜8ă—_äxôhCöĐûF–SÅÔDM 4·pKo}7tÓexs175Î;SuÇÿ ·ư?h i—«]4¢ÓîåHeÊ®öÙ²¿ưúr·÷(Ùˆ§OŸnذáøñă¢+bUΟ?¿aĂìvJ9&DÆP&Í›²‡¢7gœicRƠ,Đ@súŸ@Çq\ í¬I›jŒÂ(]Ù½ăoư'Ă?p(‰’iô¢¤²ZµP¾¼¼o²7,[&Ç5jˆ¾ ‘4iRµjUѵHk7nÜèÔ©“Ôk›̀bụ̀å:u:uê”èX¶q4?›m÷ ffkNgdLj89µ‡äC¾è7åù¶AÚ ˜ ÿđ_ Ô¸‹»ñ7UGơøi®%R₫€„„ Óo¦₫E"JÛ8w‰LRº´!¥J*î¦íÚ•ê• B½¬ñ7ü¦…VxÖ rÜÁ-´1PoÓ œĐ@Ó-E×1¥”³OçÍkü₫ß*‡vë&újˆˆô1q$2˜4I€Q£ ÙCٮƘăLÑ} £°rMk´ÖBÛửî%2̀",̉B;ë™₫#¹íØ®Æ Ü5ÄÛÊG¬F7vœ:U™Í’ˆ(m0q$2˜²cÉWÎ^ûÛo©[5 4˰L¹F íV¨z4“6ám´Đ.Æb½ơ7pCÍ Ü0é¨â<)Ç¡¡ 3rå4n¿₫*újˆˆâ`âHd°  £?}*ÇưRó®ŸåbtĐÂbÚ.À-´?âG½ơ^đ²Ü~3˗˱»»‘;+üúkÑ—BDG"ăåÎlåĐÅq'ư2§0„éeqq#Ô1¶1Æc¼ÚÚ¨­\€ 4³`yL{÷†rúâ5iÔ‹ˆ(Ơ1q$2̀† rl@Ƕmå8ñY¾R䮹C¾å-´åQ>‡́h¡Ơ»Ñ8 £4Đ$1í:}ü(Ç´kˆKùĂfʸ>DD©…‰#‘a” ‡7jWƨâÙ‡}¥!÷́₫¿¼Â+A/™]Çơø ³ ËTL5éx´j%Ç;³ç—_Êñ–ä'r$"J3¢+@d!Ο7¼́ˆr#L=^ª›/÷kB‘"ïV±¢Ÿ9#ú"ˆÈÖ1q$2›Å‹åxèP3°.êJÍàpE_¢êh¡-ŒẨầ©‰¢+•°!Cäøî]ƒwÛ¶M[·}Ddë˜8%)X1àK’ÓÆ)SüùÍpæïñư‘#)úµP©;¸3r—“ă8®¼M«*Êf¯Ê“‰HM˜8%ÉàÊá•7‰Ls‡•Éͳ'Äwøî6nK‹1ˆQgweGûGđáƒa»q@G"R &DIZ´H+TH¢àơër\®\JO[ơ¤ø^ˆ~,@ÑK¯5Đ|ÄGÑở·}»ç̀iØ>Đ‘ˆTƒ‰#‘ŒPtÉèÖ-¥GË‚,R<ƒƯà&úú,†Z8H‹Aù¸_ 7—ă/đ̣¥è ƒ‰#‘a’œfùr9^³&Eç™ù/ñRZ\€¢¯ÜÂD"²jI‹uQ÷|#ºRq8 dž̃t8P¿cÏz"ÆVÇM›6uèĐ¡|ụ̀Ơ«W?~ü‹É<ûûøñẳ¥KÛ¶m[¾|ùzơê 6́öíÛ†¬ÈéÓr¬Q/7òvN_øJ1›6æ(Ă8iq:¦‹oEWJV¿¾¿Ç ØGÙdbÊÑW@D¶Ë&ÇÙ³gO˜0áîƯ»•*Urvṽ²eK¿~ữ%>otttÏ=ùå—/^Ô¬Y3wîÜ{÷îmƠªƠ¹sçD_ ¥-e'Ø+uô¨!¥ ¢́̉±‹Sp$[7 Ó₫‡ÿI‹?á§>è#ºR²'ä8W.ѵ!"2˜ơ'~~~{ö́ñóóÛ»wo=®\¹̣‹²·l\6l¸xñb“&Möïß?õ¼5kÖ¬X±À„ D_ ¥-ĂFOQÏ· –û£¿»Ă}ˆ¾~ËÖ-B*-₫ß•U-îôÚAÁ3~¼¯X!ú ˆÈFYâ¸qăÆ˜˜˜áÇgÏ]·fܸq®®®»wIp—‹/èÙ³§ƒCl+ûªU«–(Qẫ½{ÏŸ?}A”†₫ư×R׮ɱ»»!{$à)úÁOZ|†g¢/̃|†Ï”ûwa×çø\t¥b]T̀X¸°;üø£+¿¬¥!ëOÏ;gggW§Ni½½}­ZµÂÂÂ.^LxfÛœ9sPæˆZ­öåË—vvvR*I¤sÿ¾W©búq<à!ÅăoÑ—eU”¹ăE\̀ ‡̃N]åËÇYTNl™¼ˆÑƠ'"e剣V«½sçNÖ¬Y³fͪ\_¬X1!!! îƠ¼yóŒ3₫øă§Nz÷îƯ£G&NœøđáĂ:¸¸¸ˆ¾&¡mÛĶ(oư('#6J~ÈSÍÔA¨!ú‚­2w|„GvêøÓ ÇINK”P¡#GDWŸˆl‘•ß?‹ˆˆˆvssÓ[ïêê¸÷•<==׬YÓ«W¯^½zI+»uë6^ÙÆ(Izkö́Ù#úŰi>4v§½{³ŸÖ©óV9÷ Â¥ø³Ï‚)•”éo<Èư@Zü=ø÷` d›’A*T°.ÖB«&(ئ…©(C̣ÏÏ÷“êGo7zt₫uëtñÇ~ư₫Ư»75j•Æï ‚op7]µ°̣ÄQ×uÚÉÉIo½³³3€W¯^%¸×ëׯ§OŸ₫öí[//¯̉¥K‡……?~|Û¶mUªTiذ¡!ç }餯`Á‚Æípø°f2d¦°Ë‘ĂøS ¡ÿƒL;ˆ…Jă‹Ơå‹̉b¡‚…„x´{74‰[·.pë–¡;¦¿};ơ^=›ú!´|SÄÿ±ÿ‘°̣ÄÑÍÍM£ÑDÄkO÷ă3f̀… Æ÷ƠW_éÖ…ˆDdfd[ŸŸ–ăÄÓ~¢ü‚2t¨Ø‘ ²̣Ä€‡‡GXX˜.S”èZ¢yxxÄ/ @¼ïñºÏqÛ“ĐωY”A)‹±¢¯Ó†„#\̉:áî0u%s5J“ÿfú¹b8¡;V›ˆl“ơ'ơë×₫ûoy|­V{ôèÑ,Y²”×P @{{ûÛ·okµq?éÚ7)RDôQx̣D™lP9„ü¬YFŸá_ü{W¥Åé˜.úmK$"¥8 abÇèéÙS“Ÿ‰:GU%"gư‰c‡́́́,X k×ÀÏÏ/44´]»vé̉¥Ó­yûömpp°®Û££c­Zµîß¿?õCä‘âS8%ú‚m‘̃=Ê^JilåJ9N~&jå°O¾¾É•&"2'̃}5«ôûï¿Ï˜1#wîÜ5kÖ¼ÿ₫éÓ§K–,ùûï¿KĂốÚµkĈE‹Ư±c€ĐĐĐöíÛ?~ü¸@%K– »páBLL̀„ ºví́é<==Ù«Zm‚ƒƒë“X³&ùQv˜1ö×h Elµ,Ẹ̀¶8#‘ÑoJêPö³Îƒ>>/^T>@ŒŒÜ»wo‹-Ö¯_/º‚d’ëRṃ„1çpN¹Ø-D_*Å¡¼ïØ₫Á?i\eÛÙDnv2p oÛ–Æơ$"›¥¢ÄÑÏÏoË–-Ê5™3gÖ|jjóĂ?œ={Vt5É(Ç„Ú) óæ5âÀ̃đ–âû¸/ú:)A’â ¨đ ¯Rp0£µWÜâü'é¬Uù•¥_¿´¬$Ù2µ$?~ôó‹m^°`Á \ºtéüùó—.]Z¼x±nÖ–èèhÑ5%œÄÆ7oä¸L™d%;¹§¶|È'ú:)Qp?öK‹npKă L’g/Ç A‰—³SüơæŒVD”VÔ’8>}úôÍ›72eÊ´zơê† :::Ș1c½zơV¯^í́́ à‚4Đ‘ “'˱Q7zj¢¦?ÆcÑ×A‰j€K°DZTv¸Nß/Ç‹'Y´jU9~û6-+ID6K-‰c¥‘æÍă¯SÎ.8x°¡GRö¤ÎˆŒH­ù¯É,ú£T‘Ó8w,[VM¼œrvBå"¢T£–Ä@Í5}üøQoSddäƯ»wx{{›pd"#lß.Çæˆ¹H1o7Z„S8Uå¤ÅÏđYúÀ9®ŸÄxäËñÏ?§ákCD¶KE‰ă¸qặåËæëëûø±üÉúôéÓ‘#G>}ú4W®\ƒ ¿ĂCd$»T߸!džg•»°K]áöÍæÈ4Ê^ƠÏñ¼%Œ{ÉTîîr̀ql‰HUT4ă¤I“råÊơàÁƒĂ‡;v¬X±bîîîaaa·oߌŒ;wî)S¦èíµpáBÑ'ë¢LÓ§×Û¨|΅Ä´fh&żƯhY”ƒ;nÇö™˜9cRvHƒ,X úÔµ+₫ø#‘ríÛc󿨸Ö-+&öå""«§¢)===MØK…₫Ǿ4DjfÄ„]IN6˜ÜL„ Ø­mÑVgGö'x"úÅP EMÙÆñ8WGơ´8©!?l×®¡t騏K—ÄL#XĐûb;ø¦¨Í~Ö«èQ5‘ºdÉb–ĂHY#x»Ñb)߸¨‘6'­)÷ÂÇÿ›c¨T)9^»6í_"²5*zT=(©!ˈ̉Ä‹r¯ẵ½ră5rÜ"±‰Í•_b~øAÔ‹CD6BđÇvíÚÈ=ûâÅ‹uq²ôæ³&2§Ă‡ )e`ëÇ5?öoá–èk#3ˆ@„ÔQ&ă1₫'ü”z§ëÖ Ư»ÇÆ;v$RHùă˜ÔpáDDf 8q¼ví€Ü¹sK1‘:-_.dž<§>‰“Ŕ WÑƠ'³QĐ3 ÓZ£µ7Rqb‚æÍå”ÑßƯº%TÈɉSQÚà£j¢„(;«ˆ;ƒ°!Íq•#¶ @ôơ9… D+£rªK9“‘t÷QỴ̈«Œ̣ñ6‘¹ ¾ă8ỵdNNNRL$Œ̣w¼.Ơq¤÷x¯\̀‰œ¢¯̀)̣̀Çü¡ª[L›NÖ:‘‘ u=c> K>yrâ &QJ N;uê”`L$@â“ *GB)S&ù#U@)̃‰¢/Œ̀o†löƒ8¨[tƒÛK¼L¥sươZµë×DZcI–¾{WôkCDÖŒª‰>ùùg9;‘±ñ(ŸM7ESÑF©âHñ+¼J½7º¥b́¿ÿN¤'$¢4¡¢qu"##ï̃½{ÿ₫ưèèè 4mÊaJïß'¶E™8¶m›̀aº¢«OÁơRv”ÙƯ;°£9§Æ‰̣çÇưû±ñ k×x%&M’×NŸqăD¿6DdT4WµV«]µjƠ¬Y³>~ü˜D1ơO i³óWª™A3½&>7°QST+ç5N³¦o–È:¦ßF´ƒâxê½ăÉÿJ%2fÄ»w&ŸÈ:̃+Ă7E…lö³^EªÿüóÏiÓ¦%5¥…B…”K¾4k–̀®¿à)VÎRMÖÊö‹±XZT~m&ñ{çDD)¤¢ÄqơêƠRlooŸ+W®Ü ]M²RÊ{8_|¡ÜbTÇÑ-Å[ÀÁêm ¨ˆ̉bi”N³üú«‘P å\G¡¡¢_"²N*jăxÿ₫}ööö3f̀¨_¿~¦L™D׈lÉ₫ưrܰ¡rËï¿Ëq¥JIăIqAđ¹’ 9‡s̉½Æk¸6³G`DÊ©oČϙƒÙ³ă•˜4Iúḥd̀Ÿ/úU!"+¤¢;… àééÙ¢E f”Ööí“㸉£áꣾ_ÄEÑ—DiJÙºq$F¾Æk³ŸÂƯ]Ÿ>·¹vm9^°@ôëADÖIE‰£··7€7õˆ®Ù$åÇ̀™¥đ¤6 ü¢_ "²**rĐjØl»5K¦…ĐwßÉÅO {v]h`Ge›¶·x› LÊ VßlKùƒñ ¾ù ?™íÈIüd=‹Ê•că‘#1k–±·ú÷ÅñMQ!›ư¬ç£j¢¸cñ|ÊMì‘$Ê>RÓ0- aæ:²½½GFÆƯæí-Ç ŒND”"ªKƒ‚‚üưưCCC<₫|ܸqơë×oӦ͢E‹85¥–Ó§ă¯SvHựËDwí‚.R¼KD_ ©Ë‘bw¸›~ ¸ Đ‘”ˆÈÜT4å €µk×N:5::ºråÊîîîC‡=₫¼nÓ7N:µzơj̣! Qª1°ă:¬“â₫Hrˆp²=µQ»%Z₫ÿÓ-DÁ`§ü°-[Êñöíñ6W®Œ3gD_:Y'Ưq¼yóæ?ü­[¼rå”5êœ={vË–-¢«IVÍÍM ç̀‘WW©’pñƯØ-ÅƠQ]tíI₫Â_R|÷æĂ9Gs$"óQQâØ²eKïß¿Ÿ3gNpp0€ôéÓתUëÅ‹7Ö́X³fMÑƠ$Û’-[Â뛡™³[ (7rûÀGZ̀†l)8÷Æâ§¯Û€ äøSGC"¢”SQâØ¡C]Gå''§èèhƯ=3fܹ́³‰G'JVúôºÿïÜ)¯KbGIFd]u²K!çw¡]ˆ…)8Xœ›‰ưØ\‚ˆRŸG‡?₫øcĐ A*Tđ̣̣êß¿ÿøñă¥­îîî«V­Ê²éàˆ’̣©Ku²Cw‚ǗÑ~¢ëMF9:Ï I­ÓôW Gưºè‹&"+¡¢Ä@úôé‡ ¶nƯº?ÿüsäÈ‘\\\¶mÛö÷ß—+WNtÉêܸ!ÇŸºT<(¯Ë˜ĐÍÄ Ø Å}ÑWô5åYŒÅR¬AfĂúî;95K±Aù›Í‰ÈLT”8Îư$$$D¹>}úô%J”°³SQUÉz(»T'4ˆc|‡ ·« 6º%S ÀÈ]ưz£·É‡Ÿºy ('³g3q$¢Ré£êÀÀÀ½{÷®_¿><<<**êƠ«W¢kDÖ(̃X<’øÏ÷”Ă7nÆfÑU'kă ç -æFncб£ÿ₫{B%Ο}•DdñT—8nÙ²¥nƯº-[¶ôơơ4ỉóçÏĂĂĂëÔ©3õ<ơt'+÷ ÉÈqü!÷Öâ@Í””ó>£µXḱÜƯåøƯ»O‘ƒ,‘¥SWâ8}úôñăÇ?zôHo}DDÄÂ… '+§Ö"27å<1ÆÙ´ Û¤¸5Z‹®)Y-åê®èj́î«WËq±bŸ"å× ??Ñ—HD–ME‰ăơë×W®\©‹ííí¥ởPëÖ­;wîœèj’5ªZIάÁçÔ”f¾Å·Ŕ£öm̉D>ü)Û58!úúˆÈ²©(q\²d‰V«µ³³›8qâ… ¤ơ®®®óæÍ˘1#€U«V‰®&Y‹'Oä¸aäËF#Zía¢T3S¥ø ̃¬Á£v÷đăØy‘Ê•“W)ïIOE‰c@@€¦M›vëÖÍÑÑQ¹©Q£Fµk×póæMÑƠ$k¡́Ó°áưụ̂’Oœ‚?@Äm&%w\¢”R>°îFí«|Ư¿¿è+!"«£¢Ä1,, @b³*-Z@¨aSf%O9ˆcK–ÈKÄ)¨L¿Ç÷¢ëM6aFIqvd7|Ç–-åx…4J}åÊ¢/ˆˆ¬„GOOO ¶bÔjµgÏP¨ÇÏ#3‰;2qüüs9ṼûQÎ)L”ª~ÆÏRü Ï6a“áûfÊo•̣ËĐZ£;kIT”8–.]ÀéÓ§}}}?®[ŕر!C†èÇ’%K®&Y‹ÿ₫S.½|™p)v‹!Q”_Z¾Ä—†ï¨|Z;¯B¯^̣*å—$""#iÔ38bhhh«V­’xíâậ×_åÊ•KtM“áéé(ºGpp°~+âö¡V+-åËe{Gå]F&ó $$đ¦P\C1tèâ¼Èû Ü1îOwb«Æ÷E…ø¦¨Í~֫裻»û¬Y³²fÍàV—3f¨?k$ËS¶́áẶ’̣™^‚¤8#2®(Ùœù˜/Å!Ùí¢kDD¶NE‰#€*Uª́ß¿À€^^^™2eàääT²dIŸƒÖ«WOtÉZ¼~-Ç *ŸƯ);¢öDO)>‰“¢+M¶è>HqK´4p¯E‹äxâDç±À^†Dd*=ª/<<ÜÙÙYt-Œf³·¯ƠLÿAÏ–-hÿ©ñâ¾}/äq•¿|NªøôÍ@}Ñw–éâtH÷ ÙKÿÑôÑ£¨S'vyÊL˜Ø|_Tˆo Ù́g½ºî8J¢££~üø/^$»ËƠ«W‡ R·nƯJ•*uëÖí̀™3¢_!J3?ŸÀj>§&ºù›saN¶¼²̀âÅq勉™#™DE‰ă… 8::®ZµªQ£F2f̀Ø Aƒ5kÖ8998Ÿà‡|rfÏ=a„»wïVªTÉÙÙyË–-ưúơ{÷î]»:t¨sç·Ê={ụ̀åÿùçŸ=z:tHô‹DæV³f‚«ïâ®çDNѵ$€̣(_å¥Å^è•tù)SäxĐ _>yù÷ßE_ Y$%3fPªT©œ9ơ?§³eËV¦LöööÆ600ĐÏÏÏĂĂcÏ=~~~{÷îíѣǕ+W~ùå—ÄvyơêƠرcÖ¬Y³aĂ??¿uëÖ¥OŸ~âĉ111¢_'J±gϤ0¤ls)₫ê«Ø`öI+Û èêÉ”7WaU48è¥)%åË—ôñ£₫(eQQQAAA0i®ê7ÆÄÄ ><{ö́º5ăÆsuuƯ½{wbYà–-[^¿~=`À€Ï?ÿ\·¦L™2M4 ½zơªè׉Ŕï¿¥pÉ­¥XzÇçÔ¤fÛ°Màta__9ö÷>ưM#"2ÇÑ£GçË—/,,lذaÿư÷Ÿ´₫éÓ§#FŒx̣䉱‡=wîœ]iä[À̃̃¾V­Zaaa‰uµ9v́˜F£iƯºµrå̀™3Ë–-+úu¢;vL —́’̃y{ÇOđDZ™™ =,Qh…VY!÷„II;Wû÷Û̀qăFÑ—BD–Ç!å‡H‰Áƒ+]]]:tèØ±cE‹uww ½}û¶®ÓŒ³³óï¿ÿ₫¹1ߘµZí;w²fͪ7v±bÅ„„„T¬X1₫^×®]Ë’%K9Ο?ÿÏ?ÿ¼|ù²xñâ 4Đ5»$‹§HŸ?×ßø'₫”âîè.º®D C˜4­Ñøa2&²WDàăƒ¾}c——,Á—_¾"²0‚Ç$¸>*** @oåëׯ+Ÿ˜ˆˆˆèèh777½ơº ơyü¬øøñă›7o)̣ư÷߯[·NZŸ7õ9sæ”*UÊózzzê­Ù³gO꿜”¨‡JqÁ₫‰_ Gèààºè.M489xr08̣|jQ¾)d¬ï\¾ûá³t± àDGçiß̃}óæØç£F½w>œàÄ |_Tˆop7]µœ8¦6]×i]l%Ưد^½¿Ë›7oܹsçÙ³g3f̀¨S§Îû÷ï7õ¼páÂaĂ†íØ±Ăû¶9¥ÊÅŸéơ(ä‰b¶×ˆ@D»yñ6ÙdL₫?H‹Ç ÓùêƠؼ96̃´)‹²W`b¯?ßâ›"Vüơøwˆl„àÄqĐ A©z|777F¡·><<Ÿî;êÑuî0}úôzơb§ö2dÈ£G¶lÙ²sçÎöíÛ‹}ÑÈ\–Ø Â§₫Qº¦_«!:EW()Zh¥Ö=Đ#±ÄQùU÷Á }{9‘|ùñÈ%Apâ8lذԽ<WW×øw_¿~ @êg­äää”1cFFS·nœI½4h°eË–›7o}ÅÈŒÖÇÈ ¼ÜƯ 'zJka‘è %£/ú.ÅR]\å.áR‚Å5Ẫ½±ñ•/F•‘Ç%K0nœè‹ "K¢¢^Ơ©ÄĂĂ#,,L—)Jt-{<<<Ü%{ö́é̉¥Óh4Ê•º'Ôºn:dÁjØJd¡üà'Å—qù®%XlÁ9²¦²¼đÛo¢¯€ˆ,ŒºÚ8={vÁ‚·nỬËó”nܸaÔ1ëׯø÷ß7kÖL·F«Ơ=z4K–,º‘#ă«[·îªU«nƯº¥ë|­£»§xñâ¢_$JÅ Ưô1Ê[Œ£1ZtE‰ r7‹#öïRi”ÖB¿L‘"rç7à̃=ÑƠ'" £¢;gÏíѣǙ3g^¼x8cÛ¡C;;» èÚ5đóó m×®]ºtétk̃¾},u[kÓ¦ € &HƯ®¯^½º|ùrWW׆ ~(e>ų_Iët Cj&f®(‘A<áỴ°b_)~°ăS´ăåœ[t­‰ÈR©(qœ?¾V«MùqôäÊ•kôèÑAAA-[¶œ4iR¯^½fÏíååƠẀ 8zôhăÆ|·D‰#G¼|ùrăÆ Ô«W¯N:}üøq̣äÉŸ}ö™è׉RæSâ¸̣HÈ]ºˆ®Q œĂ9)^‰• –‰ó´:ßÿä…„F§""JŒUK}ƯÛ·o߬Y3©wsÊơîƯ;[¶lÛ¶mÛµkWΜ9»uë6|øpƯˆ<‰éß¿¿»»ûêƠ«O<™%K–úơë:´hÑ¢¢_$J±óçuÿ? oåj©‡€±+º–DÆY‡uÑYk ‰ÿÀºA9ö¿Qa´°d [:‘á4©q“Ï4uëÖ}ô葇‡Ç‘#Ǵ́Tt+ÔXÇQm‚ƒƒcGAûÔçI£ødƠj! k ÁVbdṿ›Bæà‡hÄ6晋¹¾đƠ+àèˆ÷ïcc­âq?ø¾¨ß²ÙÏzågºi -:k$‹đ/ä6^={¦à@Dªỳ‡aH`¤3åÓê ˜*º¾Dd‘T”¢ơêƠËÁÁáîƯ»«W¯VÏ}P²J!O&9`₫À̉âP ];"Á).€z[ûô‘ăñ­èÊ‘ERÑ£j«W¯₫ñǸ¸¸dÏ]o$E;vˆ®f2lööµÅ>èyơJ7OFnüû¹t›´Z8ÁIiÏ©Ó Ÿ¾¥e£‹S8UUâlU> –JnßæÍ¥ơ|_Tˆo Ù́g½:Çܺukñâźøơë×I åHd¢OCØIY£r~j"‹öó .®ªz_„&NÄ”)±ñRôí«ë¶|¹2q$"J‚U/Y²ä9gơ Tơi,‰‹ ¶b«´Ø½EW‘(Er#w Ô{ ‡rë?Èñ|jó¸m›èZ‘ÅPÑÇóŸÆI©R¥JăÆÍ8Q¬cÇ „´ÂÇưĐOZTÊCd¡₫Æß̉ë5X³«,öéE×”ˆ,G{{{®®®Ë—/wpPQÅÈzœ9`|¤}úàW„J‹vjºOd²$†úÑ«?e’ûđÅØ'º²DdITô1ùùçŸÈ™3'³FJUË!w.}XR₫Ố„N¢«Fdz?̀Ê[éq¦‘VoÜ(ºÊDdT”8úúúfÉ’åÖ­[G]²f¯à*Å}!Ï<ÉçÔdM”w•í12g–ËÜÆ§Ù°–-]_"² *º·÷Ë/¿äÈ‘ăÅ‹ưúơ+Uª”‡‡G‚Ăñ,\¸PtMÉJä̀‰x -:Ă9#R¸±CU”C¹K¸¤‹k׆ôơ<Ä₫ư¢+KD–AE‰ẵ½{¥øÚµk×®]]#².ááΣ¢´¢Ñ”ă+?Å-ÑRtưˆ̀lI‰ăe\D '<,X€̉¥cË Á‚ưh(º¦Dd1Tô¨(uưư7âöŒù»‡üœÚ~¢ëGd~× /⺠T)¹À4]G"²$*ºă8hĐ ÑU «v́â&wÓƯ”bxˆ®‘ùyÁ«JIéă0 ›‹¹ À½{±e>"}z|Äøê+Ñơ%"µSQâ8lØ0ÑU «v́€hØÇ.V¸(miÀ›.d½®âª4¬ă<̀Ó%ăÆaÀ€ØĂ0w1bùr&D”,•>ª Ü»wïúơëĂĂĂ£¢¢^½z%ºFdùNT.eX%÷3åsj²nó0O3!€₫ưå­K0Nœ]M"²ªK·lÙR·nƯ–-[úúúN4éùóçáááuêÔ™7oV«MùñÉ–A)₫Pê‚DAÑU#JEC1TßáƯŃ]#"²TêJ§OŸ>~üøGé­ˆˆX¸páäÉ“EW,›<ôwă=̉ʪ¨*º^D©î̃Iqs40s¦¼u.†Àû÷¢«IDj§¢Äñúơë+W®Ôźéu¤Ñ×­[wîÜ9ÑƠ$ æn±Ñ¸é̉JûM¶ #2ệEÖh=z´¼u8æẠ̀墫IDj§¢ÄqÉ’%Z­ÖÎÎnâĉ.È]]]çÍ›—1cF«V­]M²H½[)µåÙ‰¼à%ºvDia;¶Kñ_ø+ Qú%8 %GE‰c@@€¦M›vëÖÍÑÑQ¹©Q£Fµk×póæMÓN6.ăÙ³̣ÂgaR(lGd ¶a›§Cº̃½åM{Ñ—.‰® ©ǰ°0 &ÜM¡hÑ¢BCCEW“,RÆsçv¢ÝÂ"yÄPi^ "[Đ ­̉!´Xz‘üó? sE׈,€GOOO ¶bÔjµgÏP¨P!ÑƠ$‹”ñ́Yyèï/7Jëë(úYÙ‚ø(Å#2È_¢á ÏŸ‹® ©Ç̉¥K8}ú´¯¯ïñăÇu+CBB;6dÈ]âX²dIÑƠ$‹”ñܹmh­·2+²®‘ƒ ç‹₫Ë/Å÷‘ŸÍ‰(iơ ÚªU«$F»¸¸üơ×_¹rå]Ódxzz®Å¥Ñh €ùC1dnƯlø_®™í N¬i ¥6i.(|A…´Â_Û ̃³‡ï‹Úđ—E…lö³^EwƯƯƯgÍ•5kÂ7\\\f̀˜¡₫¬‘ÔîSÖ€Y#Ù¬uX'/Ü-¬ûÿ_h…[·DWˆTME‰#€*Uª́ß¿À€^^^™2eàääT²dIŸƒÖ«WOtÉRmdH¤Đ âL˜4u‚è‘ep]}ÎÎÎ#FŒ1b€đđpgggÑ5"Ë÷ñclϘ S¥uÊÙ{‰lP‚äÖß₫¨ûí‡éƒ?ŸQ"ÔuÇQ³F2cÇö£!L™(­SÎ̃Kd›¦`¼đon306óÆ&ˆ¬à;/_¾4v777±u&Ëó÷ß@Ñ• R ˜0Ÿ¾Måz„*§qºJæ 0g誑J N+W®ĺ.¶Ù‰‰RäØ1èç'­˜¶è"€‡x˜ybNU…F»æ¿Æ½D׈TKƠª‰̀bÅÑB°x ´&Î:"–¹+Cñ̃¯§!¢$0q$ë·LÛ́bDW„HNă´¼Đwék¸€vˆ(jéU­Ñh .\®\¹2eÊdΜYtuȪœD5´̃&-öE_Ñ5"R—ßđ[ô]ˆr8ƯsNOÑ•""5RKâ¨ƠjïܹsçÎ?ÿü³H‘"*T(W®\ụ̀å ( ºjdÉs¬-Æbѵ!R—~è''öÑ_æ½ư@t•ˆHO9xíڵ˟ܻw/~77·råÊé’È2eÊèFW9›†H?ùøYôĐʬi¡–i6mgQS•(D¥C:i‘¿&ªÂ_²ÙÏzÁwK•*UªT©®]»xơêƠ•+W¤<̣Ơ«W^¾|yäÈ‘#G°··/Z´è_ư%úE#K²ö§û¨*O€̃ ­D׈Hà`÷${ŒÇSƯb³ÈÖ;Óm])"Rµ<ªàêêZ³fÍ5kêïß¿ụ̀åK—.]¾|ùæÍ›QQQÑÑÑ7õ]M²0Ë6º`Oiq‰®‘Jí9­Á}tñ®tE#Úö¢+EDê¢̃^Ơ™3gvvvvvvΔ)SºtéR~@²M—ÿó@ÙË̉b.ä]#"•ª?µ.Úl•ÔtgˆTBEbbbnß¾}ñâÅK—.ưóÏ?÷ïß_†}eÈhÅnIaT]"+XĐ~[¾è;íª¥XÊQˆHIpâøúơk]øÏ?ÿ\¹råíÛ·z2f̀Xºtẹ́ŸdÉ’El…ɲ„†ó|¥Åá.ºFDª6ÆØGKÉú¡G"Rœ8z{{ÇïÖ#G̣åËW¨P¡|ụ̀%J”ppPÑmQ²,Ë—c÷J‹ÑQtˆTmp¡ƯC‚€e>đY¦[SUOá”èz‘ZÎɤ¬Q7¸î¶bΜ95 €đđđsçÎéíRµjU±u& ²ÔÿÆÆÆ¥gûF¢dôéƒo¾K¥Äñ4N?ÆăœÈ)ºfD¤ j¹™' ¾iÓ¦¤KÚæ°Id»_Ëă~/Ü̃Xᘈæă3äÛ 0ƠNâd5Ưº\ÈÅa‰HG½½ª‰̀ ×J)lễCtmˆT/{ö¹§ªâ±|—ñGü(ºfD¤ LÉj=PLf÷ѵj‰®‘°Cl—jäz$­œ€ ¢ëEDª øQơ;D¿dµºÜ|±ñøAy°,›èY€Å5¸uàÀOă1₫'ƯúÂ(|wE׈ª&""Ù›K↼\(H + ‚èÚ‘`LÉ:ÍÇ|)Î0‘ͳˆ ¥Í” @<Œ].῭aIG%"+ÁÄ‘¬“/ä cOỊ́ÑÓStˆ,Ilßj@uß R¼‹EWˆDbâHÖ¯–¿÷ö] "ËQ¹r[ü)-ÍŸEX$-¦GzÑơ#"a˜8’Ú‚-̣¢A%qƒ‰#‘||ôV Ä@)Däÿđ?ÑU$"1˜8’Ó kđBï+U])"Ëѧ€Ÿ0^Z±p!")-¶B+ÑU$"1'ï̃½{÷î]TT€èèèààààà`ѯ Y¼§x*Å9ñ@tö́¢+Ed94ß`´bØ08ÀA™/¶DKѵ$"'ƠªU+W®œ¿¿?€'O4nܸqăÆ¢_²l'qR^ØÚÆËD׈ÈâEGÀ6l“ÖlÇöø º^D”ÖÏóáĂû÷ï/P À›7ot+O:•Ä.U«V[gR9½çÔ}À"ăƠ«‡C‡z`ơjÄṆ~đ ê×Çvloº5‘Q «Od[ÏS³fͧOŸµ‹új·ÙÑäUB9a 4Z-4‚ƒ‚8ï‚Úp2 u}_Ö®E×®/á–/të3dÀû÷¥{ °`0‹®²ơă/‹ Ù́g½àGƠµk×ư U †¢́™Ê±AÉ’¢ëEdiºtà†—̉ŸK¿Ç{iå ]Q"JS‚DZcÇvîÜ9_¾|™2erttÔ­̀”$ѯ©ZœçÔƒÁ¨UKt½ˆ,UUÈm‡¤¾‹ĂĂƒ{ÁKt‰(ínă˜9sæï¿ÿ^?zô¨nƯº₫ùçÑ/ Yª=Ø#/\¬àƒqP³¦èzYª̣9bg2;wÀ̀™‹¹º•7p㮕B)Ñ5%¢´ ¢q3f̀Ø Aƒ ˆ®YªDÈ Qú`9À;D&iÑ@\”V́Ú%o¼‰›R\¥Eוˆ̉ˆǬY³.\¸páÂ…ºÅ˜˜˜gÏEë 2À Z₫€;B OÑU#²@}úè₫Ÿ ¤u11±'<Ë¢¬´]dˆl„G·oßÎ5«E‹åÊ•«Q£FÙ²e›7o>sæ̀đđpÑU#µ[ƒ5̣Âî&¢«CdáZÅ÷½@Ñfˆ¢3̀%\’bådÖDdÅÔ•8;wî‹/¾đóó»uë–nˆÇÈÈÈÛ·o/_¾¼qăÆ.\]A²áÎÊâ²èzYƒ6Ø*Å‹ÇÙ´K¤ØNe(D”Tô{>zôèĐĐĐ·>{ölÔ¨Qoß¾]MR©á./ X©#¥₫è/ÅZh7a“èQêRQâèçç÷øñcY²d9räŸ₫yâĉ­[·5ÊÍÍ À£G–.]*º¤RROø£+€ØÉ==EWÈbú¨ûÿlŒÖ͘§ˆṛ˜/ñ¥èQêRQâxåÊ«W¯îß¿¿———»»{É’%ûöíëïï¯å‘#ơáñ`—j¢đñÑư8æHëÆÓ/Ơ¥¸øGdÍT”8̃ºu €··w±bÅô6-Z´Zµj°„ùIˆđƒ¼à;/Î6âHd2ĂÆG[‹µRü7₫~‚'¢ëMD©EE‰£NbăïÄÄİ··]AR£I˜$/̀ Ä.̣#‘9(o:®_¯¿u ¶Hqä]Y"J-*J===œ;wîêƠ«z›®_¿~êÔ)E‹]M² ?âÛØ(~Ñu!²dé̉é₫¯læ8$̃ ƠmÑ6̣I‹ă0.ù#‘RQâX¾|y>|èƠ«×ܹs/\¸đàÁƒ .̀;·gÏïß¿—Ê)-ÀyáÓ –Ưà/º^DVaÀ€øëÂÂ(x÷¥xf€ˆ¬‘F«Ơ¦ü(fñîƯ»–-[>xđ ±yóæƯ¾}»®—Œyzz²-fZ̉@£XˆưyÖJ+µZÁÁÁ ]Sƒo:é¿/ׯ£T́<Ôm _̃z·Œ.>yU«êï;sF|º1™é?àƒè«±üeQ!›ư¬WÑGGGÇ_ư5wîÜ nÍ•+ׯ¿₫ª₫¬‘ˆÈªxyIá‚VRÿi5â§ú7c³èÚ‘™©(qPºté]»vùúú–)S&sæ̀2gÎ\¦L™¡C‡î̃½»L™2&yÓ¦M:t(_¾|ơêƠÇÿâÅ Ă÷}ôèÑçŸ>zôhÑ/%@Ùs‡é₫/?§.RDt‰¬G®÷¤øâÅ„Ë(‡ú€¢«LDfæ ºú2f̀8xđàÁƒwvvNù1gϽdÉ''§J•*Ư¿Ë–-·oß^½zµ!÷/µZíØ±c9S¶j €¢Öđ9ŸV~cñ¥\±b¸uKV¨ §Œ#gÎwC7ÿO_̃ª£ú œ}Dd6êºă¨Ç,Yc`` ŸŸŸ‡‡Ç={üüüöîƯÛ£G+W®ụ̈Ë/†́¾råʳgÏ~%(Qođ&₫ÊểÇâ!J9Eÿ˜]OIq‚O«¬Á)>‰“÷pOô‘Ù¨:q4‹7ÆÄÄ ><{ö́º5ăÆsuuƯ½{·nlÈ$ܾ}{ö́ÙÅ‹}”°=Ø#/¬é@ &D)§H«.Å₫™èpA ‚½:ˆ¬‡ơ'çγ³³«S§´Æ̃̃¾V­Zaaak¤ˆ3fL–,YÆă€d*ç9ơ€ØÇÓÙ3¼’W*$ºD–OÙªçÿû́³ä÷¨€ ÅQ\¹(úˆÈ<¬¾)ê”àû’£V-ÇcÇtqåw€Øñ æÍĂđáÁ‰ªM¶6[·êb 4AÁA¢/ÎRñ—E¸Æ‹®‚ZXyâøîƯ;NNNzëuƯn^½z•Ø^cƌɛ7ï×_mÚymsPĐ4æyx¹ÿZ/“âœx,ÅÊ!s9|® ñMQ§̃—#đ)q,¸w¯”8"É7ñOü©ŸWÁ]ƒ1XôÅY*₫²ˆÿc=₫"¡̉GƠ{÷î]¿~}xxxTTTb^²ÜÜÜ4MDD„̃zƯđ:ºûñ͘1ăáÇ3gÎäxăjöïä…‡y(Á¿³Dæ̉ºµ/Y²h‘¼4qbRû)‡u‚! " §ºÄqË–-uëÖmÙ²¥¯¯ï¤I“?^§Nyóæ™0;¢ƒƒƒ««kü¼óơëפ~ÖJgÏ]·n]ÿ₫ưË–-+úÅ D]Æe)®¹ëtåÊBÄ‘(5\»6p ¼4uj2Å¿Á7Rœ9D׈RD]‰ăôéÓÇÿèÑ#½ơ .œ}Ú××÷ø§fk!!!Ç2dˆ.q,Y²¤èj’`ÊçÔ˱ü·ßäMq:Ă(úW‘y(Ûó́ßo” á²Ó Y%ưû÷www°wï̃>}b“ƒ̃½{÷íÛ÷À\\\ $º$ØYœ•bOx₫ûo"åzơ]S"«£́X½d __y…¿¿AÇØ‚-Ŕ'ƒö!"ƠPQâèîî>kÖ¬¬Y³&¸ƠÅÅeÆŒ¹rå2̣¨dU®C7¼ª)7eÍ >,/7l(º²DVÇÅEÿüÀܹ̣ eV™„¶h›ù¥EN'CdYT”8¨R¥Ê₫ưû àåå•)S&NNN%K–ôññ9xđ`½zơDWÓ{N}V¾ùˆâ>;câH”¶" ~́|÷¤x!®8AEctœGŒ1bÄáááÎÎ΢kD*rg¤¸8÷ÖëÓfŸ¼œÈ­k"J‘úơq0N–¯¾Â±ñÿ₫‡–- :̀lFvÔ@£œ̉ˆÔL]w%{÷îƯ±cGxxxTTTüɦÉ @«  \È›PŒOD©BÙ?æ·ßøùÉ+úơ3ô0_âˬ¿ƯÇxÑFDQ]â¸eË–ºuë¶lÙ̉××w̉¤IÏŸ?¯S§Î¼yó´Z~%µiIûMDi£}{9₫í7WOq¤0„Iñ4L}aDdu%Ó§O?~ü£GôÖGDD,\¸p̣äÉ¢+H"Â)).ÊM+Æ-êî.º²D6àŸtÿW&“Ê.jÉZ¥R¬FôơQ̣T”8^¿~}åÊ•ºØ^1ŸFû×dƯºu N¶à&äÙ&+£2€ợfĐŸ-’=cˆ̉r8UûVëøÀÇAÑÔ~:¦‹¾"J†Ç%K–hµZ;;»‰'^P4Vsuu7o^ÆŒ¬ZµJt5I ½₫Ôˆ;YnŸ>ÀéỌ́2G¢Ôăă#LjÛíömă‰H)₫߈¾6"J†Ç€€M›6íÖ­›£££rS£Fj×® àæÍ›¦œ,ƯIœ”b/x8z4n åX<_|!º¾DÖ«uk9^´H÷ÿ äu§Nu8̀Â,)æk"•SQâ `Á‚ n-Z´(€ĐĐPÑƠ$”Y£7¼.¤Lsç]e"ëƠ¬™ÏŸ¯ûỵ̈ạ̊º=Œ;̃HŒT.ÎÀ ÑWHD‰RQâèéé ÁVŒZ­V7Wu¡B…DW“ø_K±î9u€<2úöüư·èjÙOƒ]äË'¯»sÇøĂ(Æq‡q¢¯ˆ¥¢Ä±té̉NŸ>íëë{üøqƯÊcÇ 2D—8–,YRt5I€ÓÛ/–B)³gË[GŒ]?"[S¹rüumÚÈñ̃½FrI1X©–Ç₫ưû»»»Ø»woŸ>±=!z÷îƯ·oßpqq4hèjRZ;R\±ÓN.•ñ@‰qwÈ”It•‰¬̣ëÚ‚ºÿ¯^-¯3öi5€˜¥Å‰˜(ú"‰(*JƯƯƯgÍ•5‘™â\\\f̀˜‘+W.ÑƠ¤´Ö]¤øü‘ǘC”Ú:v”ăO÷ÿ•Ä>}jÊQßáOÅTÑID PQâ J•*û÷ï0`€——W¦L™899•,ỶÇÇçàÁƒơêƠ]AàHqäđN₫pùÔ—óÊyÇâ!JKAARس§¼zÓ&S¶̣}K>°&R!‡”¼œGŒ1bÄáááÎÊï°d{6c³wEW]@Ge—j&Di {öø÷W®„4ØnèĐÁè£vG÷!ÍF8#fc¶ÑG!¢T£¢;s? Ñ­aÖHÊçÔ₫đ×sæÈ6́Û'¯*ZTt­‰l€²™ăÎñ·¿oâC!»6s”®‰H8%[¶lY´hÑ¢E‹?.º.¤ÊY%$ÏÅ[¥¼ăHDi@™8* *¯Vîh”-Ø"Åvjúœ""ưB¶k×NxP çÉ¿µqæ&4J[´Íü̉b/ô}µDKE‰ă!CÚ´i`É’%OMë’GÖe†IñL̀ÔëÖɆ·†­é‰¬Á=Ü“âUXơE׈ˆUuñơơ#G;wî|ñÅ%J”È’%‹&^°páBÑ5%‘”=c·™=cˆ̉L¿~đó‹¯_‡——.üö[üøćêÙ³M¢ÿ ÎTF́Hăy‘—‰Ô@E‰£n”owï̃]¼xQtH¤ođÿ_¥89)oß–c&DifÄ9qœ3G—êT9q9̉ôÄÑ̃ Ñp?b[0WFå38#ú‰lU)MÇt)>ýí?EÊ1ư›(Í/.ÇË–¥ÆöA0á,ÎJI$‰¢¢;œN¤́SyZ³ZqC™8–)#º¾D„30vllª&5Z…URÜ ¤xăF¹Œ}zÑU¦T¡œ7"7r‹®%®I93ß~+--^Œcă¯¿Æ¬Y):Ziêê᮫‹ˆ̉’ÇE‹^¸hÑ¢¿₫úk±bÅD×̀O“qŸSÿ÷Ÿ\æÓhñqƠ¬)ºîD6,4T¹4`€œ8₫úkJG‹±x b¨†‰„°ÔGƠ·oßî̃½{xx¸èù)ûQÖFm)N¸ă¿ÿÊk9QÚ3lvøÈHCJ%e¸Ă]Ź¢¯œÈ©(q́ׯ_“OO=>û́³V­Z 0 }ûöỵäÑ­¬\¹rß¾}[·n-[6/_¾\µj•ɧ#u:R\•›æ̀‘ăêƠ?EÊ.ƠL‰̉r§µk•[₫úK~J`¤g'ª_ƒ5×q]ôÅÙ%Ư»w¿ví€::thæ̀™#FŒøñÇ÷íÛçăăàêƠ«-Z´˜1cƾ}ûªT©àøñă¢kMfÖ]¤x¦)7}ü˜ĐÊ.ƠUªˆ®>‘íQ¤·LË–r¼}»y΀).…R¢/Èæ¨(qœ3gNHHHö́Ùøá‡Œ3JëíííG•7õˆˆˆ È”)Ó˜1cü«|LIVáHq4H°̀çŸ+ös@`"Ơ8^oEåÊr|ê”ÎPÅ¿ÂW̉bd}ÍD¶EE‰ă©S§äÎÛÎN¿V&W®\._¾¬[“9sf/^¼]k2'i¨6ƒg@ø%KäXùdL¯=> àh?Ë?ÿ”c³<­đ;~—â—x©œeˆR›Ç·o߸víÚ7ô6]¹r€VÛnÏ=tÉj(‡ØXˆ…ÊMÊ'`Ưº‰®())GsŒ{_QoxüØl'Tv©₫ß°‡5QQQâX©R%‘‘‘=zô˜3gÎùóçx°ÏŸo¶snÁ)¶SÓg‘uSÑ8cÆŒ¹pá‹/̃¼y³xñâÅ‹ë×ƠÁ¡G₫ùçƯ6mÚˆ®5™M{´—âơXŸX±¬Y ÏŸË1»T‰¢¼¯¸i“̃Æ °đÓó__ js¶EÛʨ|gt‹ƠQ]9&¥}KËŸ?ÿâÅ‹³gÏàÖté̉}ÿư÷º»’:Ÿ₫yÓ¦ME×̀Fyÿ #:*7)?‰”ÏÄâôŒùâ ÑW@Diê4NKñIœüß‹®‘ơSQâ |ụ̀øæ›oÊ•+çêê C† … îܹó¾}û:tè +Vºté!C†ü₫ûïœuĐjœÄI)®„Jz[•ϾâôŒQ&uë¾"æí-ÇÁÁzW¬ă=ÍyÚ‡éŒÉ¢_"ë§‘º›¨Pxx¸“““F£]ăxzz®……É́̉Đ¾đ('r*·*âüÀæË‡„6è .X° è«¤8ø¦¨“‰ïËÅ‹r;ă=±r¥̃öD‹S¬ ́ÁùàÖØQ†¿,*d³Ÿơêºă( Ü»wï;̃¾}ơêƠ+Ñ5¢Ô¥œB/kTÊ”)î²”5‘X*ÈqBsz+&Çæư´ƯƯ…QXZLlüW"2 Ơ%[¶l©[·nË–-}}}'Môüùóđđđ:uề›7OÍ7G)%”ð}¯ơ¶úûËñ¤I¢ëJD&Ù"·aFÛ¶f>øÜ‘âƒ8¸›E_.‘ƠRWâ8}úôñăÇ?zôHo}DDÄÂ… 'Ofûëô ¾‘â_đ‹̃VåÛ>fL"‡(YRôEÙ<å܃ñæƒ-¥˜0̃X½f |BƯD¿DVKE‰ăơë×W~jcoo/­—Ú8®[·îܹs¢«If‰H)Ö ö¬wî$²çû÷r̀±xˆ„ûî;9Nè{~y"züñ‡ùÏ¿̣S ₫1!¢”SQâ¸dÉ­Vkgg7qâÄ .Hë]]]çÍ›§›½zUBMgÈ¢µB+)̃†mI”T¶‘âv©fâH$œ‡‡8»2YLùŸú£Y”•« èW„È ©(q Đ´iÓnƯº9::*75jÔ¨víÚñ¼)ºdf»±[[¢¥̃ÖéIhơ8îÛ'ÇÄ‘H D‘v —¤ø άÄJ±ơ!²>*JĂÂÂ$6â@Ñ¢E„††®&™ÓA”âÚ¨¿€̣y—̣9÷cºt¢/…ˆâ~½Û°!₫ö_•ăJ•’? ”¿ÂW¢_"k£¢ÄÑÓÓ@‚­µZíÙ³g*THt5Éœ’}N­lǨÏ&Đ"Rµñăå8¡fÊ™ŸÎŸO­ZøC‹‰̀KE‰cé̉¥œ>}Ú××÷ø§y!!!Ç2dˆ.q,ÉγÖå-̃J±Üô¶*ï/׫'º®Dd”€€W+Ÿ*ưóOªœ¹+º*ÿ¸Ă]ôkAd=T”8öïßßƯƯÀ̃½{ûôé£[Ù»wï¾}û8p€‹‹Ë åpdáb ×Aø”7,’Á±vm‘J$7ÁÉA¹} ê×O­Z¼À )CØP ưºY %îîî³fÍÊ5k‚[]\\f̀˜‘+W.ÑƠ$³Qq‡ăX°@kƠ»íèQ9₫̣KÑ—BDŸ(¿äÍ»2±|ñ"ùă™LÙØqœÀ Ñ/ ‘5PQâ J•*û÷ï0`€——W¦L™899•,ỶÇÇçàÁƒơø´̉́ƒÜ'ús|nô₫7Ê1G"ơèÙSø!Á"?ư$Ç"ơ<Æc)®‚_"« Qó<~áááÎÎ΢ka4›øÜ(ÊëođÆúoô¥K(_>6î̃«WÇỨî°°ØØ€Ÿáààà‚É=A£4Æ7Èđ¾hưQùơ4 ˆỳÁœ»ä(oCZ₫²¨Í~Ö«ë£K̀Éñ³F$ÛÀQʉHmj(îí½z•`‘²̣@Ư8r$ë2Ă½á--A±¯ ‘¥s]Ù»wï.\¸påÊ•gÏéî5º»»—)S¦B… NNN¢kGæÔM¥x5V'XfÛ69.\8ñc9¨èg˜ˆ`̉$y2§É“ă ̃øÉÁƒpÿÔ×¹ADE¥buÎàŒôˆă.îöC??ø‰~ˆ,•*>t?~ü¸nƯº%K–<₫<₫VGGÇÖ­[6,K–,¢kJ桜-¦;º½¿̣C† ‰Ô¦A9=;ÁÄñ³Ïä8::Ơk¤…VÊ—béP -̉‚_%"Ë$₫Qơ¥K—6løÓO?%˜5x÷îƯºuë6mzé̉%Ñ•%3X¥RÜm,³c‡óM¼Í́Cdù.”ă®]SưtÇ•,ƒ2¢¯ÈR NŸ?̃·oßÿ₫ûOZ“.]º\¹r•,Y2W®\éóÈ=₫¼_¿~/RuđJưĐO·`K‚e’ià¨L[µ©MÇr|ăF‚E”Ặ®]›ê5*âó0OZäŒ2D¦œ8®Y³æơë׺¸aÆkÖ¬¹zơêáÇ·nƯzøđák×®­]»¶Q£Fº¯^½Z½zµé'#x†gRœÄnå\d2ÄÛü×_¢¯ƒˆ’¤ü—Đ܃:5kÊñÿ₫—ê•¡ÍÑ\ZdîHdÁ‰£4µ`»ví,Xàíí­ÑÄùM₫üóÏçÍ›÷å§Ç‘Ry²PÊbàH²å³e]c"2A‰r¬|D—r™´yx°ÛÓA~–Ơ¼8D–LpâøàÁ]0thRóA 6LÜ¿_l…)…n@~hU µ,óÛorœÔLƒ̣ç}ADd:Es¤´ó¥xöͬŒÈæNß¼y kÖ¬9sæL¢˜»»{¶lÙ„‡‡‹­0¥ÄLbå¼z”ϵ·Yùå=cˆTkäH9̃¿?±RkÖÈq‹iT5å0à£0ꮥơ‹Cd±'ÑÑÑ“-©›0: †m Tó#~”â_ñkbÅ?Ṇ(́RMd kæØ­›+‡SHm7qS94‘áÄÇC6â<ä/P ±bïß˱4å`6ÈqÅ¢/‹ˆáâ"Ç'N$Q°¹Ü_%u§®Ṿ„ç\̀•ÙQ†È@ªüǧNJº̀»wïDW“RD9ëWƯbF(`7nœP‰ D_ F£1d"êíÛå©«—,ÁâÅiT;_øîĂ¾Ø[Yh,t&k¢´¤Ä144´W¯^¢kA©Kù9?íÔ²d‰ÿô“èJQJ¬Y#?=?ÿœXAggH-Ø/]B¹riTÁØ‘ ¹#¶}L! B¨W‹È"đQ5¥…Ÿ)ÿ?̀sĐjƠD_%I9!̀/¿$QP9/XÂmTRÍ#<’â`w@‡4==‘¥aâHiáäçË]Đ%±b3gÊñ́Ù •8yRÙ3†ÈZ.g1»A*Ÿ‡lÆæé˜.úơ R/Áªw¤e':D™)NBR3+ÇÇ'TBÙ3†‰#‘úM™‚‰că… a+Ö¶mhƯ:6.WW¯¦i5µĐJưc¾Á7Pá |‘ö¯‘úi´´\&£xzz®…(»+&Ưö\9mPÂ?˜9sBÙܘƯààà‚ ~%(¾)êd₫÷EúÅÖhcHA÷ûmođÆrOđP„~†Ï̉º‰à/‹ Ù́g=USêR̃bLâ!5€M›äØ×7‘BRÖHD'¹dpêT9îÜ9­k—™ă°´è÷´®‘%°•ÄqÓ¦M:t(_¾|ơêƠÇÿâÅ‹¤Ë¿{÷nåʕ͛7/W®\Í5ûôés"ÉqÈ(1?à)Nº[ŒrÖɹsADV¢O9̃µ+‰‚ß~+Çë× ¨iÔQÎ@ÈÁ‰â³‰Äqö́Ù&L¸{÷n¥J•œ·lÙ̉¯_¿$†ŒêƠ«×´iÓ>}ZµjƠ"Eœ9s¦wï̃ .})F™)VB¥¤ ?yb̀¡;°ç#‘…˜?_•_̉©“ÿø#̉̃HŒl¦̉"sG"=ÖŸ8úùùyxx́Ù³ÇÏÏoï̃½=zô¸råÊ/‰ ±qăÆK—.}₫ùçG]¼xñ+¶nƯêææ¶pကÑdIºAḾ,Î&Q̣¼<­LâóƠ*f³g ‘¥PN*”̀(‰ëÖÉñ„ b'v6DCi‘¹#‘’ơ'7nŒ‰‰>|xö́ÙukÆçêêº{÷î˜DiïÙ³À·ß~+M¢]´hÑDGGóµá”™¢+\“.¬¼ ¡¼=‡²Kuûö¢¯ˆ V¯'÷ơ»T)9₫ë/1ơƯ‡}ÅQ\Z´³ÏJ"Yÿ/Ă¹sḉ́́êÔ©#­±··¯U«VXXØÅ‹Ü%88ØÉÉÉËËK¹²hÑ¢BBBD_ŨŒÊR|É ­qú´çOlZ™-[D_™Ä˜§ƠÊÁÀ¥z̉^œà¤‹µĐ&1ß‘M±̣ÄQ«Ỡ¹s'kÖ¬Y³fU®/V¬Ïûí·ơñf_¿~@̃¼yE_“ex‰—ÊżHêu “cåÍ"²%KÊñÁƒI—µ·³x÷®°Z‡#\àAuTV"ƠPÅ\Ơ©'"""::ÚÍÍMo½««+€çÏŸ'¸WIåß8ÀéÓ§ưüü2dÈĐÚ°ï¿zkt¿mGµ¼Ơ¤®?₫û#ø]p…‡ Ë8ëâñă¿O°˜4ˆY´‡Çƒà¤ßÇE¿$¤o:¥̉û’7o^‡OßƠïƯ¼©Í!‰Â;v¤õ<·..S&æÚµû¢^ *XHŸÄÉo[̀{:/í«Á_á7n,º ja剣®ë´“““̃zggg¯^½JöÑÑÑüñÇ̀™3£££gÍåînĐÈ^¶9(¨̉\́’£K̉…·o—ăÎs&\è‘<Ÿ¬}çÎ&Œ…ËásUˆo:¥Êû²x17×…fÍẨ¥IV@#"́Ä₫œ('•Ùá´£xÁâ?ăç´¯YÄÿ±ÿ‘°̣GƠnnn&""Bo}xx8>ƯwL™3gZ´hñă?º»»/_¾¼iÓ¦ ÔDM)^ŒÅ†ï/ĂWàdƒD­Y39^¶,ÙâÊÁÀ \wå”W¿à—ñ/¸BDâXyâèàààêêÿÎâëׯHư¬ăûøñă?₫سgÏG :t÷îƯƠªU}5ă8Kñ Hº°rÈßDûSظQ«V}‰D”º”îßOzªÂ´ ̀§arN,"›bå‰#°°0]¦( ÖmJp—˜˜˜¯¿₫zơêƠơë×ß·oß!C•ăQ’Ê Œ/À‚dËÿô“ơUâå”ư®‰È)¿0º÷ŸÊqΜÉOuÊÜñü0SSp0"Keư‰cưúơ£££ÿ₫ûoiV«=zôh–,YÊ—/Ÿà.kÖ¬Ù·o_—.].\˜Ä]IJräÁ,º:D¤C†È±£{·i#ÇOŸâí[Ñơ›;NÄĘ!ºFDiÍúÇ:ØÙÙ-X°@×®€ŸŸ_hhh»ví̉¥K§[óöíÛàà`]·5­VëïïŸ9sæ±cÇ®»åɇ|ŔÿdË+[:MœhØ9*U2¬Y¼Ư»åX 77w‡q¿âWÑ5"JSṼ«@®\¹F=cÆŒ–-[Ö¬Yó₫ưû§OŸọ̣̈êÛ·¯TæèÑ£#FŒ(Z´è;={öàÁGGÇ®]»Æ?Z›6mºuëfÄémÉ|<4fWtMvå ˆ~H¼Ü¹sr̀1D–käHüú)ÓZ»]’rA9Ê›7 …a#[¤.e?ë¯ñơ1Û†m¢+E”F¬ÿ#€̃½{ỵ̈Ë/ ܵk×óçÏ»uë¶zơêøƒ;êèî;¾{÷îZB|0́Đ=l:v}¡DdªY³äذ/áGȱJn:"î}Ç¿đ׌]#¢4¢Ñjµ)? )yzzÚà8Ođ$rH‹Ê¿ª‰ùí79!,R·o'^T£‘c“~bƒƒƒ9 ÚđMQ§T_ŒÿuVîñàÔ3—tß@/ôZ©t"₫²¨m~ÖĂFî8RPfăoCvQ̃FL*k$"k2nœĐ·À™3rœ/Ÿ!{¤å7ä•XÙÍE׈(Ơ1q$3¸…[ÊŨaΣ+Ço¯WOôµQÊL›&Çô­àígñÖ-CvJ#ÊÜq'vVFeÑ5"J]LÉ S&kÆÄ‘Rê,Î*K¡”!{­Y#ǽz%Yô—_ä˜Ó̀YmÛä¸ukCö(]:ÎâåË¢/!.eîx÷œá,ºFD©…‰#¥”̣Ñ̀<0d—«›’%K&WúÓœDd%+Ú*‡jL’²%t¹r¢/!eîøo•ưfˆ¬ GJ‘Ø)Å!/ êŰu«Á'Ság™¦V-9>|Ø=‰³hÄŸ´¢7sG²JL)E”½ŸÀĐA.ƒ‚ä¸X±$‹*'·eG"«¡̀û”s &éÍ9nÛVô%$$~îSF¤FLÉtưĐOë +\ ÙkÉ9öñI®´²cr“L‘ÅÈU_½2p'gç8#+ôëgà~iJ m ”àt §DWÈl˜8’é–b©†A› ¨8ẨäJ?0¨Ñ$Yătpđ 'ÿD¸Ñ ¤Åj¨¶KRp<"aâH&RN08³Sư|ªö—ˆRÎøu”Ï!̣ä}‰X‡uÓ _à@ ˆ)8‘Z0q$S\À…gx&-Çpẃ̃]W$;;×È18Yătđơ×rüï¿}‰‡q»°KZ\‚%ù‘_t¥ˆR‰#™¢"*Jq0‚ ßÑß_“¾qo, "ú¢‰ÈÜŒĐQçÆ 9N~H/q É¿øWZ|€́jM–‰#í;|'ÅÅQ¼ ¸£rîƒ₫Ö_º$úZ‰(5™4 #€%;·¼8k–è I\.äAŒrçx.º^D&bâHF›‚)R#)ÇÜP̃hH3§a ²RÆè¨óđ¡%ú*’¤Fo˜ÏđÙøĂÔă‰ÄÄ‘ŒSe¤x,Ƶ¯røÆ¢E“+­¼ưÀDÖʤu”ăy5h úB’£…Vù÷³ºuG÷H &d„ñïUÈÓNÇtĂ÷Uߨ·¯;(8ªü~™̀¤u”Ăñ<­Ö¨½¸ŒËc0FZô‡¿?…É̉đG–Œ̣ĐÆi«¾ÑÏÏ€’ăL™D_:¥å€]»µëŸʱ%| ÍÀ 娷Zh5Đ¼Å[Ñơ"2”%ü‘:|‹o¥Ø nUPÅđ}oß]{"R-å€k×µ«̃ĂíéF<¦êè5yt†ó|̀7ơxDi‰#ê'ü$Å/đ¨}½¼äø̣ev8sF‡ }éD”ʪ(¾ˆ®\iÔ®Ê'Ôß|#úB ¯vÜÜѾåQ^t¥ˆ’ÇÄ‘ ¢{̀ØÎ€QQˆŒ”Ë”1`6p$²)§M_¾úÊØ½.”c匓¨…¶:H‹—p‰£<’ú1q¤ä  )Ήœ]ĐŨƯ•· …góf9VíœbDdFr|äˆQ»„téäÅÉ“E_‹Á6bănÄÀRÍDL]/¢D1q¤d¼Ă»ÅX,->Â#cpë–·j%úzˆH®_—ăºuƯ[9aá÷ß‹¾c4Fc½ÇÖS1µ*ˆ®Q˜8R22AîѬœwƠ@Éñœ9†í£́JÓăœÙ†Ï>‹³xÿ¾±X¶L-èµÚ²(+-₫ƒ8Á ©GJ̣©t ”h‚&Æaß>96´— 8Ù¦óç娸)¨ûô‰3ÉÔøñ¢/ÇH—p©)×|†ÏFb¤èzÅÁÄ‘ơÖa´x7Œ=€rlDßhå0u¥!"«đùçraẪ¼‘cå ?–bvè=¶Ù́1CªÂÄ‘•¹¥ø$Np„ß~“cCŸS‘-Û´IK•2ákÖȱÅ=°ÖÑB[ơ•k ,4#D׋`âH‰É…\R\ Ơª¢ª±GPÄkDŸ˜ûͼY…öíåXÙ]Æ`ƯºÅi-9|¸è+2ÉPN0`æ¸ÂUt½ˆ˜8RB₫‡ÿ=ÆciñN˜påH¼†Â`È9nbt“J"²x?ÿ,ÇÍ››p€ĐP9;.ˆ¾"“è&˜±‡½´æ5^k Y¢«F6‰#% ä;„×pÍ„#lØ ÇÆ5S<¬ø’=x°èW‚ˆ̉œ²KÜΦẵ=9®XQô¥@¢Z£µrMoôv†³‰‡#J1&¤OÙ{VyÁË„ƒtê$ÇÍ1¨sñ¢W5úá8Y‰Ạ¤:Ô„äÏ~-´±£ÎVl R®y‹·h–a™©‡$2Gă3ȃ¡Qô0á [·Ê±‹‹1{ví*Ç7±!Yå‚ ˜vŒ‰Q´¨¼¨œ Ûi¡8# ơE_v¸¦´ÇÄ‘dC1T9̃́́1í8mÛʱq­Ûõ”ă‚E¿D$NÓ¦ŕëkÚ1”ÓV9ƒE‹D_TÊüˆơë æK|)ºjdC˜8R¬S8µ̣7ûø 4w®gËf̀DÓÊÆLÊÜ“ˆḷÂüù&F«øK6xpœ-”Z½É¬7a“ưØ/ºjd˜8R¬j¨&Å&LH-Q~ñô©1{̣95)ưô“(`̣a”óW×xF­~Àñ¿Û/Üà&ºjdư˜8·C̀/ø%'rvœú1kûô1rçW¯ä8cFÑ/ ‰¦Óë₫}v˜† Ñ­›¼hÑe”´ĐnÆfåWx¥F9U,‘Ù1q$B!)®€ _ăkÓ‰C‡äÅeFuø[¾\•*‰È–]S V¼¸É‡QN' Q#Ñ×e&íĐN íøB¹rÖi Y oÑIjÅÄÑÖƠEƯ`K‹`úP¹éÓËñ_¹³+;T‘-ọ́BnyîÓ8cƒIÙØqß>«ú~º{_ăµ̃ÊÁ¬æ ®ˆ®Y&6­zÁiÑä1¶l‰³Ø²¥èk#"ëđđ¡“’#)sÇÅ‹ñË/¢/Í|2#³Ú9˜£·¾,ʲá#™GÛơ¾[…ỦbJ²FÄ`Vḱ‘¦N•ă)SD¿0D¤2Èq­Z)9’̣¯ÓèÑqµĂ0L m{´W®Ô5|,£¦đ"JGµ˧@NÑR˜5öê%Ǧ4¨ZbÂѯ ©̀âÅrü÷ßx÷.%‹‰‘ă¶m™ÚÊBlÂ&-´9C¹̣*®j ©‡z¢kG‰£-:€>Û¦0k°J¾q‰=&ND”¸]»ä8S¦”I£ÁíỤ̂b¹r}u©à1ßÂ-½•‡qXMGt];²`LmÎ\iˆ†̉â+¼JÁÁ kV96¥[ËàÁrl\Ol"²MÄY\±"%+R{÷Ê‹™3‹¾ºÔQEµĐ®ÅZ½ơ±QM34]A²HLmËiœ.‹²̉â•ÿ·wçqUTÿÿÀ_!17¢Đ3%ÑD—$M¥Ÿ®ơ)µL³,̉OFŸDmÑ\J?5ÓH¯k¹%äN¨e‚%¡¢©¤.€ Àe~ —Ëâ—;,¯çƒ‡™3ç93o„7³œƒ36¨Ñx¸‡ăöí’Ơ꼨¨; X•Ç~$¢FC÷ùÄI“jØX@@©Ÿ=‚€Ô>ÀÚŒ`âR,Ơ+ÿ?0}¤j`âØˆlÀ†è!¯î®NèTĂ6uŸSÿ믪₫₫ư’e[[uÏƠuÏéd9öö5llʼưvɪ…Eµ‡¯¦aZÙ¹ ñOú¨;sQå˜86âñ+¯¾÷k₫‡¦î |'§ª71Fg†ƒo¾©ú牨1Ùµ«dùÎ̀™SĂö-Ầ™%«îî¥na7<̉\…îĐJư8 ,`‘ú?™7Ơ2&ÂXŒ G¸¼z‡₫ƒÿÔ°MƯñw7GxxµZÑ cÈƠNƠº7¬çÏǵk5lïă±Tç.î Aøâ µ±–ư?Dˆe' {€6° ÀµûHudž¯'znÀyơ®ù·†mÆÆ–ñûæÍjµ¢ûăÙƠUÅSDDơÉñă%Ë=Vóö¦MĂÎ%«S¦ ,Líc¬}‹±X„ˆ²›ú£¿a!ªƯGª‹˜86p-Ṇ̃8J~ÈÛ MÍ›íׯdùÖ­ê¶2eJÉr~¶ˆˆ ËÇcK¼•UÍ›:‰‰%«‘‘øcÈÙ˜-B\‰•e7½‡÷­ÑZí>RƯÂı! ¤#]^­ùxÅÍê<Ú8o^uŸP×ư‹^7%"z¨ơëK–ss1kVÍ›|ê)dë<à·ys©Ÿu ÛdL!îE9x^Çu‚av¨ƯMª˜86LшPêg¡²ÆaĂJ–[·®Á³é‘‘%Ë?₫häóCDơîĂ‹#5µæMZ[ëϘ*8^í#5–ˆoăö“x²́Öa&@F°ÚƯ$•1ql€`ÀŒÑ-1TÖ¸w/vèüÍ™–VƯ†F.YæØDT=§N•,·kg¨Vuç$Đ¾}©YQ<;ØÇyb¹9â·øVºhµ{Jê`âØĐ~Dɼ¾èk¨¬À A%ËÙ5´aÓ¦’eÎCDƠó̀3¥₫̣41̀o4A€(Âή¤d̃¼j 7VÏ}ƒoDˆë±¾Ü­c0F€Đ/à‚Ú=%£bâØpœÀ ½ÛÓ_ăë8Ī}ƯÇ}.„µuụñ)Y₫OMG"¢FM÷/OQ4È‹2’Û·1cFÉêƠ«hµj¯ÑÅXb z£wÙ­gpÆ.„Ñ]ơ¶©^bâØ@tAoxë–ˆCj¨öu³ÆO?Å»ïÖ ­Ÿ.YnTw€ˆ¨6ˆ"̀Í‹—ssѼ¹¡₫ôSœ>]ªD£Áĉj¯4ĐÄAâ|̀/·Â&l’na¿‰7Ơî,Ơ.&ỡ́ ü†ßä'8đö4Jgóç—ú+¼ÊZµ*Y^¿¾úíÉtç™Î̀4à}åÎơ_—Y·‚Pƒ'¼ë¹÷đQ„XÑ%ÆÏđ™”AÎÆlµ;Kµ‚‰cưÖ-†a˜nÉøà/Tc̉è éfsçâ½÷jĐVz:nÜ(YƠ‰ˆ¨&tó»«W ;§€(¢cÇR%:TíCVU4¢Eˆ§qºÊ-iHäLÑ¢ñƯăo¸˜8ÖW+±R€p¥æl¹ŒËºS ÖœnÖ8k>ü°f͵lY²|èPíŸ$"jLtsÇ”<ư´ÛNJ*5¦€ï¿‡ à·ßªÙ`Ă ½#BÜ€ ¦0-·ÎøBa0óM€‰cư“TÂTLƠ-ñ"ÄÇñ¸¡örï^©¬qÚ4DEƠ¬Å„„R«¾5öˆHŸnX̣́£!BÑ©S©Â.] »“ú*!…(!®ÆêếÁéMÖhư¾R»ËTMLë;Ø•½/P€‚uXgÀ½¬XQê¥é—_Æ̉¥5n´{÷’å¿ y3ˆ¨„nîXP`đé_Μ)5W¶¼“>}Ô>đºáe¼,=9#*ªs×'`‚t#{ Æ\Æeµ{MUÀı̃đ‚—á.îêJÓŒj 1àºwÇk¯•¬†„`ơêê·VLwH4këÆ8$MÙé_¢ 9ZµD₫₫¥ ‚ à•WÔ>ö:#1R¹ ÛĂcU‹F´3œ¥$r.æ @íÓC0q¬Fc´áNé•ßÇưDv_‚Pê–rp06l¨q££Fá®N¾[£¡Ă‰ˆĐËÇŒ)5!8€-[ô W¯† àăƠ>üºd†]ÁéMØTRó#|ds‚^sđ:‰cæ _Â&l̉+?…S"Ä&hbÀ}ÅÇëß̉Ù³ß|SăvW®DLLɪhÈq‚ˆˆ*$¥’Ž{ ~ÛzÔ(ˆ"Ö®Ơ/ûm&OVû Ô1Ñù.îJ—!ça^%5oáÖj¬–.CĂ< aéHW»ûTŒ‰c]tl`#@8‚#z›6a“ñÑÄ‚ˆÈhD±Ô8²6Eß¾ßÏÿưŸ₫rIv6úơƒ àƠWƠ>uX  %‘ßà/xU^ÿî,À‚è!å‘­Đ* aç`¨ßaT>&* C˜¡ư„ŸÊnư _‰?†á´öñA³fú…;wÖlb]ºYăsÏáMÎ^JDªº~..¥J„ `Ƀïj÷nˆ"fÍ*gÓªUÖ­Sû„ÔmÁ>Ry‡†cøC?r7"Ù¤<̉&Á̃íjJCĂÄQŸăsé;;‘e· Nă´qÆ|×ƯºAđóÏ¥ ƒ‚ A+-­TÖØ¤ ví2øQUYJJ9ầ˜A(ç —‹‚(bưụ́·NœA€¹9@>œ/|·b«”DJW•̀v!BüßÇp¡8WÀÓ1=qjPưÆÄѨf`†ôíû̃(·BrS„¢ÎèlØ]ÁÓ‚€“'K•››C±y³vGÇR%÷ïö@ˆˆjDñư÷ú…“&Ađî»ßÛØ±EÄÆÂÙ¹œ­ ,Îk>ÿ\í3SØÂ6 a—qYÊ#¿ÂW¯á5kX+ù́_øk)–úĂ_N%M`ĐØx ·Ô>²zƒ‰c­;„C-ĐBú]‚̣ï‰ØÂöˆ÷b¯¬ Û' 05ÅéÓú›Àƒ†ÛSÓ¦ˆ,}•¯QQ4dDÿú—~yTưú|‡~~HM…(bÅ ë¼ñFq:Zê…EªÄ8Œ[†eÙÈ–̣ȳ8û̃1QœÛˆ7bc(Bà g“Ö°~¯l¦›¸©öñƠELkÅ œx/Hß‚}Ч’o¾ù˜/]{÷‡Uö Èôéx{—³ÉÛ»œ™ªïÂư·˾ÉHDT§¬ZU₫©ØØâÂóè›2¢QDhh…u6nD»vÅ]˜17™½(æHDj¡•̣ÈlÀ†¡¨ÚcX÷po5VÆhù¢Á¦}Ñ÷}¼¿{s‘«öªIùÛƯĐ<|ŒÙX†0UÇôé•M-=gæÍ«Bk‘›‹Ö­‘•UªđØ1ưa!Ơ–Ú¶m[µ{A¥0(uS#K÷î¥fÍ̉ef†5k*KôjàÁL›¦tZב#ñÊ+Pí$5·pk¶möØYóÖD4Æ ‰£áU”8¶DËÏñy‚jc§ii<ø!C%₫ßÿ•3ÆXơưöºt)§¼N~G5̉ß…uƒR75ê¸L•++ÜªÑ $¤ö^‡^°³ºfnww,[__#Ÿ£(q»±ûüpg«ôÁÆ™8̣Vu­›éH!^ÇuĂfW¯âơ׋/£;:V˜5 ._.dÚjúî;B9Yăĉu3k$"RdÅ ˆ"₫ûß̣·⫯æ>ö–-3́Îß{¯ø.ö©S1â!•óóqæ z÷₫çNª€NđÑG8|XísXùÁ/ QIH‹# âà\̀í…^j÷®ÎáÇ mÙ²eóæÍçÏŸoÚ´iŸ>}fÍeoo¯äƒg-Æw?s”ŒP%÷ïcăFl܈8ƒ ˜˜àÿĂ„ †Û}B̃{¯ÂÙ̃} öx ¨Q_D©«”º‰q)ñÚk•½̀"33CHBBĐ¿¿Á»pø0̃x£œW• ̀Ψ£‘º‡{‡qøÆáCâ!QhŒÇ̣}úé§_|ñ…•••——×åË—/]ºôôÓO¯_¿̣̃̉̉¡ŸussKNN®ỵ̣đăØ¿«WWaLSSüï?̃pçâĂ^Y…~ÀàÁ†Û_­àïÂ:ˆA©›—r¼₫:–/¯B}[[̀…Ê9±ê¤ dgcƠ*|ù%RRjÔ‰ y& Kxz2§¬&Cư®¯w˜8–#99yøđá>úèwß}×¢E ëׯ }ÿư÷úñª~3Ư¼‰S§¿v́€V[>†°0øøÔøà °e ¾û[·>¤¦…ơgb¨«ø»°bPê&Æ¥2ëÖaáBT/]°±Á¨QèÚµøK£Q₫Ñrƒ’-[°e 4đQ>ú(ÜÜàîÖ­Ñ­Ú¶…³3¬ •؈0q¤}ôц ,X0âŸÇL´Zm=4Í‘#GLḶ`¨üÍt÷.®\Á•+¸z'Oâúuüù'₫üEE†éç / ,¬Đ&%áÄ œ̀óE³_ÓZº·¾[(ˆBh DM¡ht«‹}f¡hZMa‘I!4·̣­­ÍhaªMäÜéêk{¦Å%̉ÂỨ\`²Úß+*`â¨O£ÑØÚÚ–½²˜••@§rCœ“ë̉SDDÔ¨I/‰è^øxæµûT+4€(7ÅîZ^áĂ&è)ö€2Sȸ¹¹5ÎÄ‘)”£eË–™™™R¦(KMM•6©Ư;""""u0q,G¿~ư´Zía)?EQÿüó¾¾¾—/_ïØ±ă¿₫ơ/µ»FDDD¤&å›4ỉ£>ºmÛ¶~ø¡uëÖ¡¡¡3f̀°æTDDDÔˆ1q¬P````` Ú½ """ª+øŒ#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L©Q4hÚ] } JƯĸÔA ƠL‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆDQT» ›››Ú] ""¢Ú•œœ¬vTÀÄ‘ˆˆˆˆá­j""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰ˆˆˆH&³eË–   OOÏgŸ}vö́Ù·oßV»GK^^̃ºuë†Ú¥K__ß—^zéèÑ£e«1LjIKKëÚµë¬Y³ÊnbPŒ/11ñơ×_÷óóëÖ­[hhèÏ?ÿ\¶ăbLùùù«W¯1b„§§§¿¿ÿôéÓSRRÊVcPŒàâÅ‹nnn¿ưö[¹[•„ a‡É4<<\í>4Ÿ~úiTTTNNN·nỰ̣̣?hff¦v×…ÂÂÂqăÆ}÷ƯwZ­ÖÛÛÛÆÆ&!!aëÖ­&&&̃̃̃r5†I-¢(¾öÚk©©©nnnº›ă‹}ùå—/^¼Ø®];ggç„„„˜˜˜;¶mÛV®Ă¸“V«7n\LLŒ™™Y·nỪ̀̀:´iÓ&oooGGG¹ƒbK—.MLL jƠª•̃&%!høa©ÆÎ;çîîîëë{ăÆ ©d̃¼y®®®ÿùÏÔîZc±qăFWW×àààÜÜ\©äÏ?ÿôööîĐ¡Ăï¿ÿ.•0L*Z³f«««««ëÛo¿­[Πß;w¼¼¼:wî|̣äI©ä·ß~{ê©§zö́©Ơj¥ÆÅȤŸ`Ó§O/((J;Ö¡C‡€€¹ƒRÛî̃½{âĉ¹sçJ?¬NŸ>­WAIC˜x«Ú6õ\TT4cÆŒ-ZH%aaa¶¶¶»wï.**R»wÂ={̀™3Ç̉̉R*iß¾ưäÉ“µZ­|ĂaRKJJʧŸ~êîî^vƒb|111YYY“'OîÚµ«ṬôÓO<8###11Q*a\Œ́—_~0~üxF#•ôèÑ£C‡—.]ºuë–T ԶÀÀÀo¿ư¶¢ JBĐÂÄÄÑNœ8abb̉·o_¹ÄÔÔ´wï̃™™™̉ªm©©©VVV;vÔ-lß¾=€+W®H« “* ßyç{{û°°°²[ă;tè Ç×-ŒJNNîܹ³´Ê¸YëÖ­È9"Qïܹcbb"§’ Jm‹ˆˆX±bÅ+zö́Yn%!h abâXS¢(?¾Y³fÍ5Ó-wuu…NÖBµêË/¿,ûgâÙ³g899aRÏçŸ₫Ç,X°ÀÆÆFoƒ¢¤¤${{ûV­Z½zơêĐĐĐ={Jy¼.Åø̣óó³³³]\\ÂĂĂ£££år''§Ï>û́©§ă¢77·¯¿₫z„ &L CCCgÏ--3(ªS‚F&^q¬)é/u+++½rkkkwï̃U»ƒV«]¿~ưË/¿œ››»páÂæÍ›ƒaRC^^̃;ï¼ăääôÖ[oUT qegg8₫ü?üùóÏ?}ºÆÅø²²².\xï̃½;=zÀ€–––Û¶m‹•*0(ªS‚F&^q¬);;;ArssơÊsrrđÏßd4?ÿüó‡~xáÂ…Ö­[ÏŸ?_~T…a2¾ÈÈÈ«W¯FGGËo,éaPŒÏÂÂBZX¸p¡¿¿¿´üú믧¥¥ÅÄÄ|ÿư÷£Fb\Œïw̃9uêTXXØÄ‰¥’´´´Ñ£G¿ùæ›;v́h×®ƒ¢:%!h$aâÇ̉h4¶¶¶eÿ’ÈÊÊ ¿WEµ-???""büøñiiiÓ¦MÛ½{·îÎ “‘%$$DGG¿úê«̣ûe1(Ægeeeaaaiiéçç§[̃¿çÎăbtéééqqq...rÖ M›6S§N-((غu+”:@II˜˜8@Ë–-333¥ï Yjjª´Ií̃5 EEEo½ơÖúơëûơë·oß¾×_½́U.†É˜¤I/V¬Xáö#Fرc‡››ÛĐ¡C¥j ñµhÑẦ̀LƯBéÿKaa¡´Ê¸Sff&ggg½̣víÚ¸yó¦´Ê ¨NIC˜˜8@¿~ư´ZíáÇåQ??¿¬¬¬?ÿüS·P(Dk“q1&gggSSÓ””QuË“““¸¸¸H« ꔄ Q„IíÈ‚k×®¹»»4(;;[*ùâ‹/\]]£¢¢ÔîZ£PTTÔ¿ÿ®]»æååURaRWRRRÙ™căûư÷ß]]]ƒ‚‚233¥’3gÎxzzvëÖ-##C*a\Œ́ƠW_uuuứ³ÏäÉ{₫üóOŸ§zêüùóR ƒb4sæ̀)wæ%!h aÄ̉âPơ¬Y³&22̉ÑÑÑ××÷̣åËñññkÖ¬)ûZ>\zzº¯¯¯¥¥å“O>Yvë /¼*-3L*:{ö́ˆ#₫ùE‹é–3(Æ÷å—_~̣É'¶¶¶^^^¹¹¹'NœaÑ¢Eƒ–ë0.Æ”‘‘1jÔ¨¿ÿ₫ÛÙÙÙĂĂ#33óÔ©SEEEÿ₫÷¿CBBäj qüûßÿ̃²eËæÍ›Ë>¢­$ >L¦áááj÷¡!đôôtvv¾qăÆ‘#G4ÍàÁƒ###ËxLµ!999&&¦°°0½<îîị̂[2 “ñ¼¹iÓ&77·€€ƯrÅø¼¼¼Ú´isñ⍤¤øøø|̣É'Ư»w׭øSÓ¦M_|ñEׯ_?}útAA——WTT”ổ’ŒA1ØØØßÿ=((¨U«Vz›”„ Á‡‰W‰ˆˆˆH¾CDDDD0q$""""E˜8‘"L‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆaâHDDDD0q$""""E˜8‘"L‰¨Ệóó£££'MäëëÛ©S§€€€W^yeÍ5÷ïßW̃È·ß~ëæææææ6räH£ơ<%%ÅíÇWáÜ•'..îÀ¸uëVEubbb¤n{xxdee•­àçç'UˆR¾ë%K–HŸzíµ×Ô> DT0q$¢ª9{ö́ AƒÂĂĂ=ŸŸụ̀åƒFFFüôÓOjw°₫™9sæÔ©S§Nœœ\Q₫ưû›ĐjµGƠÛzáÂ…´´4iyđàÁj5XL‰¨ RSSCCC¯]»&—HÙŒäÆ3f̀8w¦¬¬¬[´h¡öaƠ¶¶¶=zô–<¨·ơĐ¡C̉‚££c§NÔî,5XL‰¨ "##sss¥å‘#Gnß¾=11ñÈ‘#VVṾ̣̣f̀˜¡¤©ÀÀÀØØØØØØ•+WÖ¼cW¯^ÍÏÏWåœm×̣¥ÄC‡‰¢¨»éđáĂzuˆˆjG"RêØ±cqqq̣̉+¯¼2₫|wwwSSÓG}tÔ¨QŸ|̣‰´)55ở¥K̉²î#tZ­vÉ’%½{÷^²d *xƱ°°0:::88¸W¯^]ºt:tè¬Y³ô.aê¶™‘‘ñöÛowï̃½_¿~={ö\µjU5K·Á¬¬¬… 9̉ÓÓsذa_|ñEaaa5v]ѳƒ3gÎÔ}ñă?vss“sñ &¸¹¹ååå•ÛOùnufffRR’\——wâÄ iyÈ!ryQQÑ÷ß?v́X??¿N:ùùù;vëÖ­ºGTùÙ¨¤ç²ŒŒŒˆˆˆÑ£G{zzöïßÚ´igÏ­áwƠYµ;@DơFtt´´`kk;eʽ­}ûöíÓ§Ozz:€äädggg½ sæ̀Ùºuk%íçç燄„œ9sF.IIIIIIÙ¹sçܹsÇŒ£W?'''88ø¯¿₫’V³³³?₫øăK—.ÍŸ?¿z˜••5zôè .H«çÎ;wîÜü!eºµºk%́́́|||¤<(ß’—.y:99úØQ®?sæ̀Ư»wË«iiiiii qqqK—.5H—âăăßzë­ŒŒ i577÷Ê•+û÷ïŸ0aBXXXí "R ¯8‘R¿ụ̈‹´Đ´iÓ²V­ZµmÛ¶mÛ¶ 8PoSRRRåY#€•+WJY£……E¿~ưÆÛ¹sg¢(Λ7ïâÅ‹zơăăăÿúë/‡nƯºÉư‰‰‰‘ïÛVUBBÂ… Ú´iÓ¹sç&MH…{ö́ILL¬¥]¿ổKû÷ï·´´”V###÷ïßoaaQQưAƒI º/!É8ễ§̃½{·”5 ‚àăă3|øđöíÛK›öîƯ_½S¤+''çÍ7ß”²FŸiÓ¦ :ÔÄÄDŵkׯÄÄÔ|DT×đ#)RXX(_Xrrrªêǯ_¿îââ2ỵäǼY³fåÖ‘³™É“'ËW4'MtôèQ­V{́رvíÚé}ÄÏÏoé̉¥æææéééăÆKMM°bÅ __ßêæûï¿ àâÅ‹Ă‡đà€ÄÄIJoœd×vvvvvv‚ H«-[¶|üñÇ+©?`À€đđp­V›”””™™éàà€ p” 'Nœøî»ïJË#FŒî#'%%ùøøTïÉV¯^-4pà@ù¦§§çG}`Ù²eÆh‰ˆŒƒW‰H‘œœy¹ïA[ZZ®]»600°sçÎåR–`ûöí111Rµk×®]»vÉÛd¦¦¦|đ¹¹¹Ô¥·̃zK*ÿơ×_妪¤}ûöRÖ ]»v^^^̉²î[äµ´k…́íí½½½ˆ¢(¥†—.]ºrå €'xÂĂĂC®9dÈÅ‹/^¼xܸqRINN<ĐæƯ»wk̃97}ñÅå‘#GJb¦¥¥U2ºƠS¼âHDH/MK*§º":txhºÙ«W/ézXjjếÙ³AđđđèƯ»·¿¿ÿÓO?]¶¾««këÖ­u?.-ˆ¢xåÊ—ªvRïjŸ­­­Ü`mïZ¹AƒIC—ÿôÓOÇ—ïSë¾#w)++ëđáĂIII¿ÿ₫{bbâ½{÷ Øé"+€—^z©Ü —.]rss«½SADÆÇ+D¤ˆ™™™½½½´\ö œ$;;ûÎ;wîÜ)û^°üÙJ¼ñÆ!!!̉e<¢(={våÊ•AAA!!!e³ƠæÍ›ë®ZZZ>̣È#̉²|W½Jä[Æå®Öꮕ0`€tIOºƒ/é¨7OAAÁÂ… }||fΜ¹fÍøøx­V+ƯÚ6ˆœœùeđܾ}»VOG"RÊÓÓSZˆ‹‹+wH—Aƒuï̃½{÷ị̂ûײJ’0™F£™;wn||ügŸ}hcc#o:ỵdÙ™ô233uWïß¿/ßOwtt¬ƠS¡â®¤{èYYYÇ—âqvvÖ»¶·råʵk×jµZ''§đđđ;vụ̈Ë/~~~†ê†µµµ|zÍ5ûË3tèĐZ=Dd|L‰H)ùQ¶´´´o¿ưVok\\œ|±Mz¯J̣óó322222̣óó¼xñâøøøµk×Ê7©å¡ e)))̉è?’cÇI÷”Í̀̀Ú´iS«§Bù®ơæ•ÖË8«G¾¸¸xñbé‘J½ûÔ¾ùæiáƒ>vss355½~ưº̣½<´çO<ñ„´ Ơj×akkkcccccSÉëáDTO1q$"¥üüüzö́)-Ï›7oụ̀å7õPPP°}ûvùƠƯǼC‡UmüÂ… Ï₫CÑÔÔ´gÏ£F’*è^€”|ôÑGñ¼¹hÑ"©Üßß_w"ÄÚđĐ]ËO@9sF}ß¾} •7«dï 011đÇH%z‰ă½{÷äÛÄr₫wö́Y%£đ(ï¹üͰiÓ&ù1Đ½{÷z{{wï̃ƯÏÏϰTQ]À—cˆ¨ ̃{ï½   û÷ï‹¢¸té̉¥K—ÚÛÛgeeiµZ©B“&M–.]Z¼ÍÍÍ­yóæZ­688ØÏÏÏÖÖöÚµk±±±R…”ưÔ¾}ûüưưŸ|̣ÉÄÄDéf±‰‰Éo¼a„SQù®å¸ïß¿?|øđ:ܾ}[~›Dô¼à+RRRƯÑTöĂ¹yóæ^^^r&×®];yŒFIÓ¦M›6m*µ9gΜ]»v ‚pøđáÊ猩jÏ_}ơƠÍ›7geeưøăăÆóööNII‘Ÿ¹œ8q¢üv5¼âHDUàêêºvíZƯ÷£oß¾-gŸ₫y5.7011Y¾|¹ts3##cË–-ÿưïwï̃-Ươöö~ùå—ơ>̉­[·6mÚ¤§§?~\JƯ¤Qrjơ¥f…»îرăsÏ='-çååựË/©©©NNṆU:½Ö¤…_ư5**JÉuGƯÁ‰Ễ§¡oß¾̣̃ccc8Đ²eËîƯ»K…̉¥âr)ï¹Mdd¤t%8!!aÙ²e{÷î•Fü 6mZmGˆŒ‰#UÍ3Ï<³oß¾Ù³g{{{;88˜››·mÛÖßßö́Ù{ö́éÓ§Oµ[î̉¥Ë₫ưû§NÚ©S§-Zh4›®]»FDD¬_¿^~ÛZfkkưâ‹/:;;7õ|àÀëÖ­=z´N‚’]GEE½ùæ›®®®–––ăÆÛ¼ys¹o—Ï=;00ĐÁÁÁ̉̉²}ûöJ^$8p t·ẽ§–Ûtuu`bbâîî>a„mÛ¶ơïß_Úºk×.ù6tYÊ{îïï¿}ûö   ;ZZZ:99 0`Æ áááJ‚ˆê¡́ødDDuÙ’%KV¬X ÿ₫Ë—/o$»®†Â¸¸8Tp—Ÿˆ¨øŒ#QäÑh˜2‘añV5)ÂÄ‘ˆˆˆˆaâHDDDDđå""""R„W‰ˆˆˆH&DDDD¤G""""R„‰#)ÂÄ‘ˆˆˆˆùÿj·Ä̉…¡IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/sigmf_101.png000066400000000000000000001135471463010412100221130ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw\ƠVđç2DYEpa…ëV8êB¸w+8^Ü{kƠ:êBÜUAêuRµ*hµ*{AÄQD¡À徤&á².páø}?~Ú'''ÉI"úxNr"S*•-Ö €Â‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨E‡u ¹\κ ¿‚‚‚X7$ù¢x₫f’2¹\›"5¸)̉„û"A¸)Tl;‰0T jAâjAâjAâjAâjAâÅ©S§X7Tá¦Hî‹ᦀt qµ qµ qµ qµ qµ qµ qµ qµè°n€*¹\κ P¼±nBá€Ä¤‘CÁ?TÔ‡¡jP GP GP GP GP GP GP GP GP GP GÈ1;;;™L&“Ézơêź-=z4×Â+²nKÑÄr£F{ö́™4i·3jÔ¨J•*•.]ºU«VYl{₫üy‡råÊ}÷Ưw-Z´8räˆ:GLNNnÚ´i³fÍÄ…™wèĐ¡{ö́iÚ´)ëëT¤ q€Ü0778p`ëÖ­‰(66¶Q£FÛ·ooÙ²åÿ₫÷¿çÏŸ;99Ư¹s'Ă }}}Û¶mụ̂åK—Q£F}øđ¡wï̃[¶lÉöˆsçνví¸$‹ăÚÛÛ8°J•*¬¯S‘‚Ä@c …B¡(˜c%%%¥¦¦²>ăÿ¬^½:$$ÄÛÛ{ï̃½ëÖ­»té’L&›:uj†•gÏ]¾|ùÛ·o¯^½zÉ’%·oß®T©̉Â… ³>Ä™3g<<}>|¸cLJfưôa.ÄÆÆ>{ö̀ÙÙY&“ñ…mÛ¶Ư²eK`` ÊÛ3ÚÚÚ÷îƯ333ăKRRRw®m†††âBn$k|f~ươ×"jß¾=×Âô®_¿>wî\úơëkê¸kH4 V­Z%J”à ärùóçωÈÄÄäÊ•+gΜyúôippđ£GRRRÄÛÊår>kT§¾xœ—ËÓ—‘¾¾₫Úµk§Njmm]«V­æÍ›;99ué̉EÜNN|||Ï=3;5eæư¬âö|₫üY\KD¦¦¦YlœpơêU77·¦M›>ỵ„ë/ïÄÙÙ¹}ûö&LĐàq!×8@á¡é‡ọ́•N||üׯ_{÷îíëëÛ¸qă:tï̃½Y³f 4×466æcuê«óر}úô9qâÄùóç}}}½½½år¹¿¿¿Ê𮑑Q¶ÙàÍ͵´´TF‡###‰È*ó§B9¥J•rtt\¾|yÿ₫ư=:bÄñÚÍ›7‡††ö́ÙsÅ\ILLŒB¡pww¯T©R¿~ưr}\È$Px4iº™züøqrr2ßÛ—˜˜øäÉ“6mÚøúú®]»vâĉ|e•D±œÖÏBTTTHHˆ­­­›››››[jjê¦M›Æïåå5₫|qÍ<UëèèÔ¬Yó̉¥Kâ‹/Êd2ñ»,œ“'Oö́ÙsÏ=?ưô_hbbBumro¦¯^½Z\=kÖ¬6mÚ8;;«\ĐLÇ >|X³f ¿¸xñâØØØ^½z½zơˆjÔ¨Á¯:|øp|||f=|9­Ÿ…   ¦M›®Zµ[Ổ̉jÓ¦ ‰Æ²yÜPufÔ9ÖđáĂ_¼xqâÄ nñưû÷‡nß¾½µµµJÍ&MÑöíÛÅg´sçN"Rù$ Í™3G™V•*U6mªT*ÏŸ?Ÿ£ă‚F Ç@,,,æÍ›wåÊ•zơê]½zờ™3Í5suu}ơê•ÁđáĂheeuơêƠsçΕ-[6 ÀÏϯS§N*ûqppÈQư,4jÔ¨víÚË—/ ­]»vPPŸŸŸ©©©³³³JÍ<UÑ!C¶mÛ6pàÀ±cÇïØ±#!!ŸÓÛƯƯ}ụ̀åË–-5j”™™Ùœ9s.\ظqă;Êd²3gÎ\¿~}̉¤IuëÖỚqAăĐă M49sæ̀§OŸÖ­[1mÚ´óçÏkiiUªTÉ××·B… ¿ưöÛ5kôơơïß¿¿lÙ²ØØØuëÖ¥ßONëg¡D‰~~~ƒ¾råÊ¢E‹.\¸Đ¾}ûË—/çGoœ¡¡¡¿¿ÿO?ưtøđajƠªùûûó߉₫̣å˧OŸ¾~ưÊ-Ο?çÎÚÚÚ^^^%J”Ø¿¿¸¿VSÇ“åñ_\. bƯ H#,, ĂRƒ›"M¹/…îRkkëúơë9r„uC ±±17^,eÎÎÎYÔÉÅï·B÷[TSĐăjÁ3ïß¿?pà€••U‹-X·%7õ|₫üyxx8ë†)ḤªS§NUªTaƯ‚öøñă₫ưû÷́ÙS‰ăÖ­[½¼¼ˆ¨ó/U!ḤjÓ¦M¬›PĐîÜ¹Ăº ÙđôôôôôdƯ¢Ï8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8@ÙÙÙÉd2™LÖ«W/ÖmÉØèÑ£¹V¬X‘u[$5jÔØ³gϤI“¸Å˜˜˜Q£FUªT©té̉­Zµ ̀bÛû÷ïÿôÓOåË—/]ºt£FÖ¬Y“’’’í“““›6mÚ¬Y3qafÇ:tè={6mÊú:):¬…’¹¹ùÀ¹866¶Q£F/_¾́Û·¯™™ÙáÇœœÎŸ?ogg—~ĂĐĐĐ6mÚ(^½zUªTé́Ù³S¦L¹xñâ‘#G²>âܹs¯]»&γ8®½½½½½ư‰'^½zÅúRèqĐ…B¡P( æXIII©©©¬Ïø?«W¯ ñöö̃»wïºuë.]º$“ɦNaå)S¦ÄÄÄœ={vÇ‹-ºråʰaĂ=zúôé,qæ̀\̣‰#@^Y[[O}f1c†™™Ù©S§ºuëÆUöññY¸páܹsµ´´ˆ(Ûúqqq÷îƯ«^½:éèè̀˜1#>>₫ƺººDtÿ₫ư€€€ÏŸ?kii8p`đàÁÛ·oç6tss;v́ØÛ·o-,,4xỸ½{§T*ÍÍÍÅ…åÊ•#¢>¨TÖÑÑY¶l™¸äăÇË–-ÓÖÖîÛ·o†û÷đđđ÷÷ ,UªT® Ä@̀̀̀ÄÖÍŸ?ßÓÓóàÁƒưû÷¿~ưºÿp^TT%$$đ•-,,ø¬‘ˆ²­oooÏeDäàà@DÎÎÎ\ÖHD †††2™̣́åËááá•+W&¢-[¶lÙ²%}ăSRRN<™Ù©ơèÑ#ësçÚfhh(.422⟅ .Œ1"$$ÄÓÓÓÆÆ&}…ëׯÏ;×ĂĂ£~ưú<.äG ¨U«V‰%øE¹\₫üùs"211¹råÊ™3g>}üèÑ#•©gär9Ÿ5ªSß̀̀Œ¹|1} éëë¯]»vêÔ©ÖÖÖµjƠj̃¼¹““S—.]ÄíäÄÇÇg1„­̀¢£UÔÏŸ?‹ ccc‰ÈÔÔ4³­^¾|9nܸăÇÛØØœ={¶mÛ¶éëÄÆÆ:;;·oß~„ :.äG(4ÆŒaƯ‚œĐÑщÿúơkï̃½}}}7nÜ¡C‡îƯ»7kÖ¬AƒâÆÆÆ|¬N}ơ;¶OŸ>'Nœ8₫¼¯¯¯···\.÷÷÷W̃522Ê6;̀‚¹¹¹–––Êèpdd$YYYe¸É¾}ûFYºtéÍ›76Lå]ĩæÍ›CCC{ö́¹bÅ ®$&&F¡P¸»»WªT©_¿~9=.äG(46ndƯ‚̀=~ü899™ïíKLL|̣äI›6m|}}×®];qâD¾r“]ç´~¢¢¢BBBlmmƯÜÜÜÜÜRSS7mÚ4~üx//¯ùóç‹kæq¨ZGG§fÍ—.]^¼xQ&“ƠªU+}ưăÇ4èÇộ̣RhVÁ½™¾zơjqattô¬Y³Ú´iắ́œ£ăB̃!qĐ€>¬Y³fÆŒÜââÅ‹ccc{ơêÅÍ>]£F ¾æáÇăăă3ëáËiư,ưđĂsæ̀Y¼x1iiiµiÓ†DcÙ¼<UÑđáĂ'Nœxâĉ®]»Ñû÷ï>ܾ}{kkëô{›1cFÅwï̃­­­ơnç̀™3gÎq‰µµuụ̀åù‰{Ô?.hG °°°˜7õ•+WêƠ«wơêƠ3gÎ4kÖ̀ƠƠơƠ«WÇ8p ••ƠƠ«WÏ;W¶lÙ€€??¿N:©́ÇÁÁ!Gơ³Đ¨Q£Úµk/_¾<44´víÚAAA~~~¦¦¦ÎÎÎ*5ó8TMDC† Ù¶mÛÀÇkll¼cÇ„„„… rkƯƯƯ—/_¾lÙ²Q£F=ỵäéÓ§5jÔpssSÙIï̃½ù7Ç5r\Đ8̀ă M49sæ̀§OŸÖ­[1mÚ´óçÏkiiUªTÉ××·B… ¿ưöÛ5kôơơïß¿¿lÙ²ØØØuëÖ¥ßONëg¡D‰~~~ƒ¾råÊ¢E‹.\¸Đ¾}ûË—/çGoœ¡¡¡¿¿ÿO?ưtøđajƠªùûûóßụ̈å˧OŸ¾~ưJD!!!DôäÉ“éÜ¿_³Ç“åñ_\. bƯ H#,, ĂRƒ›"M¹/…îRkkëúơëgû©å¢ÄÎÎÎØØøüùó¬’ gg瀀€ˆˆˆ,êäâ÷[¡û-ª)èqµàGÈ÷ïß8pÀÊʪE‹¬Û’›7o>₫œû˜!h G€¼êÔ©S•*UX·¢ =~ü¸ÿ₫={ö”fâ¸uëV///"ªP¡ë¶ḤjÓ¦M¬›PĐîÜ¹Ăº ÙđôôôôôdƯ¢Ï8f#44T.—ß»wuCCâ˜Ư»w³n€$`¨:c±±±Ï=;~üø₫ưûY·@8f¬[·nÿ₫û/ëVHÇŒ-Y²„›à~Ï=W®\aƯ ụ̂…âă)>="++ụ́%ͯÈH*Y’’’()‰¾~¥¤$ºs‡ärJI¡ädá¿.P³f”’B )¬O 2²8"J%--JUYOŸn‹[¬›̀ÇŒñ3 HN|€KL¤̣÷'==zư^¿¦7oèơkzơÊ:*X}Q́ùs!¶µe} x‰¹—J%Påp+Mú‰Â/½/Ô" îQ-̉û¢ú‹bX·$ùB.—«”œ:uu£µW¯^±n¨ÂMÉ'ÚÑÑ:áá%?.ñäI‰§OK>~,KLdƯ¨L}$Ó`² &›­ô¿ªú’*q¿*Q=ÖMƒbÆkTVk[]dƯ>©@â˜/ç÷+%N Ÿß¸)yµv-}úD₫₫táë¦d ‰Jœ"§WTá!Ơ~@uP2Ê¢₫jĂºÉ $…Ä­[tø0>L!!z\==ªPŒŒÈĐŒŒ₫ î̃¥®]ÉÀ€ îGZ®pîa¹nÇÅ_+E~Â$líZZ·^¼ĐÀ®tuéûï©Z5ῺºÔ¢éé‰k………eÑ|ÿ>;FÇÑ­[D—X_ÍQRÎí•ËåT,‘8H̀¼y´xq.·mÖŒê×§©aCÊó÷yCCiçNZº”RR4y~ZZT³&ÙØ U«ö_`e•¦NºÅAŕ́́î̃½KD={ö~̀Ó~LLÈ̃₫¿_ßO5jä×e¶jÔ¨1gΜ ß₫‰3sæL__ß?6hĐ`ÅM›6Ív'­Zµrttœ?¾:GLNNnÙ²¥L&»zơ*_˜Ùq‡Ú¢E‹ 6àU< BâÀοÿ’£#=~œ}Írå¨aCÚ´‰ªTÑlN¢Ơ«é̀¾ÀHưmË–¥¶mÉÁÚ¶%›‚¹d !æææäâØØØF½|ù²oß¾fff‡vrr:₫¼]{¸sçÎåË—Ơ<âܹs¯]»&ÎG³8®½½½½½ư‰'8jG6l ñă³©Ó²%MD½{küàÿüCnn9~r²E êуzöÔ`g¤P(ˆH[[»•””¤£££¥¥Åú¤‰ˆV¯^²cÇÁƒÑĉ6l8uêÔsçÎ¥¯œ’’rîܹ+W®lÚ´)55UÍCœ9sÆĂĂCGG'×Ç…¼“Äï6€âB©¤6mH&Ë4k40 ­[I©$¥’.^ÔlÖ8{6Éd$“Q»vÙgÆÆ4q"Ư¾ư_[”Jºt‰¦MCÖ˜1kkëÉ“'oذÁØØ¸D‰uêÔ™5kVRR_aÍ5uëÖ500055m̉¤É̃½{U¶½yóf½zơêƠ«§Nư‰'NŸ>ƯĐĐPOO¯I“&'OLII™={v5 ëÆNLL\¼xq5J•*U¹re77·|ú î₫ưû-,,\]]¹ÅªU«öíÛ×ßßÿíÛ·é+GEEúØqáÂ…>|Psÿï̃½4h››[…´ïæè¸wH³±xñâ   ₫' —̃¾%™Œ´´Èß?ƒµơëÓÅ‹¤TR\ ¦ÁĂ¾{G:ü—/._MåQ£h÷î¹41:Ö®¥,‡!C‡?¾U«V3gÎ,[¶¬»»{ûöí•J%-X°`Ê”)eË–9sæèÑ£?₫́âârüøq~Ûˆˆˆ;~₫ü™„Ͷ₫={vîÜ9gΜ… †††öíÛ·uëÖçÎ9rä Aƒüưư ÀƠtssûå—_*V¬8eÊ;;»;vốÙSăçû́Ù3™LƶmÛ6555000}}sss¥R©T*Ÿ>}ªÎ₫•J¥«««‰‰ÉÚµkór\È; Uä?KKʰÿ£D :7×ø““iĐ ́_¶16¦)ShÊ20ø¯$,LºŸ™!"Ẹ́¾“¼Èb̉–ׯ_/]ºtö́ÙÜâŒ3<<<8Đ¿ÿƯ»wÛÚÚ>}f1c†™™Ù©S§ºuëÆUöññY¸páܹs¹qçlëÇÅÅƯ»w¯zơêD¤££3cÆŒøøø7nèêêÑưû÷>₫¬¥¥uàÀÁƒoß¾ÛĐÍÍíØ±coß¾µ°°Đàey÷îR©477–+WˆÔïS̀‚‡‡‡¿¿```©R¥ ̣¸G€üÔ¶-eøÉûH4ø¨AC‡̉ÙÔ9’ÜƯÉ(¯Á@ö̀̀̀¦NÊ/Ο?ßÓÓóàÁƒưû÷¿~ưºÿp^TT%$$đ•-,,ø¬‘ˆ²­oooÏeDäàà@DÎÎÎ\ÖHD †††2™̣́åËááá•+W&¢-[¶lÙ²%}ăSRRN<™Ù©ơèÑ#ësçÚfhh(.422âŸׯ_Ÿ;w®‡‡Gưúơ ̣¸!$ùc̣̀ồ üÏ?©W/íéSjỮ¿Ï´‚¥%­[G}û²¾,EW­ZµJ”(Á/Èạ̊çÏŸ‘‰‰É•+WΜ9óôéÓàààG¥¤S.—‹ßqɶ¾™™sùbú"̉××_»víÔ©S­­­kƠªƠ¼ys''§.]ºˆÛɉÏb›pÏwôÏŸ?‹ ccc‰ÈÔÔ4/W566ÖÙÙ¹}ûö&L(ÈăBf8hZt4eø—Ö•+Ô¬™ÆæáA3fdº¶JÚ³‡~øơ5ÑC2̀ûN ŒN||üׯ_{÷îíëëÛ¸qă:tï̃½Y³f 4×466æcuê«óر}úô9qâÄùóç}}}½½½år¹¿¿¿Ê𮑑Q¶ÙàÍ͵´´TF‡###‰ÈJen÷Ú¼yshhhÏ=W¬XÁ•ÄÄÄ( ww÷J•*ơë×/Ÿ ™Aâ QÓ§ÓÊ•ª…Û¶ÑĐ¡?Tụ̀ôî]Æ« iÏúöD\ÑC1¬›©Ç'''ó½}‰‰‰O2ƒÄ@sdé^Ư˜>¾ơ”hƒ]¸ñªeËhÖ,ÖסXúđáĂ5kf|ë₫]¼xqlll¯^½¸Ù§kˆ¾Ÿsøđáøøø̀zørZ? AAA?üđĂœ9s/^LDZZZmÚ´!ÑX6/CƠD4|øđ‰'8q¢k×®Dô₫ưûÇ·oß>‹OŸ«cΜ9sæ̀—X[[—/_ÿrL>2ƒÄ@NŸ&'§4%tö¬Æ“ÙË6ß}G₫₫„N†,,,æÍ›wåÊ•zơê]½zờ™3Í5suu}ơê•ÁđáĂheeuơêƠsçΕ-[6 ÀÏϯS§N*ûqppÈQư,4jÔ¨víÚË—/ ­]»vPPŸŸŸ©©©³³³JÍ<UÑ!C¶mÛ6pàÀ±cÇïØ±#!!aáÂ…ÜZww÷åË—/[¶lÔ¨Q½́Y4ó8äYëÖªYă?ÿh̀§}s¾ÿBBXŸ2diÓ¦M¬›PĐîÜ¹Ăº ÙđôôồđëMèqÈ!qfçè¨Á¬ñÀ ²Æ‡‘5€T qP[PP̀nÀ ιS§ơdÎR*1ÉHGµU¯.ÄS¦Đ̃½Ùë»w$“¥é¸,S†”JZ¼˜ơù¸JèHe$Ëû® ? qP¸¯ÑƯ4ôBÀ„ T¾|’åË)6–ơɸ´@F22ø›₫fƯÈ^Pƒ8ḱÛ—¾}8*T ×¯Ó”·o2¼¤—äBx p@#@vºvb]]:tH#{•É̉dNNÅ+k\E«d$«L•‘5"H²ôûïṭ¤°˜”¤‘½ª¼=}éùù±>Ó‚bMÖ2’M£iéW•¤’¾ä«¤â”A*ªÈÜ»w4b„°¨‰.Á;w¨Aƒ4%Ť£ñ6ƯnD2K §Ñ4̣—ÈårÖMUH2'~oå̉¥¼ïoíZ,,áWaSó«t5}y{ji½ U¤%~–±*Q"/;0€‹jÖØÚÉH–>kI#•¤DÖPd qy₫œ._÷íËËÎ\\̉́ HfܳŒÿĐ?*å3i¦’”^äź IHDªUâ»wó²§Áƒiï^a±èeh‚Œdûi¿Jù2Z¦$årZκ yxÆà›áĂ…¸^=ªW/×{:”ví‹XÖØ‰:¢SéË×Ѻ 4uë !qøfË!ÎCwăàÁE6k¼A7́É>}ù\û+ưʺuï8QÚé¾óđhăöíE6kÔ'ư/ôE¥pØL›Y7 G¢U«„¸D êß?w» £aĂ„Å"“5¶£vé_©H_̉KÖM€…—cˆ¦MâkÜK{•¤DÖPœ¡Ç7++!₫ë¯Üí£ys!.]g}RypÚàôh­RX—ễ£{¬›́!q€b,1‘"#…Eñ'ªƠ6g]}iïógÖ'•Z¤¥,—æRT*âY· ¤CƠPŒ‰»ÒÅ₫₫›–. ïkÔhƒŒdJJs¾ä‹¬ÄĐăÅU\EG ‹;çb; ql,ë3Ê-ÉTJzSọaƯ.ô8@q%îne\L‹„ YËrµ?(úĐăÅ’¸»ñ̀™œnN›6 ‹y˜2œ=´'}Ö¨$åĂºi iH øùø‘âEï|´k—ÓT©"Ä7o²>’“| —¬ *¯ÅdCƠPüˆ»ÏËËÖ?₫H ²>µ½ Öd­Rˆ”Ô‡G(f>| /_„E‡m½n½y#,8ÀútÔö?úŸJÖèAÈ GĐăÅŒ¸ĂĐß?§[O$Ä…hÖÆ ŸhdƯ((|ĐăÅÉ•+”œ,,¶j•£­ÅóïüñësQÏEº¨’5ö È w8@qấ,Ä9Útè}’úơÓ́I²Ñ ÖÔZ\r“n¥£¬Û…†ª 8yùRˆø!G›îÙ#Äwî°>5¨t4j“v ¥°nnèq€bcÆ !=;G›©f}"Ù ¡•¬q)-EÖy'Ñǯ_¿FDDDFFZYYYZZjkk³n~B¼t©úÛ­Z%ÄzzÔ§ëÉ̉L¹‚VˆK>Đ32cƯ.( $—8^ºtiÓ¦MwîÜQ~{_QWW·mÛ¶&L¨V­ëÖ@¡uë–W­£M§MâÄDÖ'’¥ÊTù% Ăñ%¨ÄW*lŸµ “ÖPơÏ?ÿ́æævûöm¥h–‹äääÓ§OwëÖmÿ₫ư¬…–øó0ÿü£₫v––B¨<Ôx—în  ¬ÛETǤ¤$ooo.¶¶¶̃°aĂƯ»wõ¼y÷î]OOϪU«‘B¡Ø#~­@M£F ñ²eêo'f}™ØFÛÊQ9q‰’”ơ¨ëv@$•gß¿ÿùóg"*UªÔ®]»Ê•ûïA==½¶mÛÖ©SÇÉÉ)..î–ø)%5m̃,ijf©¹QçÎBܵ+³>‹Œô¦̃Gè¿Xƒj<¦Ç¬E–Tz+T¨`llLDµjƠâ³F^Ù²eëÔ©CD¥K—fƯR(lΟâúơƠÜ(*üü„ÅăÇYŸEFtIWœ5ΠÈ _I%q$¢–-[QhhhRR’ʪäääçÏŸ‘½½=ëf@a“«×b̀DÓ׈3Oé‘L<5ăEºèNî¬Eœ„ÇY³fUªT)**j„ oE£¿ÿ~Ê”)ïß¿·´´;v,ëf@a“*Ħ¦êlñûïBl`@mÚ°>…tT^…Q’²%µdƯ((ú¤̣Œ#ÍŸ?ß̣̉̉åË—çÏŸ¿xñ¢­­­™™YTTTppprr2YYYưîÆ7²n8HØ€B¬ö#Fq\ëSH+„BlȆ_”‘,•Ró°?€Pâxö́Y>V(O!3F-Æb''ÖíOk?íw&g~±5ºAøƒ „†ª4́¯¿„¸U+57÷KßanMg£h²F(`êq£^g€ºzôbơ^‹i)zPpæLÖí7ŒZP¿¸…¶ü₫ǺQṔH(qœ8q"ë&@Ñ¥£ÖwBnFË—³nó7µ©ö#zÄ/̃¥»˜ß˜Pâ IăÇ ±øm—̀•)#ÄüÁºưß“q Åđ‹JR²n_ŒÇ>}úQ¹rå<==¹8[*ß³VÓ¡C‡<RªT©Ö­[OŸ>ƯÄÄ$‹úIII;wîôóó 311©S§Î¸qălllÔ> °¶Aô¥fñ—c2ñäI¨³Ư¢ ¤Ÿv‡u‹ Xcœ8>|øˆ¬¬¬ø8?¬Y³ÆËËËÀÀ qăÆááá>>>ÁÁÁ»ví̉××ϰ¾B¡íêêzÿ₫ư•+Wf¶Énß¾Ư©S§3gά_¿~÷îƯÛ·o'¢¹sç²>PÏèÑB¼}{¶Ơ÷ïẩ¥©F ÖíGÖ’ĸÇqáÂ…Dd``ÀÇwđàÁÔÔÔI“&ñŸÀ5kÖ±cÇüüüæ̀™£¥•Aê|ûöm"}̉̉̉̉QïÅLLH?̉¢ë§Í1Å7HJªV*•!!!¦¦¦*Ư„¶¶¶D‘áV]»vƠÓÓ[²dÉƠ«Wß¼y3õ¼W¯^ơë×ÏĐĐơ9@v†b5Æ©õâK—·]œ5ö È@R$×–œœüüùóđđp…B‘a…Î;«¿·„„…Ball¬RnddDiûÅärùîƯ»‡ 2dȾĐÅÅåçŸVó¸r¹\¥äÔ©SxAƠ«W¯X7TåßM±̃²…Ắí),,‹Ê+V˜s±ƒCBXØ;†×¤ªuU>®ưµö7kÂ(,ûË ü°Hn sNRûü(;J•JåÎ;W­Z•”””Eµ%‰‰‰ôíJ±̉¥KQLLL†[ÅÆÆ._¾<>>¾V­ZuêÔ‰ 8zôhÓ¦MÛ·o¯Îqƒ‚‚˜^KÈ€µµ5ë&€ª|¿)eÊd{ñĂçΕ"böûDÜ×8—æ₫ẒWVmÁ‹ᦰ•₫¯ơô=DÅ„„Ç?ÿüsÙ²eƯ§±±±L&KHHP)‹‹£oưé͘1ăÖ­[³fÍ:t(ẈæÍ›₫ưûO<ù¯¿₫ªZµ*€d}û±%Ê~œú×_…8'ÿ&ƠÖÖÖ¶´´´ÊHö©££cdd”¾g166–ˆø÷¬Å̃¿₫üùjƠª ươcii9f̀˜äää#G°¾N¥;„8»Ï ụ̈‹Ÿ<ɬÉâ¬q-BÖ’%¡Çđđp"̉ÖÖvwwwtt,Uª”Fvknn+~¯%,,Œ[•¾~TTU©RE¥œëhüđáëë™KIâ,¿EDâ¹\˜5Yœ5.¥¥³i6³¦dGB=\f&—Ë»u릩¬‘ˆ Å%Ñ«’J¥̉ßßßÄÄÄÎÎ.}ư*Uªhkk+•i¦Ûåo¨V­ëë™6Lˆ³§>]ˆÏcÓ^qÖèNîÈ@â$”8ÚÛÛÑgMϽۯ_?--­ 6Ä}û ­··wdddŸ>}t¿}ˆ,>>>,,Œ{mM__¿U«VáááëׯOMMå*oÚ´©D‰ û% [»w qYTܸQˆ›6eÓXqÖ¸’VΠlÚ 6 U=Úßß?44t×®]®®®Ú­¥¥åôéÓƯƯƯ»wï̃²eËđđđÀÀÀZµj Íôæïï?ỵd›'NÑâÅ‹ûöí»iÓ&__ß5kFEEƯºu+55uîܹßÿ=ëë™ø̣EˆË–ͺî¸qB|ơ*ƒÆ³Æ94g*MeĐ€bœ8;V¼hffºdÉ’ưû÷W®\9Ăïnw¨gذaeË–=zô¨¯¯¯………‹‹Ë¤I“¸y2dffæëëëååpá“֭[=ºN:l/dEíqêmÛ„¸n]-g£hÔbZ̀ 9'Sy’¯€åb$éO‘(—Ë¥ßÈâ&,, ³ IæoLÈÆ(Ë?ÙÔ®˜/ÄYc_ê{ˆt ²„ ÂM‘ bûw½„qȽo1YXdQqÿ~!¶±)èf³Æ6ÔFjY#@ÖU3†ơ€"Aíqjgg!~ö¬@Û(ÎkSíót¾@gŒlj'²¾P$uƯú˜Y­U«„¸B…m`I*ÉÇå©üzP ‡Đ U@Ñ¢­ÅÊiÓ„8,¬àUŸê'Që’î[zËäÚä‘äÇĐĐĐ={öDFFÑÇgÍåèèØ«W¯M›6%%%±nH̉üùB,úx©·i³5‚qq&ç{t_ä3H€BGBó8Ñü±xñb…BѤI33³ñăÇß¼y“[ơøñă«W¯îÚµK&~€ˆ-â2«Ơ¸±_¾\@M[H ÷“đ>’XNdGêq|úôé¢E‹ ·xÿ₫}>kä\¿~ƯÇLJu3 °zưZˆ›7/ˆ#¤ƒ h¿ˆ¬ ; %[·nå&•üá‡LLLÎ}ûvlƯºu-ZT²dI"úóÏ?Y7$æâE!:4³Z}û ñêƠÑ®ôà'ú‰_DÖE€„Ç'OQ½zơ¶mÛfffvñÛ_“'O₫é§ŸÚ¶mKDÁÁÁ¬› 3s¦»»gVK<\1yr¾7*…Rê’đQgT°ÿä %¯^½"¢ºuëQddäăljÈĐаI“&DdeeED ¬› (Ä™|¢ÚĂCˆü± ¥Kº||ŒÙPO5$”8r~óæ ùûûsĂÖ­[·ÖÖÖ&¢˜˜"255eƯLªJ•2[3c†8ï Oô½œ–w§îl/ €¦Hè­ê+~øđạ́åËÇă ‰èåË—çÏŸ'"sssÖÍ)™7Oˆ3§¾tIˆ3Ï-5Fœ5V¡*3ifv -êq́̃½;}ụ̀eíÚµaaaDT¢D‰V­ZEGG;99q3;¶lÙ’u3@J/â₫ư3¬̉ª•߸‘¿Í©NƠùØ’,è'ÈJûơëÇ=à(.100P(Ü=zzzÎâ¯̀d'99Íb¹rùx,7r ¢ ~ñ5½ÎĂΤHBCƠ:::{÷îơôô üúơk‹-&L˜À¯533Û¸qc¹|ưS — „øÿ˰x̉ï¿₫ÊǶ́ [i+¿ˆÉw H’qï HYRR̉óçÏår¹––„úG³ —˃‚‚̣¾Đ °°0kkkÖ­€44pS4¡ë×ÿ‹##é»ï̉Wj*ÿ₫´ ¦`[²T˜³Fü°HnÛ¿ë%Ôă¸nƯ:.èƯ»wÅụ̀%JÔ¨Qƒuë@zø¬‘(ìqäH!₫ùç|lˆ8k– ˆ‘PâèăăóîƯ;"jÓ¦8qÈF•*{{ ñ’%ùupñkÔ›h“x̃o€"FBƒ¿}úôá‚—/_²n H̃œ9BœÑD<âùó«â¬q M£Y_€|$¡Äqܸq½zơ""//¯÷ïß³nHÛ̉¥BœÑ×`Ä“óœ=›/MhIÂaZ¤µ—ö²¾(ùKBCƠÜ;ÔåË— éĐ¡C5LLLdâ'Û‰ˆhăÆ¬[ @îä@ü¢‚¬[ï$”8ơ $&&̃¾}›u‹@ªÎâáĂÓ¯ïÜYˆ÷ï×üñÓăY4‹_,Ô¯Q¨OBCƠê)ú_F8úù ñO?i₫øµ¨?¦Ç¬/@‘Pă˜1cX7 ‰›7…ØÄDeåq×®?¸ø…˜´¢a¾0(.$”8Nœ8‘u °©Z5}ÙÀB|ü¸†ø F¶¤–Ói:ëKPp$”8½xñ"::ºk×®zzzñññFFF¬̉0{¶g4NªP•ô‘_¼HY_ €%¹ÄÑÇÇgÆ õ¼á›7onhhèàà0tèĐñăǧÉåË…¸o_••; ñÁƒ<́1:Náü"^ˆ€bHZ‰ặåË·oß¾eƯL`jóf!nÜX¼F™?£ÇÓhÚ;zÇ/¡3¬/3J£¢¢ˆÈÚÚ:õ666Dɺ™ QíÛ ±föy—Uü"m€bNB‰£\.'¢ ŸbT*•ׯ_'¢ªÍÙÅÅóçBœîÍ—₫ẫ½5s@;²NÏó°'€¢@B‰c:uˆ(00p„ \aDDÄÅ‹ÇÇ%5kÖdƯL`gÙ2!₫ùgñooÖeđÎL.‰_ˆYH «₫á ÅL™Oå\ddd=²Œ644¼{W(®[7¯‘“œ[SëŸè'Ö§ !’ëq Y³f¿¿rr2W¢««Û¶mÛÉ“'ăÑ`HO<óΟæiWki­øqÆ tơÉH‹´z÷ïßß½{÷³gỊ̈Y#%''Ÿ>}ºK—.>̉ ‡…xp/₫…… ñ÷ßç₫_éëd̀/âÑF€ô$”8̃¸qă×_L—)S† Åüùóo߾ͺ™À‚øƠ¢½½…b7·<Aôøø`}ÂR$¡ÄqÏ=)))DT¹råơë×ß½{÷æÍ›÷îƯÛ¸q#7Hœœ¼Küûö ±­-)ÿ₫{îw_*đqể…º°>a)’Đ3·nƯ""}}ư;wZXXp…zzzíÚµ«W¯^Çăăăõ¼Éº™PỒ¦Ù¯é5¿ˆîF€̀H¨ÇQOOˆj×®Íg¼²eËÖ­[—ˆ´µµY7 Ü;B,M‹Ç¬s$‘—Ór~6dAB‰£…††&%%©¬JII %|« x?à8{6nƯ*ƒư‰•¢R|,Î  = %Ó§O¯T©RTTÔĉÿư÷_¾üưû÷“'O~÷î–––[Ÿ~€Âèđa!®Z•ûHHú²«KÂÄm©íLÉúT$ñ3cÇ/ѹsç.^¼hcccff̀½4SºtémÛ¶5lØm›@ zơâ#Gr³‡]´ë=àÿ¡XŸ€Ô1NÏ=›ayJJÊ“'OT ccc3«EÖơëB§ç¬[Ph`¨$́̉%!?û¿““P¶fMwÙZóñúÀú   }9†ˆ®_¿¾aÆgÏÅÆÆfVçñăǬ› eåJ!>ûÿéÓBÙ¤I9ÛŸøÑÆ4ĂŒ̀XŸ!@a"¡Äñúơë®®®J%̃m€o₫úKˆ+V$¢„¡ÀÄ$g;›KsÅ‹îäÎúô  UÿöÛoÈ k ±øƯêl%Q̉ZÂ/b₫€\PcPPôíÛ·K—.ܧ« øzưZˆû÷ç₫ô¨PÖ©SvV’J̣±øåPŸ„Gƒ˜˜ssó_ưUKKB]¡ÀÆÚµB+€BLBCƠơëן9sæ’%K–,ỴÛo¿•+WN&“¥¯vâÄ Ö-€‚Ơ°!]¾,´m«î¦¥¨O  ßÑw¬O “PâǿÙ3OOO.Íb*G(ú6oâI“(WăÔËiy"%̣‹ëhë³(Ü$4TíååơñăGÖ­i?àèâBD/_ ææjíc6Íæc̀¿wêq¼yó&4mÚÔÉÉ ÓñkOŸ—bñTY$æRûUÈœ„Gmmm"222Úºu«„,QÚdqḮ7r%W>®BUœÉ™ơiªnذ!YXX k(î₫ùGˆ'M"¢¤¤lA»i7¿Fa¬Ï ˆPâ8a“gÏùûûk|ç‡êׯŸƯ?üđóÏ?GGGg»ÉƒÆçààиqc—kâ‰@ _‰pœ4é·ß„¥iӲߺUâăk„Ÿ\‘Pß̃Ê•+Ë—/=bĈڵk›››g8ÏÆsºç5kÖxyy4nÜ8<<ÜÇÇ'88x×®]úúú™mrîܹ &¤¦¦Ö©SÇÆÆæ̣åË®®®mƠŸrM<ë–±ñ„ Â’‡G6›₫@?đ±#9Ú“=ë“(:$”8>}>|øđáĆ6((ÈÛÛÛÜÜüđáĂåÊ•#¢%K–́ÚµkåÊ•óæÍËp“˜˜˜™3gêèèlƯº•@¿ÿ₫Àç͛צM|Ø@².Đ…+t…_}úT½zơvíÚeñL$hŒ8qư„fồ³À•\ßÓ{~q3m&Đ4 %bAAA/^¼ˆîÚµ«^||¼‘‘Q.ö“ P(ŒUʹ½eø¡¤¤¤ÏŸ?W«VmÁ‚ûöíăË+V¬¸víÚÚµk«s\¹\®RrêÔ)–´Ø{ơêë&€ª̀nµ(vpH o›^»öCXX\f{Ûm-̀¿)xr ?,„›Âœ““ë&H…äGŸ 6¼yó†[l̃¼¹¡¡¡ƒƒĂĐ¡CÇ/˺Ï!ÄÄD"200P)/]º4ÅÄĤßäóçÏḌáĂww÷6mÚ|ụ̀åđáĂ7nœ8qâ‰'Ôéw b}!A•µµũw•ÍMỉäÂ…Rü̉„ e‰ÊfXQü‘˜Ô÷:p%7…­ô­§ï!*&¤ơṛ̀åË₫ùg>kä%$$lܸqáÂ…9Ư¡±±±L&KHHP)‹‹£oư*øO._¾¼gÏÆÆÆåË—7n\¯^½^½zụäIÖ  HÍ·•2~2›˜dºÅ2Z&^uttŒŒŒ̉÷,ÆÆÆÿµ˜¾¾¾ƒƒƒ¸¼]»vDô4í÷s@ĂD8=ơoßé?“đ̃µ’”¬O (“Pâèåå¥T*µ´´æÍ›wëÖ-¾ÜÈÈhưúơ\GàÎ;sº[ssó¨¨(.Sä………q«2ܤ\¹rººº*ĂâÜuJJ ëëP¤…„đ¡ø›Ô=zd\]Îhl€ˆh:Mçă2Tf`Ưj€"NB‰cTTe₫ü¯ EFæxFß~ưúiiimذ{®‘ˆ¼½½###ûô飫«Ë•ÄÇLJ……ñ¯­ơêƠ‹ˆæÎË¿vưàÁƒ­[·µoßơu(ºDŸbù7{†EƠJZÉDZKÏ$ôVµ\.¿sçN†O1*•ÊëׯQƠªUsº[KKËéÓ§»»»wï̃½eË–áááµjƠ>|8_Çßß̣äÉ666'Nœ ¢5jL™2eơêƠNNN5JHH¸qă†L&[²dÉwßaJa€|#zÀñàĂ|Ü©SuŃԇèë¦ JëÔ©sçÎÀÀÀ &üøă\aDDÄ‹/8À%5kÖ̀Ň V¶lÙ£GúúúZXX¸¸¸L4‰›‘'3#G433Ûµkו+WLLLÇÏơz@~ù6Ưi 3T¨AE7răăÊT¹/ơeƯt€bA¦TJå%ÄÈÈÈ=zd1mhhx́Ø1KKKÖ-͆\.Ç—DÖ­[·T©R¬¯hÚÆDtŸệ üt¥®|a jÑælÏ QŒÇÚµk×®]{àÀDsÿ₫}>Œ‰‰!¢OŸ>]¸páÂ… D¤­­mccśØ1Ö 4jĂ"O¿ñ?ÿLDô‚^œ¤“|á%ºÄº¡ÅT†ª‰ÈÈȨeË–-[¶äĂĂĂïƯ»w÷îƯ{÷î=}ú4%%E¡P<}ú”u3@Óˆè" “}÷éC”vúƯbƯJđ[ƠeÊ”)]ºté̉¥K•*¥««Ëº9ÂD9¢Q/êÅ—4£f ¨AÎ÷ &¡ÇÔÔÔàààÛ·oß½{÷Î;áááéëà]€¢æÏ?‰è´•/ز…^Óë£t”/¹BWX·ˆ˜'±±±\xçÎû÷ïÇÇÇ«TĐÓÓ«S§Ư7&&&l ¶q#'¾ A’Q~óïHăÄÑ̃̃^©Tª–/_̃ÎήAƒvvv5jÔĐÑ‘P·(hعs/©¿T§ưH?̣‹¨¦ûÆ9Ÿ5r€sƯ2™Œˆââânܸ¡²I³fÍØ¶4˶đñÊ]ï;̉!~ñƯÈÍ H¥3ŸüĐ¡CY× bƯXĐ7o(í÷©;Ö7çc̀¿ 5̉}«¾ ̃%¿dtb ×¥º-¨ëö@Réq€âhăF7Úÿ_lÓå~Í=ºÇºq qâxâÄ ÖW؉ơ£NÿÅMùâstuË ŒGÖW˜yOå₫‹¶ ă «SuÑ́< xÆØ(uö́ó~ë}¡¡Ûụ̀'ô„uÓ cxÆØ0ܵë÷̃t¢>_x’N²nd =ÀFBÀ"¢cù’ÊT¹3ufƯ.ÈG`ă¿y¿ÇlâK^Đ Ö€¬ q̃½;J=I)ă ÓaÖm€làG` fơVZù‘_,GåúPÖ€l0N‰HWWWGGG¡P¼|ù’ˆ¬­­Y_È_ÿ[[‡¾vçßÑ;Ö-€́1ªñ¼yưúơ÷́ÙCDï̃½srrrrrb}M ßùˆ²ÆƯ´›us@-Œ{¿~ưJDgΜ©R¥ÊçÏŸ¹Â«W¯f±I³fÍØ¶̣hṾ<̉ư¶đ¹ŒKÖ-µ0N¿ûî»÷ïßß¼yóæÍ›|á!C²Ø$((ˆm› Üuóñ©©ÛÉ›uƒ@=Œ‡ª[·nÍú @’‘đ&5đ 뀺÷8Μ9SGGç̣åË‘‘‘J¥’{W¦T©R¬/ ä‹¥´TXHÖ-ÿ{7̣ÖcƯ(PăıL™2 ,àâ7õ888Ñ;wX_Èsh°P"i u%:ÁºQ . Í㨧§×®];Ö­€ü’fzâ:"ểW?×{€‚'¡ÄÑÔÔtăÆübjjjTT”©©©¶¶6ë¦@^­¡5i–×O0£H7u» $”8râăă½¼¼.\¸₫ơëW]]Ư*Uª´jƠj̀˜1¥K—fƯ:È¥)4EX)‰h ¹Q룬Û9 ­ÄñÆ“&MŒŒäK’““ƒƒƒƒƒƒÿúë¯uëÖ5lØu Ç´Ä8̀ZÎư¿cƯ.ÈÆÓñˆÅÅÅMŸ>]œ5}øđaÚ´iñññ¬› 93€(I),»Ï$"cú”baÁºi3J½½½ß¾}KD&&&S¦LùóÏ?/_¾|äÈ‘iӦћ7o~ÿưwÖÍ€œÙGû„ÙäVú_́ A¬›9#¡¡êû÷¾₫®]»lmm¹B33³5k¶iÓ¦_¿~‰‰‰˜© pÑ'Ñ{ÓÚđaoúó…ëCSÖÍ€‘Pă³gψÈ̃̃Ïy666Í›7'|o PÙJ[¿ĐaÙá<÷ÿ2ô™ˆ”˜ê °‘PâÈQ(–§¦¦¦æ(DÜÈGŒsÜ"*€BDB‰£\.'¢7ń̃½ûË—/\ÖÍ€́í¤qÇ/₫J¿.₫ëS"ÑØ±¬Û9&¡ÄqøđáÇụ̀e\\ܦM›6mÚ¤R¡bÅ#FŒ`ƯLÈ̃ÂÇJR#¬ÚJÿ#"rt¤°0ÖÍ€œ‘ĐPµ¾¾₫êƠ«­¬¬2\kii¹zơj}}|Ù@êLIx[z&Í$"OOa­³xv(T$ÔăHDuêÔñơơƯºuë… ÂÂÂ>₫\¦LkkëÖ­[»¹¹ééé±n dăú#¢ùÅå´\¼¶%YZ²n&䆴G"̉ÓÓ;v́رc‰(..ß§(\̉@>æ>3a‚°ö¿÷©ñ€#@á$¡¡êô5.å¨O¥©\đÛoB…A´›‰#@a%éÄ ‘}´ï}àW̉J• 2₫‹ƠFF¬ ¹Ä4c àcå·Qü>ơ.reƯFÈ$ â7©§Ót>¿OíB{ˆˆºwgƯXÈ%$W»i·øMê´"}ÿæư&<àPˆ!q€¼rAóƒÔDä&ú$ơ~JđX·rIrÓñp‚‚‚^¼xƯµkW==½øøx#>>6lxóæ ·Ø¼ysCCC‡¡C‡?^&“±n ¶ÓöÏô™_\FËø85U¨fD1ÿEåÊ©¹g i%Ë—/ß¾}{ụ́„„„7~üøqÁ‚¬Û‚a4ŒÅƒÔD4t¨o§o ăÆ±n2ä„q|ôèÑ;¸X[[›/ç{÷íÛwăÆ ÖÍ€ÿè“đíø¹4Weí®]BÜ‹üáÍ€ÂLB‰£———R©Ổ̉7õ­[·ør##£ơë×sª̃¹s'ëf‘7y¡/üâ¯ô«xía •Í N¦¦Ùî$KB‰ă“'Oˆ¨sçÎ...úúúâU;vlƯº5=}ú”u3€ˆh$äc•AjÊlœ 9 %QQQDdmmáZ"ŒŒdƯL  ¯©-¥¥é+́ß/Ä]èäQ¯^¬y"¡ÄQ.—Q†O1*•ÊëׯQƠªUY7 ¸s'wñâl­R!6Vˆ­Êˆ&MbƯvÈ %uêÔ!¢ÀÀÀ &p…/^7n—8Ö¬Y“u3;ñdé©Ieœ:i °Đªë¶@Hh:‘#GúúúFFF>}úôéÓ\á°aÂd†††cÆŒÉƯÎ:tđàÁR¥JµnƯzúôé&&&jnûæÍ›nƯºµmÛÖĂĂƒơE`Líêêzÿ₫ư•+Wª³ù;¸Qr?ƯGÿkJ}—qMñ¸tăÆdq@x̉xÁăo‹á¦Hî‹ᦰ•₫¯ơô=DÅ„„qộ̣R*•ZZZóæÍ»uë_ndd´~ưz==="Ú¹sgöill,“ÉTʹéu¸~ÇôÜƯƯ_½zµbÅ }Œ¯Añv‹n¦Óüâ5º–E墩¾÷îM;cFY#:JŸưßóøĂD_›0443fLNwkii9}útww÷îƯ»·lÙ2<<<00°V­ZÇçëøûûO<ÙÆÆæ„ø«Å•ø#1óh^¶ơÅ/­ADDII¬O4OBÏ8™™­ZµJe¦n¡¡¡»»»¥¥e.öVs₫ÎÀB¼w/ëÓ€ü'¡¡j(xâùw6Óæm{đ ÷èADDB‘øóƠP$H¨Ç1Ÿ€¼p!>¶"«4BưmõâjƠ¾E½„ }đf @Ñ#¡Äqâĉ¬›PŒÜ¥»{I`~E¯r´ùèÑBüóÏߢ[·„̉ÆYŸ"h†ª);¾"B!9Ư\Üă8t(ë“€!¡Çuâ‰=2W®\9¹\^»ví%J°n2@a¥Gz||¸|ụ̀‡>}ú´sçαcÇæơÀʼn “rŸ¥³¹ØĂŒB¼|9ëó€$¡ÄqĐ A ¢~ưúÍ;WOï¿g° ÅêƠ«·lỤ̀àÁƒ9sæÈạ̊„„„Ñ£G qP_uªÎÇNääH¹Ø‰‡‡Ïœù-ÏàØ³'ë€|!¡¡êµk×FDD”+WnÑ¢E|ÖHDÚÚÚÓ¦M«X±bBB† ˆ¨T©R3f̀ ¢×¯_³n5@¡±…¶Q¿èG~¹ØÉÇBll,Z±t©ÏÍú\ _H(q¼zơ*YYYii©¶J&“YZZѽ{÷¸’2eÊQtt4ëVĂi8çúÑFáj¢?ÿ­đ̣b{{Öç ùBB‰c||<=|øđñăÇ*«BCCïß¿ODJåÛ:uˆÊ–-˺Ơ…ƒøÓ‚[hK®÷ăï/Ä¬Ï –„qlܸñÙ³g“““]]]]\\Z´hQ®\¹èèèk×®mß¾=11‘ˆêׯOD .üă?ˆ¨bŬ[ P4&á#. ¨Áÿè¹ÛÏ©SBÜ¡ƒhEh¨‹§ê€¢EB‰ăŒ3nƯºưùógOOOOOƠ¹åttt\]]‰èÎ;\I/ñ‡q #ÛhÛM>ór‹nåzWâ¸#GD+0ƒ#@ñ ¡¡êÊ•+{zz–+W.õººº ,h,úúmÆ ;wî̀ºƠR'î_̀ă¬_¾q©R¢[Dcßvvjï  ơ8‘ƯÙ³g÷íÛçççS²dÉ *ØÛÛ1‚{?†ˆêÔ©ăèè8|øp|u kâGÿ ?̣²«… …x̃<Ö',H+q$¢’%K2dÈ!Dg`` “ÉTêüú믬› PÔ¤|Ü’Z:“s^ö¶`/Z$Zñ́™;çé q’K9AAA/^¼ˆîÚµ«^||¼‘‘ëF&¿ÑoOè ¿x‘.æeo_…O[“®nÚu˜Á Ø\âèăă³aÆ7õp‹Í›7744tpp:tèøñăÓ÷>@z)”2&đ‹yÿ u¦Ó7ÑÎB\§ëS€|$­Äqụ̀åÛ·oO_°qăÆ?.–@&tIèuÈ_J½¼¼”J¥––Ö¼yónƯ¦322Z¿~=÷ơêâA1HgM¤H~1w¤V!öêƠ«´ë0ƒ#@q"¡ÄñÉ“'DÔ¹sg}}}ñª;¶nƯˆ>}ʺ™̉u“n®£uüb̃mL/ÍôD´w¯W¯Îú@₫’PâEDÖÖÖ®µ±±!¢ÈÈÈí XZ0œÂ5²Ï₫ư…ØÛ›ơSJår9eø£R©¼~ư:U­Z•u3$J<×÷ZR‰*id·ñđái×Ư»'ÄÆ±¾ï$”8Ö©S‡ˆ'L˜ÀFDD\¼xqܸq\âX³fͼ ¨jH ù¸Ơø™4ó¸á‰BܪUºƠ˜Á ˜‘)• *w"##{ôè‘Å`´¡¡á±cÇøJ–\. bƯ H#,,,³§ €5´f Má5øh£xâÔ/_¨dÉ̀WçüO’¢}S /Ü ÂM‘ bûw½„zÍ̀̀V­ZejjáZCCCwwwég,œÂó)kT¡5@ñ#­ À›6mzæ̀™ßÿử¥Kaaa •+Wñ¼ùÈ‘# Y7@rªP>ÎăwUôë'Ä[¶¤[ưÇB®D•N̉I îü˜è;…Ơ¸(êƯlØ0»ư@Q ¡ÇÄÄÄ[·nƯ¿ÿÇ\_£™™YƯºu4h```Àºụ̉ ưr‡îđ‹µ‘×³§ÿưw–UË—g}1 €H"qLJJÚ·oŸ——×ÇÓ¯Ơ××ïÙ³çĉMT¿’ PLƯ ¿̉¯üb₫½ĂÑIÿçÄ¢EB́îÎúz@a?T}÷îƯöíÛ/]º4쑈÷íÛ×¹sç»wï²n,€$Ø“=k¼¯‘ˆz÷âíÛ3ª1¾»º²¾P@'?~>|ø¿ÿ₫Ë—èêêZZZÖ¬YÓ̉̉RWWW\sĈÑÑÑl Àœø…˜´QS_ˆ;rDˆ‡ a} Œ‡ªwï̃ËÅíÛ·wuumܸ±L4«đ­[·vîÜyúôi"‰‰Ùµk×ĉÙ¶€!=̉ăc'rCc4~ˆ?ÿbGÇŒj\¹"Äèn(N÷8̣Ÿ́ӧφ ́ííÅY#5lØpưúơ?₫ø£J}€b¨ơûJ_ùE?̣Ë£ôé#ÄgÎdTcæL!ÆÅ ăÄñåË—\0~üø,ªñ½Œáᜠ PXGë“0³b>½“˜˜f1í¿ă¾ÿû ¯T'ŒÇÏŸ?‘©©©……EỜ̀̀Ê–-KDqqql ÀÄ-º5‰&ñ‹ù÷uăÆB|2Ûy!ñ P€b†qâ¨P(ˆH__?Û¥J•âë7¨¿ ùw G„¸sçŒj,X ħ(fØOÇY¿F½‡öT¦Êùt ñwù%“J  ±‹ ëkJ€ưúơêƠ«Y×ITyö  xg£iô@˜ÇÚ¶MˆÅù!G‰cddäLNY*ËÇu¨Î&Ú”Çúưw!îØ1“Jâ×bđ3 Pü`¨@¢Q³HäïÓư|=܈B|êT&•0@ñ†Ä@VĐ@ äóûkÔ÷EI©‘QæơÄS—+Çêâ+Œ‡ªOœ8Áú HÎq:>“„¾½üÎ)í,<7n¨±A… ,. 0Æ8q´±±a}¤%„BºSw~1‰’ à I¢ƒdúC)~ÑăÔņª¤Å†„ÄíƯÓ%Ưü>b«VB¼{wæơ~ưUˆ `rq€-$"|g?í¯Ku à —. 1ff€, q qÖ8ŸæÿD?ÀAg̀âqă2¯çï/ÄÆüÅ)@â â¬ñ'úi-(˜ăzxño¿e^oÖ,!ÆÅGöÄYc]ª»Ÿö̀q₫Yˆ5ʲj 07™™äÅé@âÀXUªÊǺ¤{îØ¡—-â¬fá‰b“‚¼8 )HX²'û0 ă f̣ÎùóBlh˜eƠ¡C…xß¾k!H Gf:Sç$tôÀDßbmÛ ñ‹YV=tHˆ3ư5}HØp%W?̣ă 8k?²¨«›åøsLŒW¬X©AâÀÀd¼›„¹¶ 8k$¢fÍ„8,,˪âqêíÛ ¸ )H ÚZ²–Ọ̈‹Ÿ5̃¿ŸfÑÊ*ËÚG±£c7$…ñ·ª›94g)-å >k$¢zơ„øÙ³,«FE ±µuÁ7$¥¸$‡:xđ`HHH©R¥Z·n=}út“,gILL}ÚƠƠơ₫ưû+W®̀l“ƒ̃½{·aÆ₫₫₫Û·o?r䈱±ñÆŸ5|SÄG"277 ‰544ä ¹Ç»̀ÍÍ3Ü$55uêÔ©ÿưw»víæÏŸŸE~  BF2ñ¢²Æ­[…¸\9ª\YmÎâŒ^ €â©èOÇăèè¨P(.]ºÄ—(•J;;» 7Ù½{÷ßÿ=`À€7"kơI0k$"77!Oé©çÏ…¸~}ÖÍ )ú‰c¿~ư´´´6lØÀ=×HD̃̃̃‘‘‘}úôÑƠƠåJâăăø×Ö”Jå={Ê”)3sæLÖm‡ÂDYăaIêĐA½mZ·bŒS€HѪ¶´´œ>}º»»{÷îƯ[¶lX«V­áÇóuüưư'Olccsâĉ>¼|ùR__àÀé÷Ö«W/Öç̉Gqe¨ ¿hLÆÑͺQÿùí7!>}Z½mÄ38¢ÇD~âHDÆ +[¶́Ñ£G}}}-,,\\\&MÄÍÈ“×˜øđáĂôkñb5¨¸@È_Ô%]édâ®ĂéÓƠÛfß>!îÔ‰ơ€´È”JI ¨%r¹ó8JMXXX~̀‚¦̣a˜Ôóa}®™hđ\ƯôÜl“KùtS p_$7E‚íßơEÿG€|̉Ÿú‹³ÆÅ´XRY£x–̉½{ƠÛ&5•u«@̉ÅP5€Æ}O߇R(¿xNu¤¬%xú”bc…ÅÔÛ̀ÑQˆÿü“ơI€ä qÈ1•¨#)̣;úu£̉¨QCˆ3zX7.q¯^¬O$CƠ9EQé§Ư‘ZÖ¸aƒP­Zêmæå%Ä?ưÄú$@8¨kí0#3q‰D&kT1~¼›½T £G ñ₫ư¬O¤‰#€ZúRß¡4”_”“\Yc•*B¬î.ô8d¬5 ¤@q‰4jä|₫LÇ ‹ê~–3k–õ̀úT@ºĐăÉÄYc{j/嬑ˆ …8gY£ø¡Hñ×f̉AâÆi:­2<}₫M³nWVæÏârå¨C‡œlŒ×b@mª´¥¶ç鼸DâœE‹„8gïÄÑóçBܰ!ëSICâđ•ÆTó=bƯ΅éê qæßá´j%Ä9˜ơ) Uy¨d«iu¡ÈW¬ ”a1ǹߥKiö%ô8BqgH†Ÿé³¸$˜‚«Q5ÖíRË̀™B¬̀é ú/¿qçάO ô8Bñu•®ÊH&ι –¬Q&ê$ơñÉùö¿₫*Ä'O²>(8B1ơ}ל‹KöЧô”u»ÔơĂBܤ ơîĂíç̀â®]YŸ ª†bç6ƯnHª¯·§yÇÑ•+Âb``Îw±t©?Îú„ p@#/ͨ™JÖ8F®¬‘̉~]PürŒºÄŸéуơÙ@¡G(.®̉U•±i"ºH[RKÖMËñ£K—’¶vÎw!₫8ơÑ£¬O $P,t³ê¦2½Ngê|’ ß!Æ ±±1Íó]ˆḉÉñ£‘P¬a¨¸­´UF²G%̉daV³Æ»wiûva1::W{Y¹Rˆsó26_èq„¢LeZo"êE½₫¤?Y·+—́́„øQî¦'Ÿ:Uˆûơc}BPȠǦéÇôYăkz]x³Fñ£ơëS͹ÚËêƠB|đ ës€B‰#5g茌d‡è¸đÇÏ?*IiI–¬[—K%J±ƒƯ¹“«½L$Äưû³>'(|0T EG%•¤’éË•¤ ‹ £2¬Û—[:Pr²°xî\nw´nïÛÇú´ đA#M©iú¬ñ ,ts4ªX¶ŒÎœsüAj^ß¾B<`ëÓ€B ‰#zÓhŒd×踰uP’²î÷?é矅ÅÜgññi^ ̃»—ơ™@¡„¡j(ÄV̉Êé4=}y4E“1ëÖi@³fBüúuvTº´ûù±>-(¬Đă…̉%º$#Yú¬ñ8W’²hdâר÷î%Ë\¿Ø3o—+GNN¬Ï +$PÈQŒd­¨•Jù ¡$eWêʺ!ÎƯỤ̈öPââÅBüîë3€B CƠPh|¤ßÑwéË›SóËt™uë4Iœ5Đï¿ça_ººB¼f ë3€Â =P¼§÷Z¤•>k4!“TJ-ÂYc·n—‡}ưñ¥¤‹âyr‰#H70mNæégƠyGï>̉ÇôŸ‡)ÔÄYc—.ô×_yÛƯÀBœûW²₫ƒÄ$ê]“‘¬:UO¿ê!=T’²•cƯF g:щyÛ]ƯºBW(Đăô…¾üD?ÉHfK¶™e×è’”Å*k¼|™d²4Yc£FË]]ÓLá“§[d‰#hÆp.#™>餃VXH •¤T’̉́Y7¶@uîœfÎ":r„nÜĐĐ̃W¬ Ư»…E¼F ù CƠ{±;–Æî¡=YÔq"§#tDôX7–7È>]’¬ÉÔnêTZ½ZXô÷Ïư®Ô€GȱÇôØd$3"£̀²Æ*Tå"]T’̉ügÖX¾¼jÖ8~¼F³ÆÓdqqԪ듀"= ®]´kÍzKo³¨cJ¦»hW꺱,M™BkÖ¨₫û/™›kîíÚÑ?ÿ‹¡€Ä²̣/ư;“fî¢]YW+E¥Ñ¢©4•u{Ëplº~}ºsG£‡©S‡>‘5@AAâXE«Ñ¢Xͺ-Ùn¤í¨ëö²÷æ Yeô}Ä—/©bEI<_#!k€…gá?{h-ÙÊH&#Ù4–EÖhLÆO艒”A„¬ñÍ̉̉Ê ktw'¥R£YăɓȀ-ô8kä¹’V†R¨:•̉Â_èÖM–·o©BJMU-×üØ4ưđ]¹’¦Y#8$ÅËz³‰6yG%©S¿ •ñ#¿èÖ —–₫¡I¡È`Ơ±cÔ½»Föơ+é¥}-]G‡’“Y_(0T]ô ­©57mEVKhIÖYc5ª¶‹vq“uÇR,²F±E‹H&£ví2ȯ^%¥RÓYăüùªYă/¿ kVĐăXưEm§íGé¨ú›X’eCjøưźí•@­[ÓÍ›¯½r…5Óô!oߦ† U ¿|¡’%Y_ (¾8z ”°Ÿöï£}gél6¬Gơ¦̉ÔA4ˆơHÚ4sf¦kó%eLH ƠÂfÍTŸq(pH Ÿ蟵´ö]û@rº­ ¹Œ¡1ÍHăÉNQ³e éÚÉߟ¬­óáÀƠ«SPjáñăÔµ+ëK€ÄQÚR)Ơü–Ѳgô,i"5¦ÆNä´ˆ±>•ÂaỆ̣¢ÄÄL+ŒM›6åϱ{ö¤cÇT MLèăGÖWà?H%ä*]Ksă)₫]ËơNRÓ¡4t( Ơ%]Ö'T8|üH3g̉–-ÙTóơ¥Ṇáđׯ“ƒ%$d°*44z5r ‰#ïèƯEº¸˜'Q̉Sz—]é’®39÷§₫(?’¢́—_h÷nzñ"›jóçÓ‚ùÓ‚3ÈĂ#ăU~~ääÄđâd‰c>z@)0ưÉÿ9=×È>»Q·^Ô«ơ2&cÖçWÈ$&̉êƠ´zµZc¿&ĐºuùÓăÇ©woJIÉxí54i³k%$÷,虌dyßYu¦Î¨“9 M̀hÇ:uˆÔó3‡/Ο¦¬YCS¦dS)#HGI°$ËvÔΑÉѬ̣¾Ăâéùs:vŒ-¢˜˜lƠ¤ -_NmÚäCƒî̃%ggzåÓƠªÑùóT¡B^)€\AâX  È µjI-[Q+|‘%/RRèÜ9Z¹’̃¼¡Gr¼yơê4eJVîä̃₫ư´nf_sÖ,Z¶,ÿ/€Æ q̀Ô¡C‡<RªT©Ö­[OŸ>ƯÄÄDÍmPƒ¦Ô”ûeC6¬O¥‹‰¡ë×ÿûuú4}ưû]9:̉”)Ô¹³FÛA‡ÑáĂtơªº›ŒA¿ưF%JäÛ5È/H3¶fÍ///ƒÆ‡‡‡ûøøïÚµK__?Ûmmå¶·‚n±>ƒBăüy‰¡èáCzđ€<ÑØÛ·§Áƒià@"¢°°0ë|¸\¹rD´dÉ’]»v­\¹r̃¼y¬['u‘‘ôö-½}K¾¾ddD/_̉Ë—N/_Rrr>·Aêуzô zơrµ½RIÏŸÓưûố=x@÷îåf\Åøñ4q"}ÿ}>6@B☃¦¦¦N4‰Ë‰hÖ¬YÇóóó›3g––ëj@|<ÅÇS\œđß«W©R%¥ØXúü™bcéí[JJ¢èhúô‰¢£)::O#ÅT·.98PÛ¶äà@eʈV¤¤PL ]~JººE‘‘ÿư72²̉Ñ£T¥ ½yC¯_Sjj~µؘ̀–,¡1cX_!€|Ä17nÜĐ̉̉j#zÏV[[»U«VÇ¿}ûv£F²̃<2ø‚E©˜T¥L¡Ôú¦ơ%EG[K©Pj)ReJMLÖSä•§íézºfO×íéº!Å ëîƯ'ÊÉ<‹ÚDôhmM}ûR¿~Ô¸1ë«P8ªR*•!!!¦¦¦¦¦¦âr[[["ˆˆÈ6qü¨´ Œ>vœ¢`}n’Q̃ÛP0÷ËÂj̉ă:ô@‹̣­#0,-©Z5ễZ·¦́î>@†ÄQUBB‚B¡066V)722"¢ê|u¤ØĐ§D3,K©rg̣µ ·ô¶<ưËoE¯Y·1)VVÉ•+§T®̀ÿWñƯw²e3Ư ,Œu“‹W¯^±nd÷E‚pS˜sÂg`¿Aâ¨*11‘ˆ TÊK—.MD19Z:ßèP‚´ )¶%•¤¯%(©%éR²})I_ơè ܦméœ>%̣¿JQÂ-jØ₫.MqÏư×€âSIË^ËHÉúä̉ÑÖ&==̉Ó£OŸèûïÉÀà¿_¥J‘½{GvvdhHFFÿư’ɨbEúî;23£ooÁgöVµ~˜Êë«î?p_$7…­   •¹\κQlà/MUÆÆÆ2™,!!A¥<..¾ơ;fÍÖV₫w˜¦q7.ûÆQŒ Gäs  ¨) /k–‘‘QúÅØØX"âß³(n8fÀÜÜ<**ËyaaaÜ*Ö­`‰c Å¥K—ø¥RéïïobbbggǺul q̀@¿~ư´´´6lØÀ=×HD̃̃̃‘‘‘}úôÑƠƠeƯ:6đrL,--§OŸîîî̃½{÷–-[†‡‡&oÿÔ"IDATÖªUkøđᬛÀ ÇŒ 6¬lÙ²Gơơơµ°°pqq™4i7#@ñ„Ä1SƯºuëÖ­ëVHqµ 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„bÁÉɉu@n4á¾Hn HGP GP GP GP GP‹L©T²nCQ#—ËY7̣WPPë&0€ÄÔ‚¡jP GP GP GP GP GP GP GP GP GP GP GP GP GP GP G9tèP¿~ứ́́~øá‡Ÿ₫9::u‹—ÄÄÄ;vtíÚµ~ưú-[¶üßÿ₫wụ̀åôƠp›XyóæMÆ §OŸ~nJÁ{đàÁ¸qă7ńââríÚµôup_ RRR̉ï¿ÿ̃»wo;;»¶mÛNœ81888}5Ü”*—ËïƯ»—áZunAѾMÚ ,`Ư†¢`Í5+V¬ˆ‹‹kܸqbbâƠ«W¯_¿̃­[7]]]ÖM+RRR\]]>¬P(́íí ¯_¿~äÈ---{{{¾n+J¥ŕرaaar¹¼C‡âU¸)ïܹsnnn¡¡¡U«V­R¥Êơë×}||jƠªemmÍ×Á})H …ÂƠƠƠÇÇGWW·qăÆººº/^G$"¥RùéÓ'--->•ÄMÉoK–,Ù´iÓ¦M›7oaunAq¸MHóJ©T†„„˜ËmmmI”µ@¾Ú¼ysú&>zôˆˆ*V¬H¸ḾüöÛoO|hbbR¾|ù›7o₫₫ûïÇOLLä+ྼ®]»êéé-Y²äêƠ«‰‰‰õ¼™7õ«W¯úơëÇưàঀ-Z8:::::Ÿ+å©s Ém̉aƯ€B/!!A¡P«”QÚAB₫©Y³¦JI`` ··wÉ’%¹Ü&&î̃½ûûï¿»¸¸4õœËăÅpS ^RR̉çÏŸ«U«¶`Á‚}ûöñå+V\»vmíÚµ ÷…¹\¾{÷î!C† 2„/tqqùù矹7…9unA1¹Mèq̀+î_ê*å¥K—&¢˜˜Ö ,v Å®]»ÜÜÜ–/_nffF¸M,$&&Θ1£bÅS§Nͬ᦬ϟ?QHHˆ¯¯¯»»ûµk×üưưÇÿúơë‰'rw÷¥àÅÆÆ._¾<>>¾V­Zưû÷oß¾½¾¾₫Ñ£GÏ;ÇUÀMaN[PLnzóÊØØX&“%$$¨”ÇÅÅÑ·g@¹víÚÂ… Ÿ?naa±téR₫Qܦ‚çîî₫êƠ«}ûöño,©ÀM)xzzz\°|ụ̀¶mÛrñ¸qẵ¼yăăăṣäɾ}ûâ¾¼3fܺukÖ¬YC‡åJ̃¼yÓ¿ÿÉ“'ÿơ×_U«VÅMaN[PLnzóJGGÇÈÈ(ư¿$bcc‰ˆ¯ ̣[RR̉’%KüæÍ›ñăÇûùù‰pÆm*`ׯ_ß·oßÈ‘#ù÷-̉ĂM)xzzzúúúậvíÚÑÓ§O ÷¥À½ÿ₫üùóƠªUă³F"²´´3fLrṛ‘#G7EÔ¹Åä6!qÔssó¨¨(îw/,,Œ[źuÅBjjêÔ©SwíÚåèèø÷ß7.}/nSAâ>z±iÓ&ù7½{÷&¢¿₫úK.—wíÚ•«†›RđÊ•+§««+“ÉÄ…ÜÏKJJ ·ˆûR¢¢¢ˆ¨J•**åU«V%¢>p‹¸)̀©s ĂmB⨠…ẩ¥K|‰R©ô÷÷711±³³cƯºba÷îƯÿư÷€6nܘٿêp› RåÊ•»¤Ơ¢E "²´´́̉¥K«V­¸j¸)ÏÁÁ!66öÙ³gâBn¢~®MÜ—‚T¥Jmmíàà`¥R). "¢jƠªq‹¸)̀©s Åmb=yQđúơëêƠ«;99}₫ü™+ṇ̣̃²µµ]±bë¦ ©©©íÚµkذabbbƠp›Øzøđaú/Ç়ÇÛÚÚöë×/**+¹ÿ¾]ăÆ###¹Ü—6räH[[Ûµk×̣ïyö́YÓ¦Mk×®•ঘ9sædøåunAq¸M2eÚâ@îlÛ¶ÍƯƯƯÊʪeË–ááá5kÖܶm[ú×̣Aẵ¿ß²eK}}ưï¿ÿ>ưÚ^½z¹¸¸p1nC=êƯ»w÷îƯ=<<Äå¸)oóæÍ«W¯622jÔ¨QBBÂ7d2™‡‡G§Nø:¸/)22²oß¾oß¾­R¥JÍ5£¢¢nƯº•:wîỤ̈ƠpS ÆÜ¹s:tđàÁôh«s üm̉^°`ë6vvvUªTy÷î]@@€N§NÜƯƯÓÏx ù!((ÈÇÇ'%%å}FªW¯Î¿%ƒÛÄЇ8 —Ë;tè .ÇM)x5²´´ }øđáׯ_›6mºzơê&MˆëྤR¥JưøăDôï¿ÿ̃½{799¹Q£F+V¬à^ZâᦌsçÎ=~ü¸_¿~åË—WY¥Î-(̣· = ¼jAâjAâjAâjAâjAâjAâjAâjAâjAâjAâjAâ9–””´oß¾aƵlÙ²N::t1bĶmÛ¾|ù¢₫Nöïß/—ËåryŸ>} ¬åÁÁẠ́o®^½ÊàÚeäüùóÿüóÏ?ÿüóñăÇ̀êøøøpÍ®Y³flllú \…+V¨èuëÖq[;–ơe€B‰#ä̀£Gœœœ,Xpụ̀å÷ïß'%%…‡‡ûûû»»»wèĐáÂ… ¬XøL™2è˜1cÆŒ ʬN»ví´µµ‰H¡P\¾|YeíóçÏß¼yĂÅ:ub}BPd!q€ sqqyưú5_Âe3œwï̃M4ééÓ§ếÊÀÀÀÊÊÊÊʪ\¹r¬O«022jÖ¬ûûû«¬½xñ"XYYƠ©S‡uc ÈBâ9àîîÀÅ}úô9v́؃–,Yb``@D‰‰‰“&MRgWƯºu;wîܹsç<==ó̃°W¯^%%%1¹&vh¾+ñâÅ‹J¥R¼ể¥K*ụGPו+WΟ?ÏÅ#FŒXºtiơêƠµµµË–-Û·oßƠ«Ws«ÂÂÂ^¼xÁÅâGè źuëZµjµnƯ:ÊäÇ”””}ûö9;;·hÑ¢~ưú]»v>}ºJ¦xŸ‘‘‘Ó¦Mk̉¤‰££cóæÍ½½½sq^âÆÆÆ._¾¼OŸ>vvv=zôđ̣̣JIIÉÅ¡3{vpÊ”)â'W­Z%—Ëù\|È!r¹<111Ăṿ£ƠQQQ>äËoܸÁÅ;wæËSSSO<9hĐ ‡:uê888 4èÈ‘#â3ÊújdÑr^ddä’%Kú÷ïogg×®]»ñăÇ?zô(¿Ó@²tX7 }ûöq‘‘ÑèÑ£UÖ¶iÓ¦uëÖïß¿'¢   *Uª¨T˜3gΑ#G²ØRR̉Àï߿ϗ?~ü—_~0`€Jư¸¸8ggç—/_r‹Ÿ?^µjƠ‹/–.]»Œíß¿ÿóçϹŧOŸ>}úôÉ“'\¦›¯‡V‡±±qÓ¦M¹ưưưù!éÀÀ@®Ë³bŵjƠâëO™2ÅÏÏ_|óæÍ›7o®_¿~₫üùơë×k¤IS§NŒŒä"""Μ93dÈY³fåߥVĐăêº}û6tèĐ¡T©Ré+x{{=zôèÑ£;vTYơđáì³F"̣ôôä²F===GGÇAƒƠ«Wˆ”JåâÅ‹CCCUê¾|ụ̀»ï¾kܸ1ß~Ü6§®_¿₫üùsKKËzơê•,Y’+}:000w—H,..ṇäÉ\ÖØ´iÓñăÇwíÚUKKK©Tnß¾ƯÇÇ'A#¨%%%…ïXªX±bN7ÿ÷ß«U«6jÔ¨J•*™fX‡ÏfFÅ÷h6̣́åË …âÊ•+U«VUÙÄÁÁaưúơ%J”xÿ₫½««kXXmÚ´©eË–¹;Íy󿹏¸QhhhÏ=¿~ưJDŒúî»ï(“ù¡C‡Îœ9“‹{÷îÍ#?|ø°iÓ¦¹»D¼ßÿ›?¨cÇ|¦Ư¯¿₫JD6l(ȉ– ` ÇÔÇǹxZ__ûöíƯºu«W¯^fy'—¥ѱcÇ|||¸ZM&&&öööD¤T*¹ÔđÅ‹DT¹rå5ḳ5;wî¼råÊ•+Wºººr%qqqüD›111yo Ÿ›₫øă|aŸ>}¸1ß¼y“ǺBPH¡ÇÔ½4ÍÉbềÔ¨Q#Ût³E‹\XXXØÏ?ÿ,“ÉjÖ¬ÙªU«¶mÛÖ­[7}}[[[ ñæ\ T*#""ªU«–ÓFªôöñ;̀ïC«ÏÉɉ›ºüÂ… ={öäǩůÅđM½té̉Ç?~üàÁƒøøx ¶„ëd%¢ÿưïVxñâ…\.Ï¿K= ]]].NßÇùüùó§OŸ>}ú”₫½`~Û,L˜0aàÀ\7)•ÊGyzzöë×oàÀé³U333ñ¢¾¾~™2e¸˜UÏ~È8ĂÅ|=´úÚ·oÏuéq#øüœ*ñ$''/_¾¼iÓ¦S¦LÙ¶m[`` B¡à†¶5"..<3ÑÑÑùz) à!quÙÙÙqÁùóç3œ̉ÅÉÉ©I“&M4áß¿æe‘„ñttt~ùå—ÀÀÀµk×vëÖÍĐĐ_uóæÍô_̉‹/~ụ̀…O·²²Ê×KÁđĐß}÷7†{ơêUn"*Uª¨ôíyzznß¾]¡PT¬XqÁ‚ươ×íÛ·4ƠŒ̉¥KóĐÛ¶m;“‘®]»æë¥€‚‡ÄÔÅ?ÊöæÍ›ưû÷«¬=₫<ßÙÆ=‡—#III‘‘‘‘‘‘III:uZ¹re``àöíÛùAj~ªB^pp07ûçÊ•+ܘ²®®®¥¥e¾^ ơ­̣]i•Œ3wøÎÅ•+WrTªŒSÑüÁóçÏwvv–ËåÚÚÚÿ₫û¯úGɶå•+Wæ…BQIÄÈÈÈĐĐĐĐĐ0‹×Ă Bâêrpph̃¼9/^¼xăÆ>| ¢äääcÇñ¯îVªT©F9ƯùóçÏø†›Q[[»yóæ}ûöå*ˆ; 9ÉÉÉ¿₫úkrr2}øđÁĂĂƒ+oÛ¶­øCˆù!ÛCóO@̃¿ŸŸưï¿ÿ¾~ưzÖ»UçèíÛ·×̉̉"¢'Op%*‰c||ÍÍøắ́<~üøü¾ Pđ8@Î4hĐàï¿ÿ₫ùçŸííí¿ûî»%Jü¿ûwU Ă8~®¸œ¥†¢M¨A #ú1œ“&inkuriqs¨9"œ ‚†₫±†;.Ư /r¹ÜßÏ*œ£Nçơq0ø¾Ÿ$Éơzơ<¯ñÊ“Éäv»­×ëñxÜëơLÓlµZÓét»ƯǺm]k·ÛEQDQÔï÷»Ưn†‡Ăa¹\~ĂKleÙf³qGkíºnÇeY~Ø.O’d>Ÿw:­µmÛ’"Q†ÏiµzéS×k:£”2 c8®V«ªª‚ x^½\.ơú•üÎ}ß?ŸÏ‹Åb4i­-ËÍf§Ó)MSÉSøũ^ÿO?Yçûư^)Án·û'[7đx<î÷»údÊ đ#üM¦i|-FƠ!8@„àÊ1áÄ"Gˆ Bp€Á"ï6ăĂá€uIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/smf_101.png000066400000000000000000001120741463010412100215650ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯwXÇđ÷( ‚E°a„±‘(*V́½k4bר ¶˜¨±D±kÍÆÊO EE±wEE1*X¢Àq¿?6î.Gñ€»›åø~1ú‰#•­­íàÁƒ[µj¥̉>õ¼óçÏ‹[’’’6l¸yóæ-ZŒ5ê₫ưû:uºråJ®ƯfeeơèÑcÊ”)Ÿ}öÙ¤I“*T¨đÍ7ߌ7î“]¹»»<¸zơê¬OŒ¾Aâ  …B¡Pèf_éééYYY¬XUhhè+ŒŒŒÄ«W¯‰‰ عsçºuëNŸ>-“Éf̀˜‘kÛ¶m;zôè/¿ụ̈¿ÿưoÙ²e§OŸ0`À¦M›¢££ ÚhGMrttôöö̃°aƒ••U©R¥êÖ­;gΜôôt~ƒ5kÖÔ«WÏ̀̀¬\¹r7̃¹s§Êw/^¼X¿~ưúơ뫳ưÔ©SgÍeaaabb̉¸qă£Gfff~ûí·...·oßæ6NKK[²d‰‹‹K™2eªU«6zôèÿưW{çáùóçC† =ztåÊ•Åí»wï¶³³:t(W­Q£F¿~ưÂÂÂ={–³“_ưµzơê£Fâ[ö́Ù£T*œœ Úh„QÑ»`àÍJIa€ƒC^Ÿ́Û·ïéÓ§]ºt©_¿~DD„ϹsçN<)“É.\¸hÑ¢6mÚôë×ïÇđ̣̣²°°è̃½;÷Ư¸¸¸;ZZZ¶o߈>¹ư; çÎkdd´zơê~ưú}₫ùç™™™cÇöóóûꫯ®^½JD£G̃µkW»víúöí{óæÍ-[¶Ü¼y3ÿû M©T:ÔÚÚzíÚµ®®®|{RR̉½{÷ $“ÉøÆ6mÚüöÛo*ÏÖ|øđáâÅ‹_~ùeffæÅ‹õ¼éèèèááaffVĐ®@S8@ñäíM[¶° @©̀ë“§OŸ₫øăß~û-W={ö+ö́Ù3pàÀíÛ·;;;‡„„p¸³g϶±±9v́Ÿ.Z´h̃¼yDôÉí“““¯]»V«V-"222={vJJJdd¤±±1]¿~=<<üƯ»w{ö́6lØæÍ›¹/=úĐ¡CÏ=³³³Óø¹Y±bEXXXDDD™2eÄíÏŸ?W*•¶¶¶âÆ+ÑË—/U:yö́YzzºL&k̃¼ydd$×XµjƠ?₫ø£Y³fê 4‰#€†ÙØØˆï´[°`ŸŸß̃½{xáÂ₫¶¿ÄÄD"JMMå7¶³³ă³F"úäöîîî\ÖHDD4hĐ .k$¢¶mÛ†‡‡§¦¦ZXXÈd²3gÎkTg{¾̀å‹9[ˆÈÔÔtíÚµ3f̀ptttuuơđđèÔ©S×®]ÅqrRRRzơê•ס)ógå$%% 4¨}ûöS¦LÉù)Û»wïT¾BDåÊ•SÙ¸lÙ²DôÙgŸí̃½›‹³k×®+V¬2dÈ₫ưû»té¢~W )H x?Ÿ>.Ë"}FFF)))>|èÓ§OPPP£F:tèĐ£G¦M›~₫ùçâ-­¬¬ø²:Û«oâĉ}ûö=räȉ'‚‚‚äryXX˜Êl¯¥¥å'³Ă|ụ̈Ë/<èƠ«×̣å˹–·oß* ŸªU«öïßßÀÀ@e*9!!ˆrÜ3ÊÖ¬Y3qvÛ¬Y3"ºsçΈ#Ôï 4‰#O5jP¬ƒÈƯíÛ·322øÑ¾´´´;wî´nƯ:<<<((híÚµS§Nå7VA+èöùHLLŒ‰‰qvv=zôèÑ£³²²|}}'Óïï¿`Áñ–Eœªæ_½zµ¸ñơë×sæ̀iƯºơ Aƒj×®}úôiñ§§N’Édâgh8fff5jÔˆ7r™båÊ•ŒŒÔï 4ËñhØË—/׬YĂW—,Y’””Ô»wï'O‘‹‹ ÿÑ₫ưûSRṚá+èöùˆj̉¤ÉªU«¸ªAëÖ­I4—Íă¦ªọ́ÉÍ;W™]ơêƠ›4i¢T*Oœ8ADcÆŒyøđá‘#G¸í_¼x±ÿ₫öíÛ;::ǽmذaÇ?uêWÍÊÊZ¶l™AÛ¶m ÚhF4̀ÎÎn₫üùgÏ­_¿₫¹sçBCC›6m:tèĐ'O˜™™3fđàÁçÎ;~üx… ÂĂĂƒƒƒ;wî¬̉§§g¶ÏGÆ ëÔ©³lÙ²Ô©S'***88¸\¹rƒ RÙ²ˆSƠŸ4|øđM›6 ¥J• 6lØÙ³g/^|̣äÉöíÛŸ9sF÷ƒsaaa_~ùå₫ưûW¬XQ³fͰ°°¼^*mcc6bĈ .¬[·®T©R;wîôññ)DW 2­₫VQ2Éạ̊¨¨(ÖQ@6±±±˜¹\i’àu)v?T4hpàÀÖè›››••7-)ƒ ‹‹Ë³Bü+v,5# ÜăEơâÅ‹={ö8884õœu,DD/^¼ÿ₫£GX¢o8hRçΫW¯Î: ]»}ûöÀ{ơê%‘Äñ÷ß÷÷÷'¢Ê•+³E¯ qĐ$___Ö!èÚ•+WX‡ ÊÏÏÏÏÏuz÷8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8€Z8@‘¸¹¹Éd2™LÖ»woÖ±ügüøñ\HUªTa‹^AâEåââ²cÇiÓ¦qƠëׯùå—•*U277oذá5k233¹222ŒŒŒdÙU¨P!gŸ÷ïß—åÁÓÓ3ÿ®FŒ±cÇ&M°>1úƈuṔÙÚÚ<˜+?xđ uëÖ …¢wï̃U«Vưûï¿§OŸ~êÔ©Qll¬B¡đđđ¨Q£ÿussóœ}››{yy©4¦¥¥:::æß•»»»»»û‘#G}Ú¥K—úơëGDDøøøœ;wîäÉ“2™láÂ…‹-jÓ¦M¿~ư>|øpàÀ/// ‹îƯ»sß‹‹ëر£¥¥eûöí‰è“ÛïØ±ĂĐĐpîܹFFF«W¯îׯß矙™9v́Øèèh??¿¯¾úêêƠ«D4zôè]»vµk×®oß¾7õܲeËÍ›7#""4{́™™™'Nlذ¡¸ñÑ£GDTºti"‰‰)]ºtÙ²e÷íÛ÷êƠ+WWWww÷R¥J}²ç÷ïß>|È!:uâZ Ư4ÍÙÙ™u êÁƒ¬CU¸(̉$Áë’×ƠáĂ•D,ÿËKơêƠ‰èÇä[fÍED»víR*•5jÔpvvÎÈÈà>zóæ‘‘Ñ„ Äß]´h‘B¡àZ>¹}©R¥îܹĂU—/_NDơë×OOOçZ7oNDIIIÉÉɆ††Ă‡ç£5j”M|||ѯQƒ Z·n×§‰‰‰îî†÷îƯS*•;w655µ¶¶æS—‹/~r/Ë–-355‹‹ă[>ÙƠÀ+W®\è?cư~ÀT5€†ÙØØ̀˜1ƒ¯.X°ÀÜÜ|ï̃½DtáÂ…Ë—/ư7ă—˜˜HD©©©üÆvvvóæÍăïVüäöîîîµjƠâÊܳƃ 266æZ¸›ÿRSS d2Ù™3g¸Á?"úí·ß^¾|igg§|ff桼ôTœ|ØÉÉéï¿ÿnÓ¦ ×~̣äI“råÊqƠ‘#G¾ÿ~âĉû÷ï5jT^½ùøø¼ÿ~æ̀™âÆÂuEÄ¥¶m©LÖA¨ÍÈÈ(%%åÇ}úô jÔ¨Q‡zôèÑ´iÓÏ?ÿ\¼¥••_Vg{ơMœ8±oß¾G9qâDPPP@@€\. ³µµofii©~v˜—]»v;ÖÜÜü—_~9r$?bJDööö*wèĐˆnƯº•Woï߿ߴiSŸ>}ø±Đ]A!q€bÉË‹r¬ñ'·oßÎÈÈàGû̉̉̉îܹӺuëđđđ   µk×N:•ßXeQ¬ Ûç#111&&ÆÙÙyôèÑ£GÎÊỆơơ|xÈ! đ÷÷·°°ôèÑ£#G´iÓÆÅÅ…oLJJ"¢jƠªåƠá̃½{_½z¥2ˆX¸® ˆ8hØË—/׬Y3{öl®ºdÉ’¤¤¤̃½{s‹Q‹ưû÷§¤¤ä5ÂWĐíóƠ¬Y³¹sç.Y²„ˆ Z·nM¢¹l^§ª•JǻÙ³«T©²}ûöœkXΜ9³Q£Fÿüó·ë¬¬¬+VqO‘çê?₫°´´äîà,bWPDH4̀ÎÎn₫üùgÏ­_¿₫¹sçBCC›6m:tèĐ'O˜™™3fđàÁçÎ;~üx… ÂĂĂƒƒƒ;wî¬̉§§g¶ÏGÆ ëÔ©³lÙ²Ô©S'***88¸\¹rƒ RÙ²ˆSƠwîܹ{÷®‹‹ËèÑ£U>êÓ§O÷îƯ-ZôÍ7ß899uîÜÙÊÊ*$$äÊ•+?₫øcíÚµsí0---,,¬mÛ¶*Ë›W¬X± ]AÑá©j kܸqhhè›7oÖ­[7sæ̀'NT­Z5((¨råÊ?ÿüó5kLMM¯_¿₫ÓO?%%%­[·.g?Ư>¥J• 6lØÙ³g/^|̣äÉöíÛŸ9s†{wŸq‹rß¹sgKׯ_'¢Ù³gïß¿ßÖÖvÇ¿ưö›µµuppđ·ß~›W‡aaaïß¿oÙ²eÎ Ú¬è7À‚ ¹\Å: È&66Vă?¡ˆpQ¤I‚×¥ØưPuttlĐ ÷^æÂÍÍÍÊÊêĉ¬Q5hĐ đđ𸸸ü7+ÄŸ±b÷ÇRS0âjÁ=PT/^¼Ø³gƒƒ÷®æ.^¼xÿ₫}~µsĐ$Ô¹sgîÍ%ÊíÛ·Ø«W/‰$¿ÿ₫»¿¿?‰ß4E‡Ä@“|}}Y‡ kW®\a‚*??????ÖQè!Üăø <Ëå×®]ccH?aûöí¬CLUç.))é̃½{‡̃½{7ëX$‰cîºwï₫ï¿ÿ²@B8æné̉¥>| ¢;vœ={–u8Úwđ MZưåK’ɲµø@¥K«nœJeʨƠ¨PÊ ‹ÓÓ©T©tˆ§bAûd©fDDY”•ă.¾2©”ă§ä̉$¹ăWà:ø´t)Í›Ç×d¹n“Z¤Æœ235Ü!@•I-ü§% G­Ëå*-ÇcT‰öäÉÖ!€*\¶læ̀)»w/ë( ˜Aâ¨%óư•'µ×ïá¢0´r%!k€‚Ăr<%̀ر4kV.í“&‘Bûà)•̉ú@û úç̉Yî̀:d60âP’´iCâ[·iưz7uXP<`ĠĨ\9[Ö˜NééÈ¡èÜÜÜd2™L&ëƯ»7ëX₫3~üx.¤*Uª°E¯ q(d2zúT¨*•dl̀:&Đ...;v́˜6mJ{Ë–--Z¤̉øöíÛqăÆU­ZƠÜܼeË–ùô|çÎ>}úT©RÅÁÁ¡ÿ₫*käåƠƠˆ#v́ØÑ¤IÖ'Fß q(T–fă i¶¶¶ƒnƠª•¸ñÊ•+gΜQÙ2))©aÆ›7onѢŨQ£î߿ߩS§+Wr_ñôéÓnnngÏíׯߠAƒ"""Ú·oüøñOvåîî>xđàêƠ«³>1ú‰#€¾CÖȈB¡P(ºÙWzzzVVë#₫Offæ_ưµpáÂ;æŒjơêƠ111;wî\·nƯéÓ§e2ÙŒ3rö£T*GeiiyíÚµ5kÖ¬\¹̣Æ•*Uơñé.ơ»MAâ ×́́„² ²Fpttôöö̃°aƒ••U©R¥êÖ­;gΜôôt~ƒ5kÖÔ«WÏ̀̀¬\¹r7̃¹s§Êw/^¼X¿~ưúơ뫳ưÔ©SgÍeaaabb̉¸qă£Gfff~ûí·...·oßæ6NKK[²d‰‹‹K™2eªU«6zôh-½\711±cÇ‹-zụ̀eÎOwï̃mgg7tèP®Z£F~ưú………={öLeËØØØèèèQ£FÙÚÚr-VVṼ̃̃—/_¾~ưzºMAâø K–,‰âÿö'ÿû‰3ƒÜ₫mØ·oßäÉ“[¶lùÍ7ßT¨PÁÇǧ}ûöJ¥’ˆ.\8}úô *|óÍ7ăÇ÷î——×áÇùïÆÅÅúØñƯ»wÜưyŸÜ~Ç[·n;wî¢E‹}úă?~ûí·\uö́Ù+V¬Ø³gÏÀ·oßî́́bddÄ}dccśرîƯ»s.Z´h̃¼yDôÉí“““¯]»V«V-"222={vJJJdd¤±±1]¿~=<<üƯ»w{ö́6lØæÍ›¹/=úĐ¡CÏ=³KkÙóçÏ•J%?‚ÈáRĂœĂ“ÜA={Vǜ ÷*àgϨ+Đ$zªF ¡:vŒbc…ªŸë€JWW×R¥JñU333¹\~ÿ₫}"²¶¶>{ölhhèƯ»w£££oƯº•™™)₫®\.ç³Fu¶·±±áË\¾˜³…ˆLMM×®];cÆ GGGWWWN:uíÚU''%%%Ÿ)leÑn“åb{÷î¸1))‰ˆÊ•+—s{??¿7õ̀™3gΜ9ÜÙ˜?₫Â… ­¬¬ ÚhG}Ô¹³PNIaV˜’©Y½Ư022JIIùđáCŸ>}‚‚‚5jÔ¡C‡=z4mÚôóÏ?oieeÅ—ƠÙ^}'ŃÛ·ï‘#GNœ8 —ËĂÂÂTf{---‹˜æĂÖÖÖÀÀ@e*9!!ˆrn_¡B…ĐĐĐˆˆˆk×®ÙÚÚ6õüÔ©SDTµjƠ‚vÄ@ïÔ©#”‡ £2eX¤¾äëK¾¬£ÈƯíÛ·322øÑ¾´´´;wî´nƯ:<<<((híÚµS§Nå7VA+èöùHLLŒ‰‰qvv=zôèÑ£³²²|}}'Óïï¿`Áñ–Zª622ª]»öéӧŧN’Éd®®®9·¿ví……EÓ¦M›6mʵüóÏ?2™̀ĂĂ£ ]F qĐ/aatë–PƯ²…u@%ÑË—/׬Y3{öl®ºdÉ’¤¤¤̃½{?ỵ„ˆ\\\ø-÷ïߟ’’’×_A·ÏGTTT³fÍæÎ»dÉ"200hƯº5‰æ²yZª&¢1cÆL:ơÈ‘#Ưºu#¢/^́ß¿¿}ûö97;v́­[·¢¢¢¸‡©ïܹ³cÇ®]»rƠuÄ@¿´n-”ñl)#vvvóçÏ?{ölưúơÏ;Ú´iÓ¡C‡>ỵÄ̀̀l̀˜1ƒvpp8wîÜñăÇ+T¨ÜY|ƒyzzhû|4lذN:Ë–-{đàA:u¢¢¢‚ƒƒË•+7hĐ •-µ:UMDÇß´iÓàÁƒ'NœheeµeË–ÔÔÔœ¯%ä,^¼¸sçÎ7îƯ»wFFÆ̃½{MMMׯ__ˆ®@#°#€©YS(÷ïO¢‡$@—7núæÍ›uëÖÅÅÅÍœ9óĉU«V ª\¹̣Ï?ÿ¼fÍSSÓëׯÿôÓOIIIëÖ­ËÙOA·ÏG©R¥‚ƒƒ‡ vö́ÙÅ‹Ÿ}nß¾ÍÇ\ ®@#dZư­¢d’ËåQQQ¬£€lbcc1s!5¸(÷æ Y[ ƠBưx—Úu‘ÉÈÙ¹˜ưPuttlĐ ÁX¢;nnnVVVÜ ‹’2hĐ đđpn!ñ|âîûo=Fô…èN8Úµ‹u4Eåăƒ¥'$÷8è ñÛdM‘ŒK¬ƒ€‚xñâÅ={7oÎ:"¢‹/̃¿ÿÑ£G¬Ñ7HôÂ_å­[YGS$•+ÓÓ§¬ƒ(‚Î;W¯^uºvûöíöêƠK"‰ăï¿ÿîïïOD•+Wf‹^Aâ ._ÊC‡²¦đT¦§Ç£ăÇYÇT@¾¾]]R{®\¹Â:U~~~~xa’ q(₫zôÊ?₫È:B'•÷}dd‘Éå¬#€đp @ñwø°P₫ö[ÖÑÆo¿©fJ%ap@bđ— ˜?^(OÄ:Âǿ3zđ@¨º¹e›xéÀˆ#@1çï/”₫™u4Ö­[¶¬q̃{–6eä ‰#@q6¾P₫ßÿXGS0ff”*Tñ"3éCâPlm̃,”ƯƯYGS0*Ëî k(8[#G åóçYGSÍåX’@8O!!BYe%ig2ee}bû¨¨(Ö!Ó(µ‰6©4ö¢^è€öëèèÈú!q(®:uÊwï²F]â¬ÑÑ1ÛóÔ’%#YΖ,úT  °@ñgnÎ:µˆ³Æ6mAÖ8Œ†å̀C(Y#”Xq(†† ÊÛ·³F-â¬qøđlöHĐº̣9}®̉XŸê_¥«¬C` ‰#@1´c‡Pọ̈bͧ‰³ÆAƒ¤5ºË]Ê6ûo@ R° €=LU7ÑÑBÙÙ™u4Ÿ&Î{÷¦?₫`P̃Ñ1ÉT²ÆƯ´Y##ÅM¿~Byÿ~ÖÑ|‚8ḱÜỶ‹”פ÷龸¥ 59GçXÇ !q(n®_Êuë²&?*Oñ(G舌d*Yăz€¬@G€bE<Ä(z”qÖèáAÿüĂ: §ç©"ë¸ Œ8̉^¾ñß©}{¡úæ 뀲ăÜ·x‡’”È #ÅÄŸ å=XG£ÊÎN(‡‡“¥%ë€DÚQ»(Ûj@¡ÚÚ±  øAâP\º$”6d*ñ’₫₫Ô¬ë€Ä±eh”‘,‹²XP\aª 8đ<µ8ktv¦±cYôÑ6Ú¦’5₫D?!k( Œ8 åjƠXG#đôÊeËRTë€>r#·«tUÜ‚w‰#€äM*”Gd`åJ:yR¨&%±è#•Fr¹M·Y 0U y6åßgÍîÜ¡Y³„ªDß ¥P•¬ñúY#€¦`Ä@̣²¤x[^íÚBù¶43/̣ÚI;Å-J’F>  /8H[X˜Pọ̈bÍÄĬXA..¬Ê1=ư9}~‰.¶3Ȧª¤mút¡¼f ëhˆ²g4s&ăxÓs•¬q=­GÖ  H¤ị́e¡lcĂ:Ơ‡sgÏôc%ª$nyKo'ÓdÆaè)LUHØÛ·B¹NÖÑPDm̃,T™?Ó…ºS0_5"£ Ê(Bđ q0‰ÍS7m*”Ÿ-”f…©©P®_Ÿ&L`†JÖø̃™“9«sP’IèÇ€€•¬±lÙ²²¿êfee-^¼øÂ… ¬ĂĐ ñ<5£…xví¢÷ï…êƠ« bˆ¥ØœÂ k`E*‰czzz@@WvttܰaĂƠ«W/^¼xơêU??¿5j‘B¡Ø±cëHtâ’èy*0 á+ÑT0“µ¾·̉ÖTƒ¯Ú …`K*SƠ/^¼x÷î•)SfÛ¶m+VäÚMLLÚ´iS·nƯN:%''_º„w@ đîPvue‚øÖÆŸ~b@jrÎóƠ>Ô'‹Đh€TF+W®leeED®®®|ÖÈ«P¡BƯºu‰ÈÜÓP°§2E(›̉œ9º 95gki-²F)JâHD-Z´ ¢¤§§«|”‘‘qÿ₫}"rwwg&€öư₫»Pnß^Ç;OHȶ‚djª®̃’,ÏĐ¾z‰.M¥©ºr#¡ÄqΜ9U«VMLLœ2eʳgÏøö/^LŸ>ưÅ‹ööö'Nd&€ßQ¦ë½ËH–DI|UIÊÏésÖ§₫#•{‰hÁ‚ööö?>qâÄ©S§œmll£££322ˆÈÁÁá‡~PùÖÆY Q6ååËu¼ó=íùrÛ¶Ô²¥N÷ój>äOB‰ăßÿÍ— Å;wT6ˆŒŒd#€ö‰opœ5K—{>|˜nÜ(ÍWE?•µ.ƒ2JQ)q ²F ’ĐT5ef²ÚsB9ÇƯæZ´ö‰³FrAÖ MqœÀểáç'”¿̉é+ơÄëï̀›GÆÆ:Úo…  |o 2 %S§â¡9(ñÊ:\gơêlƠ÷“k˯ôë×ô5_]BKæ̉\5”„G   ¡\·®Îv;c†PÖÙKb¾§ï !EƯI;¿"²@A1NûöíKD+VôóóăÊŸ¤̣>k5íÛ·oï̃½111eÊ”iƠªƠ¬Y³¬­­óÙ>==}ëÖ­ÁÁÁ±±±ÖÖÖuëÖ4i’““ÛÓ  âIêo¿}ETN;NĂ·̉V¾z›n» ë3ŸÀ8q¼yó&988đemX³f¿¿¿™™Y£F=z½mÛ6SSÓ\·W(Æ »|ù²½½}‹-^¿~ºuëÖF±=c ÏÊ3gêfŸëÖe«óV‰c[j{œ„ƒ}Gï̀ /(ôÿ©ê¨¨¨€€[[ÛcÇ„„„ :ôúơë+W®̀ë+{ö́¹|ùrçÎCCCׯ_¿}ûöÍ›7ѼyóX èµÊß}§›}N›&”u3IíDNâ¬QIJdÅăÇE‹‘™™_Ö¸½{÷feeM›6öœ9s:>~₫üùO<éß¿¿……ëc=,”u2O=y²PÖÁ$µŒdÈ;ÉŸeddÜ¿ÿÑ£G …"× ºté¢~o©©© …ÂÊÊJ¥Ử̉’²)Éạ̊íÛ·>|øđá|£——×wjÿ(—Ëå*-ÇÓáYUỌ7i’PÖö$µ8k¬@^Đ mh„îqܶm_644´··wÈMú422²´´̀9²˜””DDüsÖb/^¼8qâDÍ5ù¬‘ˆ́íí'L˜‘‘qàÀÖç ôÑÁƒBYË78:; eooí–8küŒ>CÖPÜIhÄñÑ£GDdhhèăăÓ¶mÛ2eÊh¤[[[Û˜˜˜¤¤$ñs-±±±ÜG9·OLL$¢êƠ««´s/_¾$ÓƠ —.Qt´PUyEµf‰³F7r»L—µ¸3Đ 8r™™\.ï̃½»¦²F"jÛ¶­B¡8}ú4ߢT*ì­­ƯÜÜrn_½zuCCĂèèheöùî₫†5k²>O "#…²¡¡öö#^‚́áC-8klI-‘5è %îîîDôîƯ;ÍvÛ¿ƒ 6p÷5Q@@@BBBß¾}¹–”””ØØXî±5SSÓ–-[>zôhưúơYYYÜÑÑѾ¾¾¥J•̣ôôd}@¯åqïµF &”›6¥jƠ´µ#qÖØ™:‡Q˜ö tIBSƠăÇ {đàÁ¶mÛ†ª©nííígÍåăăÓ£G-Z~ü8×^¯^½Å‹—.]ˆ₫÷¿ÿ±@s´öºèçÏéêU¡ºb…&;·$Ëkt¯*‰åzÀ KJïܹCDơë×ß´i“Í©Sÿ=—çííưå—_¶iÓ†ˆ¢££Y‡  ~ot¥JB9<\“= I”ÄW‘5”(JŸUDïl-Uª”‹‹ ëè4êí[Íö·l™P®]›4²…8kœOóGÑ(Ưœ, %ÏŸ?'¢Ö­[‹G}æè¨‘nÄëùܺ¥ÅYcO깘ëøÄ€Iḥ·oß¾\áñăÇEë @Ú‚‚„²&nṕß_(¢mȆ/× é ÎÎ H™„ÇI“&ơîƯ›ˆüưư_¼xÁ:­ßà8qbÑûÛ¿_(oÛVỖ<É3‘„{$ïÓ}0 MUsÏPWªT)&&¦C‡...ÖÖÖ2ñÚDD´Qü 88±³5„̣ÚµE maù…'é$_ÅBß &¡Äñï¿ÿæËiii—/_f€Ô=N±±B5û¢ö ư²ÍB±DÖ*$4U P"ˆŸ§îƯ»ˆUª$”OŸ.RWÛiû8ÇW‘5@Nqœ ¡%p$MsK‹g¼‰¨yóÂwơ> ¥¡|ơ=csr@Ú$”8N-â @±àë+”Ûi=í®]…rjj‘‚2!¾¼„–T¢JEè ô–„G±¨¨¨‡¾~ưº[·n&&&)))–––E§O5̉MëÖB¹~ư"=c#^²q⛉s­æ2:5 u’K7lØÏU=<<,,,<==GŒ1ỵäœYW+åÛaaBùêƠÂ÷#ÎÛP›¯gă’%­ÄqÙ²e›7oÎÙºqăÆW¯^-\¸uŒE N÷pƒăÈ‘Bù³Ï Nj—MÉôú'–b ßè; =U}ëÖ­-[¶peCCC¾eܵkWdd$ë0@|ƒc–₫ÿSÈN¼Éû<ç«©T´Û$ Pâèïï¯T* æÏŸé̉%¾Ử̉rưúơ&&&D´uëVÖaÁ̃½BÙÆ¦p}tî,”gÍ*l ´w-­å«X|Ô!¡ÄñÎ;DÔ¥K///Ó́·yẃرU«VDt÷î]Öa0v́˜P^¾¼0=<¤‡_̉—|Y#¨IB‰cbb"9::æú©““%$$° °23…rûö…ë£~}¡¼zu!q$á'íºÀú¼@±!¡ÄQ.—Q®w1*•Ê .Q ñ;YMÜàxưºPöö.LâǨ»S÷FÔˆơy€bCB‰cƯºu‰(""bÊ”)ááá\c\\Ü©S§&MÄ%µk×f&@a‰ßÓ³g!:/à³{waB(M¥ùr[jû'ưÉú¤@q"¡åxÆ”Â5­9aaa×@1vï^Q¾ự%½|)T¿ü²À=t£né”ÎWÿ¦¿YŸ(f$4âhcc³jƠªråÊåú©………½½=ë0¬L™B|I<Ü(^RMëhƯQ:ÊWñ@ ‚„F‰¨I“&¡¡¡¿₫úëéÓ§cccSSSÍ̀̀ªU«æáá1v́X ÖÖÅ‹B¹à78om$¢–- öơÛt{Mă«È p¤•8‘¹¹¹·····7%''›››³@ödŒøaêèèïÜ•\ụ̀ºĂú\@q%¡©j1…Bñøñă[·n=~üX¡P° ÈÄ/{©V­@_]´H(—*E5klÏâǨ×ÓúZT‹ơ¹€âJr#111kÖ¬ ËÈÈàZŒÛ´iăíí×úmáB¡üêUÁ¾kHÂ\»Q·É4™ơÑ@1&­ÇƯ»w÷èÑăï¿ÿæ³F"ÊÈÈ éÚµk`` ë̀Í­@›:$”­­É̀¬ßíK}³(‹¯¦Ă¬7 %‘‘‘?üđƒxbºlÙ²|Y¡P,X°ạ̀åˬĂ(¸ăÇ…̣°aúj¯^BùÅ‹|qíøư¯â(: %;v́È̀̀$¢jƠª­_¿₫êƠ«/^¼víÚÆ¹IꌌŒmÛ¶± à¶nÊIÊvvd¤öíEÉ”<„†đUd ºÇñ̉¥KDdjjºuëV;;;®ÑÄĤ]»vơë×ïØ±cJJÊEñzÅ…ø—^++ơ¿×§P~ú´;,KÂŒM…°>~Đq411!¢:uêđY#¯B… ơêƠ#"CCĂBô Píß/”H&S÷‹âǨÇÓøÔơ¡€PâèææFDºbc£ÎV;w e5Ÿ¥iKmùr%ª´‚V°>TĐOŒÇ©S§²>Ú-”‡Uç^^Bù₫ưOo¿™6'áÍ4Ïèëc½…©jm*à;cÄĂNNŸî>̉G̉H¾b@«$ôæ"ºpᆠîƯ»—”÷-A·oßf&€ÚÄT׫÷ÉÍÅĂ÷î}ºû̉T/ÿI²>ZĐsJ/\¸0tèP¥¿.€‰‹SÛcÇ„²½ư§·7&c¾ü%}Ùº³>ZĐsª₫ù矑5€̃26₫ä&; eñ½‘¹jBM2)“¯î¦Ư eqŒâ ưúơëÚµ+÷êj€b́Å ¡ü©##…ré̉T¦L~Ÿ¢Sçé<_Å­ JÍ̀̀̃¾}kkkûĂ?Hh( ÄOÆ|ê‘jww¡üÉáÆVÔ/? ¬J ågơë×'"sssd 'ĉc‹ùlø {îW¥J~½×ú^JKÉ‘ơq@I!¡møđáFFF÷ïßß¶mnv}pë–Ö^HW®ä·e;jÇ—«Sơïè;Ö %ˆ„¦ª4hđÍ7ß,]ºté̉¥?ÿüsÅe2YÎÍ9Â:RMzû–Ä¿,7hç–{hÏ?ô_%ơ^G !JïƯ»çççÇ•“’’’ ₫vW ùđA(÷ïŸÏ†âáÆ¿ÿίË4/ăĐ= MUûûû¿zơu¢ö;c„rÛ¶yn&¾µq3mf}xPIhÄñâÅ‹\¡I“&:uÂr<P¼‰Ç®]óÚªV-¡¼gO¹’+_nJM‡ÓpÖ‡%‘„GCCC"²´´üư÷ߌ$@aœ=«ÎVW°%"0 ÷mVÓêÛ$¼mơ,©Ơ3€ÆIhªú‹/¾ ";;;dPB4k&”}}sßFA4ƒ¯âÖF`HB‰ă”)S¬­­ïƯ»¦ñÎ÷íÛ׿77·fÍ}÷Ưw¯_¿₫äWnܸ1ỉ$OOÏFyyy?^ưäĐ¡C^Ÿˆ%ÇÏ}#ÑÔĐzZÏú` D“ĐØ̃Ê•++Uªôúơ믿₫ºN:¶¶¶¹.dzqăÆ‚ö¼fÍ33³F=zô(000::zÛ¶m¦¦¦y}åøñăS¦LÉÊʪ[·®““Ó™3g†êççצMÖç ñíy<3PxB:ÏgbÄ·6¶¦Ö“i2ë€M&¥¶år¹:›E‰oRoû^½zU¨Paÿ₫ư+V$¢¥K—nÛ¶ÍËËk₫üù¹~åíÛ·íÚµËÈÈøư÷ß¹ ôëׯ<ØÂÂâôéÓŸ|±\./h m±±±x»†´èùEé̉…‚ƒÿ+çñcVü«q®›üJ¿~M_ Ûèd’ZϯKñ„‹"A%ößz MUkÉ̃½{³²²¦M›ÆeD4gÎKKËààବ¬\¿˜””4nÜ8.k$¢zơêuîÜ9!!áÆ¬>k̀Ă‚ByđàÜ·Ñ}Ö? MUO˜0AƯFFF´nƯo144lÙ²åáÇ/_¾Ü°aĂœ_9uê”L&ëƠ«—¸qụ̀åË—/g}’@O,^,”ẃÈeñªÛi;ëxˆ$•8N:Uă}*•ʘ˜˜råÊ•+WNÜî́́LDqqq¹&7õ´¶¶®T©̉Å‹¯\¹̣æÍ›Zµjµk×.Ÿ{"r׸qζ?₫ʹư¢&ÔDØ€z‘ëĂ ’Tâ(ơđáĂׯ_wëÖÍÄÄ$%%Å̉̉²ư¤¦¦* +++•v®·\_T“₫îƯ»5k.\¸p×®]|{•*UÖ®][§Nuö›ó~ÍcDZ<¡%̃“'OX‡ªôø¢˜†…UúXŃÖ-)Vởƒ ÷«íƯ«̣ùaóĂç+Ë8́Ư«ËwRëñu)¾pQ˜ëÔ©ë¤Br‰c``à† âăă¹ª‡‡‡………§§çˆ#&OœësÖùHKK#"333•vsss"zûömί¼{÷ˆbbb^¾|éăăÓºuë÷ïßïß¿ăÆS§N=räˆ:ă%ó†Y‰Ă­å¤·è¾X~úộeʈ?¼tI(—-›ËI˜JÂô‹’”¤ó“¤·×¥8ĂEa+ç?ëj>Ñ«¤•8.[¶lóæ\^ÀºqăÆW¯^-\¸°@ZYYÉd²ÔÔT•öäädú8Ơá²eËøÅw&MxôèÑ~ưú±>O mÿü#”³g”}núúuƠ¯omô#?ÖG„ª¾uëÖ–-[¸2÷úA?ʸk×®ÈÈÈơidddii™sd1))‰ˆøç¬Å̀̀̀LLLLMM===ÅííÚµ#¢»wï²>OPŒ%'g«V¯­Ú—ụ́e;²GăXÇ „G¥Ri``0₫üK¢¹KKËơë×s[·n-h·¶¶¶‰‰‰\¦Èăn)²µµÍơ++V466V™çf¨333YŸ'(>rüvZ¯PV¹ó9’"ÿGÿă«ñÏ:zUJïܹCD]ºtṇ̣̃R¹°cÇ­Zµ¢B øµmÛV¡Pœ>}oQ*•aaaÖÖÖnnn¹~ÅÓÓ3))é̃½{âÆË—/Q­ZµXŸ'¶„¡Ü¿¿Ê‡âç`:v̀ö‘;¹óåGôˆơaäBB‰cbb"å}ÿ¯““%ˆ"«§ÿ₫6lH₫8EĐ·o_ccc®%%%%66–l­wï̃D4õ<₫±ë7nü₫ûï–––íÛ·g}@ÚöíÊÙÇÎ…̣ºuÙ¾T†„[!ÇÓøªT•ơaäBBÇÈạ̊+W®äz£R©¼páƠ¨Q£ ƯÚÛÛÏ5ËÇǧG-Z´xôèQDD„««ëÑcaaã̃̃NNNG!"—éÓ§¯^½ºS§N 6LMMŒŒ”ÉdK—.-_¾<ëó̉&N[µ"›2E(/¦Åi”ÆW}É—ơ1äNB‰cƯºu¯\¹1eÊ”pqqq>ܳg—8Ö®]»=9²B…  ²³³ọ̣́6m·"O^Ækcc³mÛ¶³gÏZ[[·mÛṿäÉܨ'@~NœÈµYœ)ß“•Né Hxÿ ^-R&S*¥̣C*!!¡gÏùLF[XX:tÈ̃̃u¤ŸPb_|.e±±±XMjôö¢ˆŸ«ư€Í£9Ûú;̉ŸƯ©;Ûđơöºg¸(Tbÿ­—Đ=666«V­Ry7 ÏÂÂÂÇÇGúY#ÀD3$Û¶ ÍÖÖBÙœ„©̣`5äOBSƠDÔ¤I“ĐĐĐ_ươôéÓ±±±©©©fffƠªUóđđ;v¬……ẹ̈%^ùAôd̀°aB3ÿ®Ó£t4…Røö3t†uôŸ ­Ä‘ˆ̀Íͽ½½½½½‰(999ÿ;¤%·Gª££…¶̉¥…r7êÆ—Å$€dIhª:'dP̀́Ư+”]]¹ÿ7j$´ñëF‰~oŸM³ÅËñHăÇ7õô+VVVlcÈÓÍ›9ÛÄ/=­[—ˆh)-U‚oô!Öq¨…qâØ¸qă‚~¥d>ÄÅ”xÑï_~ù¯0æñXIOUW-[rÿ/úươ×DÙ×ßùƒ₫`(@ qĐđp¡Ü¿?-^,4 ND4€đ-5©æ Ä:h€ÊSƠ2™́³Ï>kĐ A½zơÊ–-Ë:€‚?3`-̃C›7Óº³„Ç®£)Zư¾¤@*‰£R©Œ‰‰‰‰‰ùßÿ₫W³fÍÏ?ÿ¼AƒnnnƠ«Wg€zÄkñT¬*Ôär"¢Ú$, ~‹n± À'×>zøđ!eeeƯ»wï̃½{»wï&"++« pId½zơÊ”Á Uÿ₫+®uè ”##I¼àN?ê'N" Ɖc:uêÔ©3xđ`"zûöíơë×ù<̣íÛ·DôæÍ›“'OzôèÚµkW¯^½víÚƯ»w333 Å]ñ뼤©Oñ¢ß!!Ô‘ụ́Ơ,Êb@!I÷©ê²eË›››››—)SÆØØ˜u8ù:p@( ₫%·Oá%X³h–x9€âEB#YYYÑÑÑ—/_¾zơê•+W=z”s<+%z2Æỹ—|¹ëQߣ¢÷P/§å¬(<ƉcRR—&^¹råúơë)))*˜˜˜Ô­[×í#kkk¶äN”8FÇÍG»LäËxI wŒGwww¥Rơ'i¥J•ÜÜÜ>ÿüs777## ‹ä.3“ûÿ^Ñߤf¥WÑ*Ö!ăœŒÏ¹À¹aE;;;™LFDÉÉÉ‘‘‘*_iÚ´)Û˜̣ñ%íù¯´ø{¾Ñ §ÓtÖ¡•TóøÀ÷íûÄ*QQQ¬ƒÈîÍîÿÉ$<Cóà‹™”É:D îSƠÅÆÇßx[ĐéÿZD“Ô;i'ëø4‰#@‘}L¯R"¢_ÇđŸ8ĂWôëø4ƒñTơ‘#GXŸ€" %¢¹´”ˆÈ4FÿÆ̣„°@c'NNN¬Ï€füHߥ ï¤>HY I˜ªĐ€pjNDôÛh¾¥&ỚI=YÇ IH&&†¸Çb̀RhÔï|s4E³ @Ă8 ¿ˆX²°O0³ @ó8;}]é(mÉ78‘S'êÄ:,Í“ÊàÅƠ•+Aæ-iDW¾áƯc€V`Ä H6̉DzW–¯†P눴…ñˆcZZ)Ç‘££#ëÓ ®I›Sø²œä¨눴…ñˆ£‡‡Gƒ v́ØADÏŸ?ïÔ©S§N¸1 eA4| _½KwYG EŒG?|ø@D¡¡¡Ơ«W÷î×xîܹ|¾̉´iS¶1đºÎnmô=₫µa€61NË—/ÿâÅ‹‹/^¼x‘o>|x>_‰b3g *wko3uDÚÅxªºU«V¬Ï@a¼¥·Ûh_]ẩ—uDZÇxÄñ›o¾122:sæLBB‚R©ä•)S¦L‘;Đ.+²*í₫K툖° @»'eË–]¸p!W÷ôô$¢+W®°>-ùBC„ÊíÚÍ₫1¡=X uZÜÄĤ]»v¬£ø„×ôzíê®·N“ơßVø %åʕ۸q#_ÍÊÊJLL,W®œ¡¡!ëĐ娜PiûÉHI° @ë$”8rRRRüưưO<ùèÑ£>W¯^½eË–&L077g”t^ä%TnÖ¡ămP7"¢R¥X‡ ủJ###§M›–À·dddDGGGGGÿùçŸëÖ­ûâ‹/XÇ%×+zµ“v ơº7ˆ¨+e€Hè]ƠÉÉɳfÍgb/_¾œ9sfJJJ{Đ˜̣T^¨x ¢ äKDT¶l!{(V$”8<{öŒˆ¬­­§OŸ₫¿ÿưï̀™3˜9s¦••ÅÇÇÿú믬Ă€j‰îb¼Q—N¶&¢4‘ˆ¨ÖÑè‚„¦ª¯_¿ND¦¦¦Û¶msvvæmllj×®Ưºuë₫ưû§¥¥a¥`â!=ÜGû„z½ëDäH±ÿUñd ” q¼wï¹»»óY#ÏÉÉÉĂĂƒđ¾A`Ä‘…Ê—¸ÿŸ¦ÿµt́È:@]PâÈQ(¹¶gee–æƯkI-…Ê?mẹ́ç\Ѳ @§$”8Êår"ŒŒ¼qă†ÊG·nƯ:wî999±J–8M§…z»¿¹ÿĐ׬CĐ5 Ưăèæævö́Ù> >|èĐ¡Í›7¯P¡ÂË—/ĂĂĂ·oß₫₫ư{nÖa@É̉” •ÊOøâúø¬£cÁz(¶$”83æđáĂ?NNNöơơơơơUÙ J•*__ñ@wä$çË ï}uñ©WîƠ!•₫úøŒ€CBSƠ¦¦¦«W¯vppÈơS{{ûƠ«W›²JCtèƯă«åẨßÚ ïGÅZ<PrHhÄ‘ˆêÖ­ôû￟Ñ̉>«zxxXXXxzz1ḅäÉ2™¬hƯäâ¹L—ùê1:FDå­KÖè”´ÇeË–m̃¼9g{jjêÆ_½zµpáBÖ1€êNƯụ̀úÀÄ+íV;&´âÉ(a$tă­[·¶lÙ• …—4đ£Œ»víŒÄÛ@ĂÄ/‰ù†¾)E¥¸̣Ó§Â6M›~,á‘j(Á$”8úûû+•Jƒùóç_ºt‰o·´´\¿~=÷¢ê­[·²ôÊwôø%1ËhWèÓGØFü`u¶ÄÑ̀Œuø:%¡ÄñÎ;DÔ¥K///SSSñG;vlƠªƯ½{—u˜ ?̃Ñ»Ÿè'¾*Î 6›>]üw¬£`FB‰cbb"9::æú©““%$$°ô‡Yđå¿è/¾üĂÂ6Uªäñǻ¿ß”Jår9åz£R©¼páƠ¨Qƒu˜ 'ÜÈ/·¡6í©=_ư₫{a³ÇEßùđA(ăG(y$”8Ö­[—ˆ"""¦L™Î5ÆÅÅ:uj̉¤I\âX»vmÖa€>ØK{¯̉U¾úưĂ—÷́6ssË₫5<%›L©T½HHHèÙ³g>“ч²··/DçûöíÛ»woLLL™2eZµj5kÖ,kkk5¿ß½{÷6mÚ¬X±BíåryTT‹SyÍë.`…íE‘‘°(¬øÖF"/«ú²gOúóÏ<>ÓøË"A¸(Tbÿ­—Đˆ£ÍªU«Ê•+—ë§>>>…Ë׬Y3õ¼û÷ï7jÔÈÜÜ<00đ믿NKKSç»J¥̣›o¾INNf}z@cÄYă Êö áƠ«B¹L™ßä³F€IB‰#5ỉ$44tܸq®®®eÊ”!"33³Úµk=úŸ₫iÓ¦M!úŒ °µµ=v́X@@@HHÈĐ¡C¯_¿¾råJu¾¾eË– xÑ€A#øry*?“f?ÏM_¿Î:V‰‘Ö›cˆÈÜÜÜÛÛÛÛÛ›ˆ’““ÍÍÍ‹Øá̃½{³²²¦M›V±bE®eΜ9‡ ;w®A~©sttô5kjƠª…e€ôĂ=º·…¶đƠÊvoŒÊ<ÄgŸåƯQÏZè3i8̣¢¢¢BBB9’œœœ™™ùöíÛBwi``Đºuk¾ÅĐаeË–‰‰‰—/_Îç‹™™™³g϶¶¶3gëó!'9_¾I7U>­WO(=ăË11Bùă/¢%äF7lØÏU=<<,,,<==GŒ1ỵd™ø®u5(•ʘ˜˜råÊ©Ü:é́́LDqqq 6̀ë»?ÿüó;w6mÚdaañÉ€ô™’°̣âWô•+¹ªl Î »tÉñưmÛ„̣￳>¤•8.[¶lóæÍ9ÛSSS7nÜøêƠ«… ¨ĂÔÔT…Baee¥̉niiID¯^½Êë‹W¯^ươ×_½¼¼<<¹G§Ír¼O–»u2¯đ´´´Ù³gW©ReÆŒ…;–’ùˆ¾Äa1 ̉ÙEyFÏüÉŸ¯*II9ö|̣¤P₫á‡̣DåU·ø8¢ËÈ™Đï£+¦pQØÊùÏz΢BB÷8úûû+•Jƒùóç_ºt‰o·´´\¿~½‰‰ mƯºµ@}ZYYÉd²ÔÔT•vnynÜ1'Ÿ'O,_¾Ü¯Đ ö$¬äu†ÎäÜ@ü6êqă>Ơ‘„~åĐ% %wîÜ!¢.]ºxyy©dl;vlƠªôéf###KKËœ#‹IIIDT1·ÛÛ/\¸°k×®±cÇÖ¯_Ÿơ) ¨HÂßô4ÀƒDôçŸÊạ̊nƯº±>OPKiéKr¾=´'ç6Æ eOÏ<:?#₫@I"¡ ¹\~åÊ•ÈÈÈœ)•Jnî5j´Û¶mÛFEE>}ºk×®|oaaaÖÖÖnª¯¡%"ªV­¿%çíÛ·áááööönnn•*Ub}@]É”<æñU•W ̣Ä9áñăyô%¾O¦eKÖGÀ†„Ǻuë^¹r%""bÊ”) àăââ>|¸gÏ.q¬]»vA»íß¿¿¿¿ÿ† ZµjÅ=0zôhcccn›”””/^W®\¹yóæÍ›7÷pëÖ­đđđ† ªù®jˆ²T–/£ÜW68tH(—/Ÿw_7n°>ö$”8;6(((!!!$$$$$„k9r$¿……Å„  Ú­½½ư¬Y³|||zôèÑ¢E‹GEDD¸ºº3†ß&,,̀ÛÛÛÉÉéÈ‘#¬OhFeª̀—;SçÔ1×ÍzơÊÏŸ³@Ú$t£ÍªU«TVêæYXXøøøØÛÛ°W"¢‘#G®\¹̉ÑÑ1((èƠ«W^^^Û¶m˹¸#èÅ´ø)=å«A”ëfááBÙ‚ óè.=](÷íËúà˜‘)•Ê¢÷¢AÉÉÉ¿₫úëéÓ§cccSSSÍ̀̀ªU«æáá1v́Øậ¹\u¥&66« Iö.Ê3z&^'¯[‰Hü.ªçÏó~ào¿?GñçŸÔ½»ÎÏ–îà/‹á¢HP‰ư·^BSƠsssoooooo"JNNæîJPŸ8k-~2F¯³F€üI(q\·nWèÓ§O•*Uèăû]ÔgHÂ|óє浥øY»Û·óíT<¥ P‚I(q |₫ü9µnƯK dË¢,¾º‰6åµå‹Ùª..¬C($ôpLß·œ?~ü˜u,Pü\¦Ë¿Đ/|5Ÿ[‰¨fM¡|ú´Úûh×ơQ°$¡Äq̉¤I½{÷&"ÿ*£Ỵ̈}Á—c)6Ÿ- z÷N¨f_¹5‡}û„2̃%›„¦ª§L™BD•*U‰‰éĐ¡ƒ‹‹‹µµµLüĐ#mܸ‘u¤ 92~V|GßU§êùl,nÄOÆ Êúˆ“Đˆ#ÿæ˜üU¬XQ.—שS§T©R¬CfFѨô¯î£}Ÿü§§P₫ñGơvóÇB¹lYÖ À˜„G___ơ7vrrZ½zµ³³3먀ăt\üVunm$¢“'…̣·ß²>€b¨¸NUGGG2$99™u À@[jË—_Óku¾̉ª•P^¶¬à»Ä¯©’qüúë¯ăâ₃ƒ‰¨|ụ̀Í›7·³³KHHˆˆˆx̣ä 5nܸ^½z/_¾"""<<‰#@‰R‘*̣eK²œHjưhÑB(¯X¡öÎÄOÆà‘jIMU¯]»6..®bÅ‹/æ³F"244œ9sf•*URSS7lØ@DeÊ”™={6=}ú”uÔ ;ci¬x}ï7ôFÍ/†‡ å™3Ỡß¶mB¹reÖGÀ„ÇsçΑƒƒƒjT2™̀̃̃ˆ®]»Æµ”-[–ˆ^¿Vë̃&ĐÁ@|UÍbˆ¨Y3¡¼jUAv™’Âú ¤EB‰cJJ Ư¼yóöíÛ*=xđàúơëD¤T₫÷OűcLj¨B… ¬£éB]ør*¥ªÿųg…̣ôé…Ú·­-ë£ ƯăØ¨Q£¿ÿ₫;##cèĐ¡^^^Í›7¯X±âëׯϟ?¿yóæ´´4"jĐ -Z´è?₫ ¢*Uª°tAü@̀NÚiJ¦j~±iS¡¼fMAvy÷®PÆ“1D$©Äqö́Ù—.]zưúơ»wïüüüüüüTc52:t(]¹r…kéƯ»7ë¨@ëÄYcêÿ}¥₫w#"„̣´iÙ+ŒÈABSƠƠªUóóó«X±b®Ÿ/\¸°Q£F|Ë_|Ñ¥Ku{€â©ơàËÆd¼—öªÿƯÆ…²z¯¦?ăêÊú4H‚„F‰ÈÍÍíï¿ÿ̃µkWppplĺÛ·oK—.]¹reww÷¯¿₫{>†ˆêÖ­Û¶mÛ1cÆà­ƒúm3m>L‡ùj:¥èë.å)S ¸ïøxÖG 9̉J‰¨té̉Ç>|8%''›™™Éd2•m~øáÖa€Ö=¡'#i$_Uÿ1jNíÚBYƯ7S@¾$—8r¢¢¢>|øúơënƯº™˜˜¤¤¤XZZ² tª O¿¤“ưú;B¹Ào¦¾|Y(ϘÁúLH…äÇÀÀÀ 6Äœ$̣đđ°°°đôô1bÄäÉ“s>€^?³„–´¢VúºµµP ,øî7nÊx=ÀG̉J—-[¶yóæœí©©©7n|ơêƠÂ… YÇZgFf|¹µKs ôơøxzóF¨öéSđ6mʬÏ€THè©ê[·nmÙ²…+̣íü(ă®]»"##Y‡ ÚƠ›z‹×÷.Ä$µƒƒP>wơñè %₫₫₫J¥̉ÀÀ`₫üù—.]âÛ---ׯ_Ͻ½z«xe5Đ;¾ä{̣Ơ‚>CD/f«6iR´€Ä ˆ”xJïܹCD]ºtṇ̣̃25ÍöZˆ;¶jƠˆîßåú%¢'’pCa!²F"-öJ*ñ<ơ„ ¬Ï €„H(qLLL$"ÇuªÈÁ>ÍîÄŒÇW¯^3æßÿå[Œííík×®mooo,ZÀ÷Ơ«W_ươë¿ ØOI[eY¤“EéíØ±lƠ-X€¾c›ñ£Œ=b0ÂÚ³„–đƠ¢g”ưU1×®i"Jñ“1îî:;9ÅăÄñƯ»wDT®\9;;»|6³±±©P¡%''³  êHùªF²Æ̃½…̣ˆ ôƯ;Ư€â‡qâ¨P(ˆÈÔÔô“[–)S†ß‹ Êđ ¾z‡îh¤Ûƒ…̣¦Mºfá•Đó—ă=VJñåoè›ZT«è}–//”7lĐP ‡ å tsrI,₫áÇsçÎå¿MZZë0 `ÄK6₫L?O¢IEïóöm/ùª±‡XÄ78âÉ€|8ë(@“ÄYăL©‘¬‘ˆ\]…̣íÛ 7$D(—*Uø~ô¦ª@óÄYcê¿‚Vh¤ÛŸ~ÊƠª‘‹ ëă(a8€†‰³FwrßK{5Ơówß å‡5±x̣»_?m€âñTơ‘#GXŸĐ$ ²àË•¨̉y:¯©›4ÊS¦h4hñ x2 oŒG'''Ög4ÆÜ̃‘°â3z¦©_¿¦ó¢tƯ:ƽp¡PöôÔÚé(ö0U цÚ\¥«|U# }óÊ•Êÿü£éĐ³²´x^ôGĐ€¾Ô÷à«Í·lÊÆÆÔ¦Ö£^=­u  8@Q¡1ÿ£ÿñUÍf”ư¥‚éé~ùr¡AâE2›fÿF¿ñUgâ×R÷﯅XºT( …è$Px?ÑOâ555Rö×RïƠØÂ>"IIZè@?IâÍ1P¤‘›i3_ƠFÖ(V„¤;´p …PnÔH ;Đ+q€ÂØE»´5nƯ­:x°ăÇ…2npø$P`{hÏWô_ƠFÖHDâ7Ø+µ²‡́78ö́©}è$P0ûhß@ÈWµ”5~ñ…P3FkóáƒÖºĐCH )p k)k¼w._ªÚ9˜ÔT¡Ü¼¹vö W8€ºĐ~Ô¯j)k$"¹\(߸¡µăÁ „ÄÔrˆơ¡>|5‹´ơ¾I“„r:T§ÖI|ƒc§NZÛ €₫()Ëñ́Û·oï̃½111eÊ”iƠªƠ¬Y³¬­­óÙ>--mÏ=û÷ị̈äIÙ²eGÙ¬Y3ÖÇÀÆ,µ’ṾƠLÊ”‘¬ưågăF¡¬ÅáF(¸‘8®Y³Æßßß̀̀¬Q£F= Œ̃¶m›©©i®Ûgff>üêƠ«–––M›6}ÿ₫ưùóçĂĂçL™2qâDÖG k ÎÓ)Ư µ´/ñÂÚºµ‘óúµPnÛV›{Đú?U`kk{́ر€€€¡C‡^¿~}åÊ•y}eï̃½W¯^ưâ‹/ÂÂÂüüü6õ|àÀ++«7̃¹s‡ơèÔ*Z5–Æ̣Ơ÷ỗ˜Œµ´/•%¾µø05áG€ÂĐÿÄqï̃½YYYÓ¦M«X±"×2gÎKKËààବÜỏ:v́Í;—’trr7nœB¡8sæ ëĐ´`&Íä«©”ZJkowC†em-ÜÈÿêèé©åè ưO### Z·nÍ·¶lÙ211ñ²xÁ‘ØØX333WWWq£““ÅÅű> ñ&ïÅ´˜¯*IiJ¦EèïÄáFd}đ=¿ÇQ©TÆÄÄ”+W®\¹râvggg"‹‹kذaÎoựË/FFªgæÖ­[DT¥JÖÇ  £hÔ&ÚÄWµ·̣çøqº}[¨₫₫»–ïß…r—.Z̃€₫ĐóÄ155U¡PXYY©´[ZZÑ«W¯rưVíÚµUZ"""J—.Ư«W/uö+/CGD§¿•'O°¡8™Xqb°Y0_}û –b5¾ñEiÛÖ‘/_½ú(6V[kưpÊ/Zdñ±üläÈ÷±?ºâ Y$…¹NX±ë#=OÓ̉̉ˆÈ̀̀L¥ƯÜÜœˆ̃¾}ûÉ ÅÎ;—/_®P(V­Zecc£Î~£¢¢X:¨rtt,z'%;¹GR$_U’’´v渋R·®Đ2x0Ơ¯_Më¹u+_´ëÛWë»+nđ—E‚pQØÊùÏz΢BÏG+++™L–*~±%''ÓÇqÇ|œ?~Ñ¢E÷ïß·³³ûñÇ=<}oQ*•aaaÖÖÖnnn¹~eûöíươ×W_}µqăFdP0É##M®]ªü¡«£¿‘æ‹/tµW} ÿ‰cÿ₫ư 6lØÀƯ×HD }ûö56₫ï)))±±±ÜckJ¥rÇeË–ưæ›oXÇ  â¬Ñ¬u“5Ñ—_Úñå/XŸPƒ₫OUÛÛÛÏ5ËÇǧG-Z´xôèQDD„««ëÑë̀¼½½œœ9̣̣åËÇ›<8go½{÷ọ̣̈b}L‘LÉe©,_­Oơ¯̉UỨº¬°[0€*TĐƠ1_¼(”ÔƠ^ô„₫'D4räÈ *NíÙ£ĂĂöñÊß}§Ăè™Rëo„-qär9Öq”ØØX¬‚&ö ư2ÆñU9Éï̉]í]&º£2:jÖÔá‘‹÷Ÿ~¹Á_ ÂE‘ ûo½₫ßă*&̉DqÖ¸‚Vè2k44Ê3gê6k+S†Ñ±1U ¼–Ộ4 ‹ „PHê ³½/ZDY¢· ®X¡Ûƒ_ºT(¯Y£Û}è$%ˆY½%a=üx·#»"ôW0J%-\(T<ˆ%í½Í0Wóæ 寿Öé®ôG€’‚Ébb¢[cYŸ(8ÜăP"0Ï;uÊ PŸ>:?G åqă ß@ †Ä@Ï¡3̀³Æ³g)$D¨^¹ÂâDx{ eÜàP(HôÙOôSsjÎWëQ=ƯgDÔLX/’=ct.¢£…²‰ £ 7$z«3u₫„5®'Ѥkt­ư’••P?*Ubq.>ÊM°ˆ@àáưdFf©”ÊW÷Đ4@÷àMo…ǸÉ×—Ñé˜>](c °8è!•›ŸÑ³JÄ` /&&ÛJ,_Ô²w¯Pƈ#@aaª@¯DRdÎGa˜dDää$”¯1˜$Ï în($úc>Íw'wq “Ga8â—BOœHơê±;/?ư$”1O P˜ªĐơ¨̃ ºÁWÛQ»P è°aBÙØ˜6l`zj¾ EÄ@¨LOÿL?O¢I¬‚9s†¶mªéé́Î hG€âíƯªCuÄ-èQUªÊ0¤æÂ‘ôï¿ !"¢à`¡Œ÷S îq(ÆæÑ<•¬QIJ¶Y£øÖÆÅ‹ÉÖ–a,D„…x4 #ÅUª̣„đƠT3¢‹ĐŸ´o/”+W¦ùóÙ†CDDwï å2eXGP¼aÄ X’‘Lœ5z“7ó¬qíZúûo¡Ç6"Ê₫~Cw÷Â÷D„Ä ØÙGûT…¹F×VÓj¶QEG“··Pe¹Ö·æ©4 SƠʼn9ÅPŒ¸…áJbÎÎBùúuÖÑđvïʬ£(ö0âPlÈH&ÎÛP‰dâb~ú‰êÖePN¥J±@ q(v̉N•éém´íú‡u\DDåË åæÍiÎÖñ&Nʽ{³@`ª@êQ£‹tQÜ’B)eHB¯^ ƠÓ§Y$æë+”ÅsÖPXH$Me Ñ™œ£(uPÿÙ¹“v́ªRy †#^y¼R%ÖÑè LUHT/ꥒ5ú’¯t²ÆwïÈËK¨J+k$¢₫ư…̣₫ư¬£Đq"S2}OïÅ-y†ga!”CBXG“Sx¸PnÖŒu4z#̉rŒÉH&ΛP©eâǨW¯¦X¤â¯¿„²ä‚(Æ8Hˆ;¹w¦Îâ–ñ4₫cW6â¬qäÈlë~KE¿~BóÔƒ©jIˆ§xrPi”Ú@#eÏƯƯé÷ßY”«wï„rÙ²¬£Đq`Ï…\T²Æé4]‚Yc:B¹L:u@¹Z¹R(ÏÅ:½‚G–Ñ3{²WiL¦d32cª/¿¤[·„jJ ë€̣"N—/g €^Áˆ#3}©¯JÖØÚ+I)Á¬±GÚ»W¨JnñĐ Œ80GqU©ªJc ö¡>¬CËÅ–-tø°P•tÖ8dˆP̃¾u4ú#ºÖ“zªdŸÓçJRJ3kܽ›FŒªYY¬ÊŸøU6âÊ@0â ;'èDj£̉x–Î6¥¦¬CËƯÁƒ4hP•ôX#EG eggÖÑè!$:bGvÿ̉¿âwr?Ỏ|2™ˆ(8˜z÷ª ë€>I¼|ă¾}¬£ĐC˜ªĐ:̣‘‘L%k¬­YǤ₫ư…2æ©´‰#€æ­ 2’…S¸¸ñ{ú^IJk’t¶v-}ơ•P}đ€́́XÇ’©jM¢¨ZTK¥Ñ’,ßĐÖ¡}ÚÔ©´~½P 'GGÖ1©ÉƯ](/ZÄ:½…Ä@cÉñ!=Ti ¦àNÔ‰uhŸÖ³'ưù§P¦5YǤ¾ÈH¡üư÷¬£Đ[˜ªĐ€4@F2•¬q–ÆFPD^Ø‘]…Ô¥º¬#Ơ¥’,,(9Yµưï¿©m[ÖÁiÜ–-”*T,`@ …©j(öNÑ©ÚT[F²úT?¯¬Ñûµ·’”ñ¯Yc:d` 5rNëaÖHD#D÷`’€Œ8Bqµ‰6¡1Y”•Ï6^äµ¶Q́›X²V·g)+_^½Ê¥ưåK²±aœö™7{6ëhJ4Œ8Bq̣¤Üó.£hT^Y£™ÅR¬’”\Ö¨.]"CC’ÉrÉ/^$¥R³Æ%K²³ë€J4$ uïéư"ZTJÉHæH{hO^[¶¡6Ñ­$e2%W§ê¬׌Ÿ&™Œ6¤¬Ir` )•ôŬCÔ¡Ci₫|¡IjÖ0U Rô^¯¤•ËhY₫3Ñœ̃Ôûú¥U`µ&=|Hy>½z5y{³QÛ6¥Ñ«°8æmß¾}{÷)S¦L«V­fÍem­wÉIƠÚ@Çé¸ÛÿH?~Kß²ZĂ?§áĂ騱<7ع“¾úu”:`cC‰‰Bc̉€Ä1wkÖ¬ñ÷÷733kԨѣG£££·mÛfjjÊ:4=ñ†̃́§ưûi…¨ÿ­vÔn-û‚ômvöúuêÖâậÜ BºpªWg¨nˆß+HÈ$÷8æ"*** ÀÖÖöرc!!!C‡½~ưúÊ•+Y‡V\Ư¢[?ÓÏäÀ=×"#™5Y¡1êd-©åQ:ª$¥’”¡ª7Ycx8ớùßé¨_?Ϭ±GR*éÅ‹’‘5î̃¬@Ê0☋½{÷feeM›6­bÅ\Ëœ9s:¨SCÜ’n˜QJa\ès6fg* 3&é “™¦ï3KÈ4ưTí‰̉P¡ñs^ñª«|o§À.\5üaå]ƠŸ́¢pñ6á+7¯₫Då‹Ïß”¶µú nyđ¼FEƠªœuhá®̉˜k‡9¿₫ïë̉•¬?¨óƯ±ƠÊ¥ư›fù,Ơ2%³t!ÎC²/·¶ü½¹m4‘/Qx85o®ºÑùóÔ¸q¶…‚ U7Ëơ»ê7¦§S©RÙZ.]Ê%“U¿Ăׯ)û]ÂUBBèéÓÜOD•*ôøq!N h•L‰ßé³S*•®®®ÖÖÖgΜ·¬ZµjÙ²e½{÷οẸ́÷¢"íïG}éxÖ¡HÂúu­p¢hÖHCË–Æ:ˆ’+66Ö1çĐ)\ ’ËåQQQ¬£`#ªRSS …•••J»¥¥%½Êơ­Wåèx›ÿ₫‹’³FBfĐªY´Â–³DB̃óêÛo‰ˆbcYÇRr=ỵ¤è€fá¢0שS'Ö!HGUiiiDdff¦̉nnnNDoƠ¹=­DI3¥¸*dûœ₫ø®Ơ§« èZ}zoÂ:,iiH;ѱNt¬)zoúÆÂ‚Ö®å̃FmIdÉ: " nI. [9ạ̊:‚ÄQ••••L&KMMUiONN¦ăùs–;— ákS"g""Ï:’|±èiHÔhëÓ -¬/ Vedddii™sd1))‰ˆøç¬J$¹°µµMLLä2E^ll,÷ëèØ@☋¶mÛ*Ó§Oó-J¥2,,̀ÚÚÚÍÍutl q̀Eÿ₫ư 6lØÀƯ×HD }ûö566.ZßÅÉ…½½ư¬Y³|||zôèÑ¢E‹GEDD¸ºº3†uh̀ q̀ƯÈ‘#+T¨pđàÁ   ;;;//¯iÓ¦q+̣”LHóÔ½{÷îƯ»³@*p#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#¨‰#”:ub¨ÂE‘&\ ÂEé@âjAâjAâjAâjAâj‘)•JÖ1è¹\Î:Đ®¨¨(Ö!0€ÄÔ‚©jP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GÙ·o_ÿ₫ưƯÜÜ5köƯwß½~ưuD%KZZÚ–-[ºuëÖ Aƒ-ZŒ5ề™397Ăeb%>>₫‹/¾˜5kVÎpQtïÆ“&ṂôôlÔ¨‘——×ùóçsnƒë¢Kééé¿₫úkŸ>}ÜÜÜÚ´i3uêÔèè蜛á¢èÀƒärùµk×rưTK ß—ÉpáÂ…¬cĐkÖ¬Y¾|yrrr£F̉̉̉Î;wáÂ…îƯ»³­DÈ̀̀:tè₫ưû …»»»……Å… 8```àîîÎo†ËÄR©œ8qbll¬\.ïĐ¡ƒø#\Ư;~üøèÑ£|8--ß×E÷ºuëfbb²té̉sçÎ¥¥¥ÅÇÇÏŸ?ÿÉ“'ưû÷ç₫âà¢è@óæÍÛ¶mÛ¶m[ñ}¥k$"{{û &ddd8p€pQ$@KPB.G °µµMLLä₫dđbcc¹XGW"dee͘1cÛ¶mmÛ¶ư믿&M”s” —I—¸—^øúúÊ?êÓ§ưùçŸr¹¼[·nÜf¸(ºW±bEccc™L&nä₫¾dffrU\]JLL$¢êƠ««´×¨Qƒˆ^¾|ÉUqQ˜S甄˄ÄQÚ¶m«P(NŸ>Í·(•ʰ°0kkk777Öѕ۷oÿ믿¾úê«7æơ[.“.U«V­kvÍ›7'"{{û®]»¶lÙ’Û E÷<==“’’îƯ»'nä á×ÚÄuÑ¥êƠ«FGG+•Jq{TTƠ¬Y“«â¢0§Î%(—‰ơ äúàéÓ§µjƠêÔ©Ó»wï¸ggçåË—³­DÈÊÊj×®Ư_|‘–––Ïf¸LlƯ¼y3ç›cpQtïöíÛÎÎÎưû÷OLLäZ®_¿îææÖ¨Q£„„®×EÇÆë́́¼víZ₫å=÷îƯk̉¤I:ubbb¸\™;wn®oQ甄Ë$Sfÿ gÓ¦M>>>-Z´xôèQDDDíÚµ7mÚ”ó±|и/^´hÑÂÔÔô³Ï>Ëùiï̃½½¼¼¸2.C·nƯêÓ§O=V¬X!nÇEѽ_~ùeơêƠ––– 6LMMŒŒ”Éd+V¬èܹ3¿ ®‹.%$$ôë×ïÙ³gƠ«W¯]»vbbâ¥K—²²²æÍ›7xđ`~3\Ư˜7õ¾}ûöîƯ›ómu.̃_&Ă… ²A¸¹¹U¯^ưùóçáááFFF;wöññɹâ1hCTTT```ffæ‹ÜÔªU‹J—‰¡—/_îÙ³G.—wèĐAÜ‹¢{ 6´··đàÁÍ›7?|øĐ¤I“Ơ«W7nÜX¼ ®‹.•)SfÀ€Dôï¿ÿ^½z5##£aÆ˗/çZâá¢èÆñăÇoß¾Ư¿ÿJ•*©|¤Î%ĐûË„GP µ qµ qµ qµ qµ qµ qµ qµ qµ qµ qµ q€KOOßµk×È‘#[´hQ·nƯ:|ươ×›6mzÿ₫½ú́̃½[.—Ëạ̊¾}ûê,̣èèhùGçÎcpîrsâĉ₫ùçŸ₫yơêU^Ûra×®];)))çÜË—/W×ëÖ­ă¾5qâDÖ§$P0·nƯêÔ©ÓÂ… Ïœ9óâÅ‹ôôôG………ùøøtèĐáäÉ“¬,~¦OŸ>a„ &DEEåµM»ví ‰H¡Pœ9sFåÓû÷ïÇÇÇsåÎ;³> Đ[H bcc½¼¼>}Ê·pÙ çùóçÓ¦M»{÷®:]™™™988888T¬X‘ơa–––M›6åÊaaa*Ÿ:u+888Ô­[—u° ·8@øøø¤¦¦rå¾}û:tèÆáááK—.533#¢´´´iÓ¦©ÓU÷îƯ?~üøq??¿¢öäÉ“ôôt&çDg»æ‡O:¥T*Å>}Zem@âê:{ö́‰'¸̣×_ưă?ÖªUËĐаB… ưúơ[½z5÷Qlĺǹ²ø:…B±nƯº–-[®[·̣¸Ç133s×®]ƒ j̃¼yƒ ºuë6kÖ,•!LqŸ 3gÎlܸqÛ¶m=<< q\â“’’–-[Ö·o_77·={úûûgffb×yƯ;8}útñˆ«V­’Ëå|.>|øp¹\–––kœülubbâÍ›7ùö´´´ÈÈH®Ü¥K¾=++ëèÑ£C† ñôô¬[·®§§ç!C8 >¢üÏF>‘ó–.]:pà@77·víÚM<ùÖ­[Eü“’eÄ:(6víÚÅ,--ǯ̣iëÖ­[µjơâÅ "ª^½ºÊsçÎ=pà@>ư§§§<øúơë|KtttttôáÇ¿ÿ₫û¯¾úJeûäääAƒ=~ü˜«¾{÷nƠªU>üñÇ w€III¼ÿ>W½{÷îƯ»wïܹĂeºZƯµ:¬¬¬4iÂƯàÆOIGDDpCUªTquuå·Ÿ>}zpp0_¿pá‰'Ö¯_¯‘"""f̀˜‘ÀUSSSăââBCC‡>gÎí `# ®Ë—/s…:”)S&çºyóf₫Y#ùùùqY£‰‰IÛ¶m‡ R¿~}"R*•K–,yđàÊö?._¾|£FøxùyÛ‚ºpáÂưû÷íííëׯ_ºti®ñرc7nÜĐ̉®GjjjÊU}||BCCMLḶÚ¾S§N\Aüƒ£x:88˜Ëe2Y“&MzơêåääÄ}Q¸S$–œœ́ííÍeM4™Û·oß~áÂ… …âæÍ›‰‰‰åË—§}úpóÈ7õl̉¤IáNï×_åÖêØ±#?„éææöĂ?ц t¹ĐèF@-ÉÉÉ|¹ÏA›ñ¼¹{÷îơë×Ï+ïä²4":tèP`` —§._¾üÈ‘#GáÛx††† ,(Uª̉Œ3¸ö+W®đ]ˆ““—5Q56lÈ•ÅO‘ki×j²¶¶vww'"¥RÉ¥†>Œ‹‹#¢jƠªƠ®]›ß²K—.+W®\¹råĐ¡C¹–ääd~¡Í·oß=>70`ߨ·o_îF̀øøø|V€b # î¡iN>ëTçÅÅÅå“éfóæÍ¹ñ°ØØØï¾ûN&“Ơ®]»eË–mÚ´©W¯^Îíí́́Ä_ç J¥2..®fÍ Re´Ï̉̉’ïPÛ»V_§N¸¥ËO<Ù«W/~ZüX RRR̉éÓ§õ¼yûöí7n¤¤¤h0n•ˆF•ë>”ËåÚ; {qµ[[[såœ#pœwï̃½yóæÍ›79Ÿ æ¿›)S¦ <˜Æ#"¥RyëÖ-??¿₫ưû<8g¶jcc#®–-[–+ó³êÂOçZƠê®Ơ×¾}{nH›Áç×tTYˆ'##cÙ²eM4™>}ú¦M›""" 7µ­ÉÉÉüĂàyyưúµVOèGP—››W8qâD®KºtêÔ©qăÆ7柿æå“„ñŒŒŒ¾ÿ₫ûˆˆˆµk×vï̃Ư‚ÿèâÅ‹9ߤ—˜˜(®¾ÿŸOwppĐê©`¸ẹ̈åËssèIIIçÎăâ©^½ºÊØŸŸßæÍ› E•*U.\øçŸ^¾|ÙÓÓSSa˜››óƒĐ›6m ÍM·nƯ´z*@÷8€ºø[Ùâăăwï̃­̣é‰'øÁ6î>¼IOOOHHHHHHOOïܹóÊ•+#""6õ̀ORóḲ¢££¹Ơ8gÏåæ”íííµz*ÔßµÊ{¥U2ÎÂáW®\ÉƯR©2OMDüñWX°`Á Aƒär¹¡¡á¿ÿ₫«₫^>yµjƠ¸‚B¡¨*biiiaaaaa‘ÏăáPL!quyzzzxxpå%K–lܸñåË—D”‘‘qèĐ!₫ÑƯªU«º¸¸´óû÷ï7ûˆ[ÑĐĐĐĂĂ£_¿~ÜâHNFFÆ?ü‘‘AD/_¾\±b×̃¦Mñ‹µá“»æï€¼~ư:¿ú_ưuáÂ…ü»UgïíÛ·700 ¢;wîp-*‰cJJ ?M̀ç·nƯRgơ#çÿ0́Ù³‡¿ 4$$ÄƯƯ½qăÆ½¥¤Ç@|ûí·ưû÷ÿ₫½R©\¿~ưúơë­­­“’’ ·Aé̉¥×¯__ˆ¼M.—ÛØØ$$$(AƒyzzZZZ>}úôøñăÜíÛ·Ïù­¿₫ú«M›6Ÿ}öÙ7¸Ébƒ)S¦èàTä¿k~!î÷ïß÷êƠËÅÅåơë×üÓ$*,,,¸û}}}£££‡ fd”ßg›† ̣™\5ø59eÊ”)S¦ ×çܹs9"“ÉNŸ>ÿ;c ùرc÷îƯ›””ô÷ß:ÔƯƯ=::¿çrĈüÓE 70âà́́¼yófñóѯ_¿æ³F‡Ÿ₫¹ĂDd``°qăFnr3!!aß¾}¿ưö[pp07ëîî>zôh•¯4jÔÈ̃̃₫Å‹çÎăR7n•­>Ô¬æ®]]]»víÊ•Ó̉̉._¾[¥J~”N¥7®påÊ•åË—«3î(^œ(ç<µL&kƯº5¿÷ăÇÿóÏ?¶¶¶7湡â\©¹………7|áÂ… 6„„„p+₫ 4ḥäÉÚ¾  {H `>ÿüó¿₫úë»ï¾sww/_¾|©R¥Û´ióƯwß;v¬U«V…î¹Aƒ¡¡¡&L¨[·nÅŒŒ,,,¾øâ‹¥K—nÛ¶Úgii¹k×®T¯^ƯÆÆ¦cÇ[¶l8p N‚:»^¾|¹···³³³©©iíÚµ‡ºwï̃\Ÿ.ÿî»ïºwï^¾|ySSS'''u$êØ±#7[M9§æûtvv&"ƒZµj >üàÁƒíÚµă>=rä? “ú‘·iÓæĐ¡Cưû÷wuu555­R¥JûöíẃرpáBuYÎơɤlƯºu¾¾¾DÔ®]»7–]Bffæ‰'(Y~€BÀ=úÉÈÈ)#h¦ª@-H@-H@-x8Ô‚GP GP GP GP GPËÿSùÜ:<&ađIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/trapmf_101.png000066400000000000000000001166231463010412100222750ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚíƯwXWà³€ ‚EQÅ«bĂ‚]Á̃cĂhİ÷KÔD£Ø5*ˆØM¬DứhPT{GTŒ,HQaÙïÁ™‘æ.,{gwï“çÉÙ»³wḮ{¸wæL©TÀ·±Nt GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP GP‰ ëô\.g䯈ˆÖ)0€Â1_æ?&)“Ëå8(Rƒƒ"M8.„ƒ"A;H„©jP GP GP GP GP G0Çcd„ƒ"M8.„ƒ̉ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂT‚ÂTbÂ:Đ¹\Î:Á:Ư€Â@¯àû@]ø‹Ku˜ª• p• p• p• p• p• p• p• p• p• pĐ*WWW™L&“ɺuëÆ:†Îí¾ƒƒë\@m(´­J•*Û·o7nÜ7·lÖ¬Ùܹss̃æưû÷Æ +[¶¬……E³fÍBCCsØøÆßÿ}É’%-,,êÖ­»|ụ̀ÔÔÔÜuÅKIIiĐ AÆ UÉjĐ AÛ·ooĐ ›̣…#€¶ÙÙÙơíÛ·yóæ9ovơêƠsçÎå¼M|||Ưºu7mÚÔ´iÓüñáÇíÚµ»zơj–GEE¹»»;v¬]»v&L(X°à„ <==sÑ•Ø̀™3/^¼¨bVnnn}ûöuttd} W” iÎÎάS€Œ¢¢¢X§á ä₫ư“ª÷úôé“B¡`µ§µjƠrwwÏaƒ”””ăÇÏ=»xñâD4gΜ6={6m̃¼™{øđáCkkk,7₫î»ïŒŒŒÂÂÂø–ÁƒѱcÇÔíwâÄ ™Lfbb̉ AƠ³êƯ»w™2eX‚ rñƒ£Ó?kyG`©|ụ̀ăÇ_½zµµµuÁ‚«W¯>mÚ´ÏŸ?ó,_¾¼FæææE‹­_¿₫ü‘áµ—.]ªY³fÍ5UÙ~́ر“'O¶´´455­_¿₫áÇSSSúé§*UªXZZzxxܹs‡Û899ỹ¼yUªT)\¸p¹rå¼½½_¼x¡Ï$..®mÛ¶sçÎ}ưúơ77̃¹sg©R¥ú÷ïÏ=¬P¡BÏ=ƒƒƒŸ?yăS§N5kÖ¬^½z|˨Q£ˆèÂ… êvÅyụ̀e¿~ư¼½½Ë”)“ë¬@‡˜°N´â¿ÿX¾{é̉9<¹gÏÿ₫û¯C‡5kÖ ơơơ½pá¿ÿ₫+“Éæ̀™3wîÜ-ZốÙóÓ§Oûöíọ̣́²´´ܹ́3÷Ú˜˜˜¶mÛZYYµnƯˆ¾¹ưöíÛg̀˜abb²lÙ²={Ö®];55uèĐ¡‘‘‘~~~?üđõk׈ÈÛÛ{Ç­Zµêѣǭ[·6õ|ëÖ-ÏùË#;;;¥RID•+WÎaËøøøû÷ï÷éÓG&“ñ-Z´ ÍpñMjjêÈ‘#ëÖ­+n|üø1*TH­®8J¥²ÿ₫666+V¬pqqÉ]V [P8†¯„´M©̀áÉÿ₫ûï·ß~ûé§Ÿ¸‡S¦LY¼xñ®]»z÷î½mÛ6ggçăÇ›˜˜pOÙÚÚ;vŒ/ƒ‚‚æÎ;sæL###"úæö ׯ_çª1“)S¦$&&†‡‡(P€ˆnܸ̣áĂ##£]»v 0`Ó¦MÜ ½½½8đüùóR¥J±ü$¿ọ̈åK¥Rigg'n,Q¢e­411Y°`¸åÍ›7 ,066îÙ³§Z]q/^Z¸pá\gº…#0fkk;qâD₫á́Ù³ưüüvï̃Ư»wï°°0SSS® $¢¸¸8"JJJâ7.Uª_5Ñ7·wssăÇđ<<<ˆ¨OŸ>\ƠHD-[¶ IJJ²´´”ÉdçÎ{üøq¹råˆ(000000ṣ©©©‡În×¾ûî»|ưè¸]³´´7ZYYñûƒÿưwÈ!<đóósrrº~ưºZ]………Íœ9sñâŵjỞ`V q(€1—‚ ̣ÍÍÍårùÇ‰ÈÆÆæüùó'O¼wï^ddäíÛ·ÅkÇ‘\.ç«FU¶·µµåc®^̀ÜBDfff+V¬˜8qbụ̀å]\\5jÔ®]»;óä$&&víÚ5»]Sæ8ÔJD>¬T©ÿpóæÍ Pư£ă’ÿđჸ1>>ˆ-Ư«}ú´nƯz̀˜1Ê t GĂ •“ó4ÅÄÄ$11ñÓ§OƯ»w?räH½zơÚ´iÓ¥K—† Ö®][¼¥µµ5«²½êFÙ£GC‡>}úÈ‘#r¹<888Ă ¬••Ơ7«ĂØÙÙmß¾˜a)DU^ndd”a₫766–ˆJgs^é;†jaa±nƯºÁƒó£³juµnƯº¨¨¨®]».Z´ˆkyÿ₫½B¡đơơ-[¶¬§§§ºY®@á`ê×gA¶îܹ“’’Âö%''ß½{×ƯƯ=$$äÈ‘#+V¬;v,¿q†D1u·ÏA\\܃œ½½½½½½Ó̉̉Ö®];zôhn¡qÿy™ª¶°°èÛ·o®?:“ªU«={VÜxæ̀™L&¾Z…wđàÁ~ưúơêƠËßß?ĂT²Z]q—½/[¶LÜøöíÛiÓ¦¹»»÷éÓG­¬@‡`9`́ơë×Ë—/çΛ7/>>¾[·nOŸ>%¢*UªđOíƯ»7111»>u·ÏADDDƒ –.]Ê=422rww'Ñ\6›ªÎ>=ŸG:tˆ{øêƠ«½{÷¶nƯº|ụ̀¶T*•S¦Lqppضm[†ªQƯ®f̀˜‘ay?GGGnÇÓ§O«ƠèŒ8c¥J•5kÖùóçkÖ¬yáÂ…“'O6lذÿ₫OŸ>577÷ññéÛ·oé̉¥/\¸pêÔ©âÅ‹‡„„=z´}ûöúñđđPkûÔ­[·Zµj .ŒªV­ZDDÄÑ£G‹-Ú§OŸ [æqª:ï¸qăÆ¾}û9̉ÚÚzóæÍIIIỸ¥đîƯ»÷îƯ«R¥··w†§ºwï̃¹sgƠ»̉`V [0âŒƠ¯_ÿäÉ“ï̃½[¹reLL̀¤I“NŸ>mddT¶lÙ#G”)Sæ÷ß_¾|¹™™Ù7,X¿råỀư¨»} ,xôèÑœ?₫—_~ù÷ß[·n}îÜ9 ˜YZZÿư÷{÷î]¼xq¥J•‚ƒƒ³¼ôƒˆèîƯ»›3¹qă†Z]i0+Đ-2¶'é%¹\Á: øJtt´Ư8”ü ‹¿Ê—/_«V­}ûö±ND{\]]­­­¹)]ƒƠ§OŸ˜˜Ö‰åêGÖ4# œă m¯^½ÚµkWé̉¥›4iÂ:m»té̉ǹ[‚ÎAá,µoß̃ÑÑ‘uÚvçÎ̃½{wíÚƠ Ç 6øûûQ¶·Á„\Aá,­]»–u ÚvơêUÖ)°äçççççÇ: È%œă*Aá*Aá*Aá*Aá*Aá*Aá*Aá*Aá*Aá*Aá U®®®2™L&“uëÖu.’6|øpîƒrpp` ¤Cá mUªTÙ¾}û¸q㸇7nÜø₫ûïK–,iaaQ·nƯåË—§¦¦̣¿ÿ~ذaeË–µ°°hÖ¬Yhh¨*o‘’’̉ Aƒ† Ơê*--mơêƠ5kÖ´°°¨\¹̣¢E‹RRRr×Ơ½{÷<==Ë”)cmmƯ¸qăưû÷«’Ơ Aƒ¶oß̃ AÖ‡ D” iÎÎάS€Œ¢¢¢X§á äü₫Ñ µjƠrwwç>|øĐÆÆÆ̉̉rÀ€³fÍâJ½®]»rϾÿ¾R¥J üá‡ÆŒcoooeeuåÊ•o¾Ë”)Sˆ¨Aƒ|‹Z]);rĂ¢S§Nm̉¤  <8]EDDXXXXZZ1bÚ´iU«V%¢uëÖ©ØUï̃½Ë”)“¯G$?8û³†ÂQó ö“”¡F‘ ”ü Ó¿RSSSSSµó^Ÿ>}R(¬ö4CáøƯwß………ñ-ƒ&¢cÇ)•ÊÙ³gÑæÍ›¹§>|hmmíáá‘ó[œ8qB&“™˜˜ˆ GµºÚ´iđ-½zơ"¢û÷ï«ÛƠ€d2Ùơë×¹‡?~tvv.V¬˜Y¡p”g°ÿ˜¤ 5á ä]üưăèè8nܸßÿƯÂÂÂÈȨZµjS§Nưôé¿Á²e˪W¯^¸pa77·íÛ·gxmxxx5jÔ¨¡ÊöcÆŒ™4iR¡B… (àæævèĐ¡”””iÓ¦U®\¹H‘"îîî·oßæ6NJJúơ×_+W®lffV¶lÙüñùóçÙå …#÷¾â ®\¹BD³gÏV*•r¹¼T©Riiiü³̃̃̃FFFÏ=Ë®ÿ/^ØÙÙùøø8:: GµºjÔ¨‘££cvåµZ]¹¹¹•.]ZÜ2dÈ"zưúµ*]¡p”œăŒíÙ³gôèÑÍ5›:ujñâÅ}}}[·n­T*‰hΜ9&L(^¼øÔ©S‡₫áĂ//¯ƒ̣¯‰‰i۶퇸3á¾¹ưöíÛ·lÙ2cÆŒ¹sçFEEớÙ³yóæ§N:th¿~ư‚ƒƒøánKooïŸ₫ÙÁÁa„ ®®®›7oîÚµ«Æ÷=55uäÈ‘£F7>~ü˜ˆ *ÿ₫}™LÆ?Û¢E‹´´´́Î)T*•ưû÷·±±Y±b…¸]­®>}úté̉¥¦M›¦¦¦?> àäÉ“‰‰‰¹èˆj×®ưâÅ‹èèhî¡B¡/S¦Œ­­m.vØ2ahƒè{™¥2§gÿûï¿ß~ûí§Ÿ~âN™2eñâÅ»víêƯ»÷¶mÛœ?nbbÂ=ekk{́رÎ;sÍ;wæ̀™FFFDôÍí®_¿^¹re"211™2eJbbbxxxˆèÆ!!!>|022Úµk×€¸["̣öö>pàÀóçÏK•*¥ÁOÆÄÄdÁ‚â–7õ,X°ÀØØ¸gÏ/_¾T*•vvvâ J”(AD¯_¿Î²ĂÅ‹‡††.\XÜ®VWÏŸ?ÿüù³L&k̉¤Ixx8×X¶lÙ?ÿü³qăÆêf5ỉ¤Ă‡7kÖlèĐ¡–––{÷î½}ûö–-[ÔÍ ¤…#0fkk;qâD₫á́Ù³ưüüvï̃Ư»wï°°0SSS® $¢¸¸8"JJJâ7.Uª_5Ñ7·wssăªF"̣đđ ¢>}úpU#µlÙ2$$$))É̉̉R&“;wîñăÇåÊ•#¢ÀÀÀÀÀÀ̀ɧ¦¦>|8»]ûî»ïÔú(₫ư÷ß!C†æêÅ̀-Ddff¶bʼn'–/_̃ÅÅ¥Q£FíÚµëØ±£8ONbbbSØÊœÇZEVe{Ơ9²G‡:}úô‘#Gäryppp†yU+++Ơ«Ắ́رcèĐ¡ëÖ­qqq}TïÊÜܼB… Ï=7rå]™2eÔÊêÍ›7DT±bEq#÷0..N­®@ pU50öúơëåË—óç͛߭[·§OŸQ•*Uø§öîƯ›˜˜˜ƯŸºÛç ""¢AƒK—.å¹»»“h.›ÇMUgç›o¤T*§L™âàà°mÛ¶ U#ÇÇÇçÑ£G‡â¾zơjï̃½­[·._¾|†-g̀˜‘aå~9Ó§O«Ơ 0àÔ©SgΜᦥ¥-\¸ĐÈȈ;7Qơ®êÔ©cfföÇ|úô‰oܰa}ÂT++`#ÀX©R¥fÍu₫üù5k^¸páäÉ“ 6́ß¿ÿÓ§OÍÍÍ}||úöí[ºté .œ:uªxñâ!!!Gmß¾}†~<<<ÔÚ>uëÖ­V­ÚÂ… £¢¢ªU«qôèÑ¢E‹öéÓ'Ă–yœª¾{÷î½{÷ªT©âííá©îƯ»wîÜyàÀ7ńÛ·ïÈ‘#­­­7õœ””4wîÜ\¼—Z]1bÏ=­[·îÛ·o™2e=zé̉¥)S¦Ô¬YS­®̀ÍÍ×®];hĐ —îƯ»›9s&88¸{÷îÜp¬w´ơB’zÈ`•2¬5-A8(ùAÿ8::víÚ588¸yóæVVV•+W4ỉǹgƒƒƒ5jdaaQ±bEooïׯ_/^¼mÛ¶ükŽ©µưµk׈(00o™7o½xñB©TÆÄÄ <¸\¹r… *[¶́?üp÷î]́²xđd÷=õ!!!111ù÷¹øÁÑÅŸ5À9 œă m¯^½ÚµkWé̉¥›4iÂ:éºté̉ǹ0‚D p–Ú·oïèèÈ: m»sçNï̃½»víÂ16lđ÷÷'¢2eʰÎ̉¡p–Ö®]Ë:m»zơ*ëtƒŸŸŸŸŸë,à+8Çñ¢¢¢är9w·PC†Âñ¶mÛÆ:IÀTuÖâăăïß¿đàÁ;w²Î@P8f­sçÎ/^¼`€„ p̀Úüùó¹»jnß¾ưüùój½öZd$™›glưü™ üªE¡ căŒ›%%QáÂ*5~üH¦¦_µ(•$“å¾Ă,3KN&3³Üw˜–FF_Ÿ ñé*”ûSSÉäëÆ))”éf²J%%%}{ï@‹Æ/~̣dÆFMy5:”₫Ïh–?|àÚS€Ü1's"J£4£Lgñ%QRaÊø™|-™uÊl p̀¿>B.Vö7Ë®FIMUéơY¾VơF́đóçŒ-))dDä́L¾¾Ô­›J)A>“ɨIăü?̣êu¨7?£ ®$JRïÙoư§¯P8‚ÁˆŒL<øq­Z¬ózưÚ˜¨lHˆ¡₫̃ĐY(Á€½{‡›#KÁèѬ3€\Ár<'wv&¥ÿIè?//áđ:ÄúĐáĂB̀ü_‡ư¹£îO›³Ü™uÊl p(Ä̃̃¬³1tqqB\±"ël@(Áˆ¯Ú~ù’u6†N\º‹KzĂáêê*“Éd2Y7\®—o†Î}ȬsÑ+(Á $vê$<8~œu:mÿ~!vwg #UªTÙ¾}û¸q㸇iii«W¯®Y³¦……EåÊ•-Z”"Z#àưû÷Æ +[¶¬……E³fÍBCCsèù̃½{eÊ”±¶¶nܸñ~ñœ]ñ5k6wîÜ 9w¥µ7Ê Ú¾}{ƒ 4}è  G0±  ||X§c¸âă…Ø̃^µÅoô‘]ß¾}›7oNDiii]ºt3fLÅGU¼xñ©S§6ŒÛ2>>¾nƯº›6mjÚ´é?₫øđáĂvíÚ]½z5Ënïß¿_¯^½'N|÷ƯwÇ÷î]·nƯrÑïêƠ«çÎËĐ˜sWZ{£^ëææÖ·o_GGGV‡Xo)!G3f̀pvv¾víê/qvvf5d¥$₫F<=…ƒ°uësÖéè!₫ư“ª÷úôé“B¡`µ§µjƠrwwçnÚ´‰ˆø–^½zÑưû÷•JǻÙ³‰hóæÍÜS>´¶¶öđđȲçÈd²ëׯs?~üè́́\¬X1î¡Z]¥¤¤?~|ö́ÙÅ‹'¢9s戟͹+­½QίU*•½{÷.S¦̀7H.~ptúg-/đ ú (ơCTT”²{w¡f9uuFJ\½GEE±NGéâïGGÇqăÆư₫ûïFFFƠªU›:uê§OŸø –-[V½zơÂ… ÛØØ¸¹¹mß¾=ĂkĂĂĂkÔ¨Q£F U¶3f̀¤I“ *T @77·C‡¥¤¤L›6­råÊEqww¿}û6·qRR̉¯¿₫Z¹re33³²eË₫øăÏŸkæ¯ …c£F³+dåry©R¥̉̉̉øooo##£gÏẽØÍÍ­té̉â–!C†ÑëׯƠí*Ă}w3Ôd9w¥µ7ÊùµJùSƠß0õ¼ˆˆˆ5k²Ṇ ×V³–,ºAW©R¬³)Ù³gÏèÑ£›5k6uêÔâÅ‹ûúú¶nƯZ©TÑœ9s&L˜ÀÍ̃>üÇ^^^ä_Ó¶mÛ>pg³}sûíÛ·oÙ²eÆŒsçÎêÙ³góæÍO:5tèĐ~ưúÿđĂÜ–̃̃̃?ÿü³ƒƒĂ„ \]]7õܵkWïû§OŸ.]ºÔ´iÓÔÔÔóçÏœ>₫₫ưû2ÑƯ*[´h‘–––å©~µk×~ñâEtt4÷P¡P„‡‡—)SÆÖÖVƯ®́́́¸Bá̃½{ʹ+­½Qί…|‚ÀÁ`ØØqTël ®§fKF²¼w’kJÊi‘Éÿ₫ûï·ß~ûé§Ÿ¸‡S¦LY¼xñ®]»z÷î½mÛ6ggçăÇ›˜˜pOÙÚÚ;v¬sçÎÜÆAAAsçÎ9s¦‘‘}sû„„„ëׯW®\™ˆLLL¦L™’˜˜^ @"ºqăFHHȇŒŒŒvíÚ5`Àn™ˆ¼½½8đüùóRư»çùóçŸ?–ÉdM4 çË–-ûçŸ6nÜøåË—J¥̉ÎÎNü’%JÑëׯ3÷6ỉ¤Ă‡7kÖlèĐ¡–––{÷î½}ûö–-[ˆHƯ®rsWZ{# P G0$: €‡„Đ—;’ƒvüù§wè@_ÆDÈÖÖvâĉüĂÙ³gûùùí̃½»wï̃aaa¦¦¦\HDqqqD”$ºiw©R¥øª‘ˆ¾¹½››W5‘‡‡ơéÓ‡«‰¨eË–!!!III–––2™ܹ́s?.W®fơOjjêañ¢ö_ûî»ïr̃÷÷ïßÑÖ­[»uë¶eˇàà`ooï=zܽ{—ËÜ̉̉Rü+++~×2ptt́ß¿ÿüùógÍŵ´jƠªeË–ü‡ zW9ȹ+­½‘Z]¦ pCH%K¦Ç̃̃„© -R(„ØÖ–u6 1... ä››Ëạ̊‡‘ÍùóçO}äÈ‘€€¹\œaæÔÊÊê›Ơa¸̃7n,.I7nLDwï̃4h‘‘Q†iÙØØX"*]ºt†®nƯºơçŸ5¾íܹsÚ·o¿~ưú‰'ª̃Ơ7sΡ«œŸƠàåú3‡¼@á¦m[ađ‹©~}Ö Í›…ø[sw/̃Ó{Ö)dëÎ;)))üh_rṛƯ»wƯƯƯCBB9²bűcÇ̣gASwûÄÅÅ=xđÀÙÙÙÛÛÛÛÛ;--míÚµ£Gö÷÷çˆ÷Ÿ—©jssó *<{öLÜÈ•JeÊ”111©ZµêÙ³gÅÏ9sF&“¹¸¸dèêÍ›7DTñë[yrăââÔê*g9w¥µ7R«+Đ\U ×V³feÅ:ׯ_/_¾œ8õ¼øøønƯº=}ú”ˆªT©Â?µwï̃ÄÄÄ́FøÔƯ> 4Xºt)÷ĐÈÈÈƯƯDsÙ}â7lØ@_†0Uïê›rîJkoÚ‡G00eÊñ­[¬³1C†1æ©!³R¥JÍ5ëüùó5kÖ¼páÂÉ“'6lØ¿ÿ§OŸ››ûøøôíÛ·té̉.\8uêTñâÅCBB=Ú¾}û ưxxx¨µ}êÖ­[­Zµ… FEEU«V-""âèÑ£E‹íÓ§O†-ó8UMD#FŒØ³gOëÖ­ûöí[¦L™£G^ºtiÊ”)ÜJpܸqcß¾}Gimm½y󿤤¤̀÷å#"ssóµk×4ÈÅÅ¥{÷¦gΜ î̃½;7đ©zWß”sWZ{#`€ơB’zÈ`•²¯ÖnÑBX„ụ́eÖ©„,ïÚƒÀóƒ.₫₫qtt́ÚµkpppóæÍ­¬¬*W®}ú„„„ÄÄÄä¼Y.~ptñgM#p#q±rơ*ëlôßÈ‘BŒyj†Â RÓ¦BŒ3óÙÚµBüå^n†îƠ«W»ví aˆ̃ºté̉®]»?~̀:}ƒÂ ̉̀™BŒk«µÅ¿o +íÛ·oذ!ë,´íÎ;½{÷æ¯ÚÛ°aCï̃½/\¸À:}ƒ«ªÁ µi#Ä/²ÎFŸ'Ä7²Î$i­xPÚ0\ÅI2ùÏÏÏÏÏÏuz#`¨4bƒ<ÁY;V®âXgyƒÂ VP G0TâÛUáüôü1y²¯_Ï:È3`Àj×â¨(ÖÙè¡%K„£ºz…#0̀V¨…#0WW!Æ-4mút!6¼«fô G0lƠ« ñ·îIjY°@ˆ‡g hÖqĂHơë§Ç̃̃tü8ë„̣J.—³Nô G0lnnB|âëlôÇœ9B,^Ệ[D%./¾ŸûßO»w§Ç'NPëÖ¬wU_ÈHÆÇJRf¹Mv@û0U ¯re!~ñ‚u6zbî\!3†u6  ¸–,?üEññ`̀:€oCá߇*(RDˆŸ|˜u6ú`₫|!/庮kW!₫÷_ÖÙè…·ô–ÅsÖ’…€¨bE!‹cΛ9Sˆ'Nd hFç5ëâă~Ôu:*Aá€ïC•+&IJÎF÷at G"ww!̃¿Ÿu6ºmÑ"!₫í7ÖÙ€¦ú(ÄçαÎFǽ¤—|\ ²N@%(ˆˆ¨lY!g›:Uˆú‰u6 i×”ă$¬û=}Ï:U¡p "|¨¤dI!¾wu6º óÔ £P8}µœñ=¬³ÑUâ«nÅK9‚>iÓFˆ7mbÎzJOùØ‚,X§ *_‰~>~dN:p@ˆ₫™u6?ħ®._Î:ƯtNñ±=Ù³N@ (¾8xPˆ1[ :u„øæMÖÙè&ñ<ơ-ºÅ:5 pø¢C!₫ăÖÙèƠ«…X¼”#è!¾z•u6:(¢ù؆lX§ "âuê ÖÙè˜Ñ£…ø×_Ygù ×’åÅY:ËÇ©3ëtÔƒÂ@߇*¨PAˆ¯\a®ÁơÔ ÓP8ˆˆ¯ ̃¼™u6º$ @ˆÅK9‚¾j̉Dˆoá$=uܧû|\‚J°N@=(¾fiÉ:4t¨/\È:ÈÏ‹t‘ÛQ;Öé¨ …#À×Ä߇âjDär!¾x1÷ừSƒ®Cáđ5OO!Ï¿BöÄ«@Ï:Đ–úơ…ø₫ưÜ÷cPċ̉¬ÓP G€LLMYg cÄ3•Ë–±Î´³ƠêºB•D-©%ëtr…#@&âïĂQ£Xg£̉̉Xg,T«&ÄgÏæ¾ĂyjĐ(2éÛWˆ×¬aÔ‰×JG™mhj×âèèÜ÷c ®’°Zº#9²N 7P8dÅØ˜u:C‘è/ûOŸ>=xđ 444&&F¡P°N ƠÈ‘B<>ël¤åđa!ọ̈b °V¡‚‹ÿ¢"ú—₫åăZT‹u:ybÂ:ŒÎ=»víÚ«W¯*•J®¥@-Z´3fL¥J•XgéÄ3’â‘Y0L£FÑ„ é±·7ươë„$ă =áăT‚u:y%­ÇéÓ§{{{_¹r…¯‰(%%åøñă;w̃¹s'ëÁđ,_.Äsç²ÎFB^¼b++ÖÙkâẹÅWMxúa"t„ Ç€€€   qK‘"Ed2§¥¥ựË/aaa¹é ׯâ9sXg#'Nq¯^¬³ippb¬ÓÄ;I'ù¸Ơc@^I¥püüùsÀ—eóÊ—/¿zơêk×®]ºtéÚµk~~~*T "…B±}ûvÖ™®§†,ˆÿ%ˆ³2dÏé9W¡*¬ÓĐ©¯^½úđá.\xëÖ­­[·633#"SSÓ-ZlƯºƠ‚ˆ._¾̀:S0<âE,`$ÄÄq‘"¬³ihÓFˆwíb4àzjĐ?R)Ë”)cmmMD...%Jd<}¸xñâƠ«W'"®|ĐªÉ“…xútÖÙ°wú´wëÆ:;;!₫ô‰u6p„đq#jÄ: JáHDM›6%¢¨¨¨ÏŸ?gx*%%åáÇDäææÆ:MC‡yjÈV‹£8>®DXô„„ ÇiÓ¦•-[6..ǹ˜1ÏŸ ç…¼zơj„ ¯^½²··)^W@kÄ‹8.YÂ:Æ¢¢„¸hQÖÙ€”tê$Ä8#óÔ —dâ…oØ9rdBBBhh(;;;ÛÚÚÆÅÅEFF¦¤¤Q½zơ¬2-û±fÍÖ‰g$—Ë#""Xg_‰._¾|ºør?‘d~j´/$„6M;u¢ƒsß• äƒ<—bÅ„À ƒ¾¥Œ„_JÊÓ/ ü°HÁ~×Khđ¿ÿ₫› ÅƯ»w3lÎ:GC‡yjÈY` uï{{ÓÆ¬b$âù¸•c€Æđƒj/â¸r%ël˜ÿ-¾€#¾^jÓ&ÖÙ°ƒyjĐWq1bë²7{¶P;GcDzNˆ‹…¸m[ÖÙ€T)‚ÀiíáăVÔu:#¡Âq¬A~è̀Sƒ*éûïÓăaĂÈߟuBZ—LÉ|lOö¬ÓĐ$LU¨L¼ˆăÚµ¬³aàÖ-!.S†u6 Uâ»P®[Ç:0O zŒñˆc=ˆ¨D‰~~~\üMîg­¢={ö́̃½ûÁƒ… ñ¼ùäÉ“mllrØ₫óçÏ[¶l9zôhtt´MơêƠGåääÄöăÆæÏ§ß~KG$;¹âÊ!nÑ‚u6 m… ôà̉Ÿ|ÜÚ³N@“·nƯ"¢̉¥Kóq~X¾|¹¿¿¿¹¹y½zơ?~¹uëV™)\¹rÅ̃̃¾iÓ¦oß¾=~üøÉ“'·lÙR¯nQ óÔ ºÀ@ê×/==~ÿuBZ”J©|lK¶¬ÓĐ0ưŸªˆˆ°³³;v́X@@ÀñăÇû÷ïăÆ%Ù/ă¼k×®+W®´oß₫äÉ“«V­Ú¶mÛ¦M›ˆhæ̀™¬÷Xß~pưzÖÙhƠƠ«BŒå g^^B¼z5ël´ óÔ ß8Î;—ˆ̀ÍÍùXăvï̃––6nÜ8₫ØÓ¦M;pàÀÑ£Gg̀˜a”Ơê´W®\!¢˜˜¤> 6¬R¥Ê­[·̃¼yS÷Ê0d‹ÑâÅéñ!äăĂ:!-Ïđ €äÀȈ̉̉X'ÁÂÚÂÇßÑw¬ÓĐ0Æ…cï̃½³Œ5(<<ÜÈÈÈƯƯo166nÖ¬ÙÁƒ¯\¹R·nỪ/)Uª½áï~@¤T*ß½{gddÄ—’óÔ ®À@<8=8‘–.eÖY‘Ũ;=ŸªV*•<(Z´h†aBggg"‰‰Ẹ́U:u255?₫… ’““Ÿ={6kÖ¬§OŸzzzZZZ²̃'`mÜ8!×SzM¼‚£³3ël@ $ÄË–±ÎF[*Se>Æ<5è%ÉŸ¥¤¤<|øđñăÇ …"Ë :tè zoIII …ÂÚÚ:C;wÏkñ˜¢˜\.ß¶mÛÀÈ7zyyM¯Æ’#¹\¡åرcZü!£§OŸj¬¯1cʯX‘õ=cëËwQQˆ̉Wß17O‹~¬‘n5yP@s4z\„“a£££Yï™6D”î­T'ºN4if¯ñĂÂ\»víX§ *•Jå–-[–.]úùóç6S«pLNN¦/çPYXXÑû÷ï³|U||üÂ… ]\\ªW¯²ÿ₫ ´nƯZ•÷5̀ŸK\ùü¸ C¡È—n%¦!¾xÑHƒ»lŸ.̉Ôqñ÷§aẲăuëÊ/\ÈzÇ´¨0Ö́?oü°°•ùk=ó‘ĐTơ_ưµ`Á‚œ«FuY[[Ëd²¤¤¤ í ôeÜ1³)S¦\¾|yÚ´iươ×ܹsW¯^}äÈssóñăÇGEE±₫œ@Fâ?₫`M¾ bÖÙ€î:Tˆ}}Yg“ÿF°¶+æ©A_I¨pܺu+ÛÛÛ—ÎZ}˜˜XYYeYŒ'"₫:k±W¯^>}ºR¥JƒDgèØÛÛ1"%%eß¾}¬?'ñú"ú~£øo¥ÚµYg a~äÇÇ}¨ëṭ…„¦ª?~LDÆÆÆ¾¾¾-[¶,\¸°Fºµ³³{đàA||¼øºîl;;»̀ÛÇÅÅ‘££c†ö *ÑëׯYN 1?²Î ázjȋߧѣÓăY³è×_Y'¤¨ẹ̈‹„F¹ÊL.—wîÜYSU#µlÙR¡Pœ={–oQ*•ÁÁÁ666®®®™·wtt466ŒŒT*•âvîü†J•*±₫œ@† âƯ»Yg“NŸâ¬~br2j”Ï›Ç:›ü4–Æ̣1æ©AI¨ptss#¢>h¶[OOO##£Ơ«Wsç5Q@@@lll= Hÿ£0111::»lÍ̀̀¬Y³f?^µjUÚ—åk###×®][°`AÖŸHĂºuB¬¿Ë€‹W¬ª^u6¶VñqꟇ$MB…ăđáĂ+T¨#>Ù1ḯíí'OƠ¥K—Ù³g8pụ̀å...>¢/ûàààvíÚ ûrùß¼yóJ•*µvíÚöíÛ?¾ÿ₫]»v}÷îƯ´iÓ*V¬Èúsé‰gA~Á<5äxÇ_~a ä ăsG¯N%²µµ?₫Î;Ë•+—åư׬Y£î» <¸xñâû÷ï?räH©R¥¼¼¼ÆÇ­È“%[[Û#Gøûû‡„„üûï¿666Í›7>|xu ¹€Ø A´iSz¼?uíÊ:!Í;qBˆƯÜXgºiüx0!==›~₫™uBù`Mâc̀Sƒ~“e8“OËr± ’ô—H”Ëå̉ỎĐDGGk~´´426N‹£ØXÖ{©a/^P©RéqåÊt÷®†ûÏ—ƒy–ÇE&b¦ß9ùEFÂ*Ió{ˆ 2Øïz MUèñˆx\ël4óÔ )âE,` äă©ê#Fä½f¼¼hûöôøđaêØ‘uBtø°7ǹ:ĐeS¦ĐÔ©éñôéôÓO¬̉¨é$ÜV¼”#€^b\8;6ï0(̃̃ôü9ë„4F<„KÂr°€„AÔa4,=èLUäA¡BBüâël4 óÔ YâE—,a ä–ä Ǩ¨¨íÛ·ÇÆÆÑ›7o¦M›Ö²eËnƯº­]»V³·±ĐŒ^½„X|²Û¿_ˆƯƯYgºoÆ !<™u63›fó±x)G}%¡[ÑŸ₫9õ<…BQ¿~}[[ÛÑ£G_ºt‰{êÎ;.\غu«L|ysÂc¼½éÉÖ i€xaʲeYg a¿°4åh‡tƒ„FïƯ»÷Ë/¿( îá7øª‘Ä:M€¯)"Äâ­è2̀SC~˜-ŒÍÑ*ŒÍè& 6là•lܸ±Í©S§¸ö5jụ̈Ë/… "¢¿₫ú‹u™të&Äâ[;ë¬={„¸ukÖÙ€¾˜3GˆơăÂÈy$œ¹¹„pæ& wï̃%¢5knܸÑÖÖö̀™3\ûøñă¿ÿ₫û-ZQdd$ë42ʉëtÓÇB̀/™Í¢Y|<‘&²N@$T8>}ú”ˆjÔ¨AD±±±wîÜ!"KKËúơëQé̉¥‰())‰u™-*ÄQQ¬³É+̀SC₫™.¬xH~Xñ@I¨pänứÙ3" 榭›7onllLDïß¿'¢¢âohéèÔIˆCBXg“'ü!Ä:°ÎôËüùB¬ë÷_O-^Ê@¿I¨ptpp ¢sçÎùùù­_¿klÙ²%=ỵäôéÓDdggÇ:M€¬ˆo£¦Ë³Ơ_.N#"25e €„‰¯§FÓX§ %*»téBD?~\±bEtt4,X°Y³foß¾m×®·²cÓ¦MY§ •jƠ„X—o{/.zwîd è£I“„çBè Ü âsss…BÁ­ÑcjjÚ§OÖid£m[!¾x‘u6¹´y³÷ël@-^,Ä>>¬³É­e´ŒÅCzOB €›˜˜üñÇ~~~¡¡¡Ÿ>}j̉¤É˜1cøgmmm׬YS¢D Öid#0̉cooºy“uBybiÉ: _C-¾¶@ïI¨p$¢‚ ;v́× |YZZîß¿_.—Ih| £2e„øÖ-ÖÙäÆ!BŒ9DÈ?cÇ̉Ê•éñ–-4`ë„@e*ÅV~óơí7 ,X¥JT Z´â+WXg£¶/פyz²Îô×B¬‹×’­¦Ơ|<“f²N@«$4âộåK"rwwwà§ütH` U¨{{ëbíÈ13cŒÔTÖ¨O|Oê_éWÖéh•„†ñzôèÁOxđ M›6UªT±±±‘Éd6[#₫} 5$—§Ç̃̃Ê:!µ™Hè·„ädÖ¨c ăă…´u:Ú&¡¯ˆ¿ÿ₫›“““¯è́ùa`Đœ…XwVs7Nˆ1O Úáă#\µg®ÇĐ ªĐ ±ÜE†_…k£€–±®̀Vo¢M|<&°N€ 8Đơ;̃p…;z{ÓÙ³¬ºøx֨ƛ„ w)-e*3¬û  «\\„8$„u6ß6y²‹—rÈo w¹Ü¿ŸºveĐ·¤Që“èTuDDÄñăÇwîÜ™ú₫ư{Ö¨£vm!bÍ7,Y"ĺ2cúA|B­ôÿím§í|Í:›œLŸ.Ä⥴£o_!>r„u69úDŸX§À„ ÇÛ·oo₫r¶‹±èïP~”qÇááá¬ÓPMơêBüơí×%eÁ!>œu6`xte¶zíâă¡4”u:̀H¨pô÷÷W*•FFF³fͺ|ù2ßneeµjƠ*SSS"Ú²e ë4T£+߇L™ ñó笳Éùđ±?ù³N€ wï̃%¢:xyy™™™‰ŸjÛ¶móæÍ‰è̃½{¬ÓP››Ÿ8Á:›¬¹» ±x)GmêƠKˆ}}Yg“ôu ’ ¡Â1..ˆÊ—/Ÿå³NNNDË:M•,(Ä/^°Î& ÁÁB|˜u6ÍŸ/Ä‹³Î ›xéïÿeM&oè Ié{@ûdJ¥’uébcc¿ûî»&£---8`ooÏ:ÓoËå:r‡bĂƯYù«R%zø0=‹£¢EYñ¢¨L~ 0;(#&Ç%.lmÓăéÁÖŸ‚È!:Ô™:s±ym£mÚÏ?,d°ßơúËÉÖÖvé̉¥E³ùfµ´´ôơơ•~Ơđ\[  ‚bÅ„˜ÿSK"ÄóÔ˜‡ô„ G"jĐ ÁÉ“'‡ æââR¸pa"277¯Zµª··÷?ÿüÓ¢E Ö ¨I|Ự¾}¹îFă-âß~c QÇB|îëlD^̉K>.D…X§À˜än9haa1~üøñăÇQBB‚……ëŒ̣ÆÁAXüĂ*R„uBDDS§ ñO?±Î€(0J•J½½éî]Ö Ñq:ÎÇßÓ÷¬Ó`OZ#<…Bñäɓ۷o?ỵD¡P°N 0[  ‚’%…X:+öb É8>xđ`ụ̀åÁÁÁ)))\KZ´h1~üxœ :©M!̃½›víÊ}W²b…Ï™Ă:€/Ú´Ë ûj}V̉S>¶ ̀€HlÄqçÎ]ºtùûï¿ùª‘ˆRRR?̃±cÇ   Ö äx,åÓ'ÖÙĐøñB<{6ël¾Úèüi:ÍÇƯ©;ët$AB…cxxø¯¿₫*˜.":L¡P̀=ûÊ•+¬ÓPŸÔ¾$ÉÁAˆõd 橲"¡Âqûöí©©©DT®\¹U«V]»ví̉¥Kׯ__³f 7I’’²uëVÖi¨O|½èöílsY³Fˆg̀`› @FB|íăd¢(mȆq6̉ ¡Âṇ̃åËDdff¶eË–¶mÛ™™‘©©i«V­¶mÛfnnND—.]b&@®ˆ(MKc˜È¨QB€jªWâ³gµưÈăÂq́ر¬?-̣̣ ÇƠ«µY8nØ Äø{ ¤ÏƠ•®^M££©|yí½ơUºÊÇåI‹o   0U  ]2“·=ZˆÅ7¦I“„X›³Ơ7I¸×¡Ù±₫$‡ñˆcaaa«W¯¾ÿ~|||vÛܹs‡uy°a œOœHK—jçm““Yï8€:~øúöMỎ̃ûç©ÏĐÖ€äHhÄ1,,¬ÿ₫/^|ûö­"{¬ÓÈ›Aƒ„xÙ2í¼ç=B,¾D@ʪUâÿ₫Ó̉›†Q;“Ö/ç< ¿ÿ₫»R©d€Ïô°Î@5Ú¿¶Z|·˜Ô€ơ EªˆHÿ‰íÙ³gǹ[Wè¡uëhèĐôxÚ4Z¸0¿ß0ûS?¤«~}!>vLïˆë©¾IB…£¹¹ùû÷ïí́́~ươW## …hØ!Báèë›ß…ă₫ưB

YZZ–(QB–Ơw‡bæ7Èår₫|Mˆèèẹ̀Ú\AXẫùöcxø0uê”÷íKÛ·³̃k)̃q©P¢£Óă7oÈÆ&¿̃HF¤’$ôÍH̉;(@ü]/¡sïß¿ïççÇÅññññ8Ÿ Ï0O º.0Z¶L}|hï̃|y—áăTƒơNH—„¦ªưưưß¼yĂ: m/âøË/ùô&/^1*]Ô¢…å×»`@Eq¼té4hĐ ]»vXôÜøñ4aBz<{6ưü³ÆßáÄ !îƠ‹ơ₫äVé̉Âà‰‰dn®ù·8AÂOK=ªÇz¤KB…£±±1YYYmذÁÄDB‰è(ñMb0O º+0Ú·O½½iÇ ÷ÿ‚„‘ùÊT™ơîH„¦ªëÔ©CD¥J•BƠ†Â×Wˆ,Đx÷Oq‘"¬w ·Úµâ;5ß?æ©T'¡Âq̀˜1666÷ïßÖxç{ö́ñôôtuumܸñôéÓß¾}ûܼ͗ysÔ¨QơêƠọ̣́ºxñ"ëOôΔ)B<}ºfû₫÷_!îÖơäxéïÏŸ5Üùa:̀Ç©1ë}4 í-Y²¤dÉ’oß¾2dHµjỚ́́²\gÍ5êö¼|ùrssózơê=~ü8(((22rëÖ­fffÙ½äÔ©ScÆŒIKK«^½º““Ó¹sçú÷ïïçç×B|6€„ázjĐ'Ô¥KźíM[·j¬ç8V:­HYï(€ÔIhG¹\®Êfê.›ѵk×âÅ‹ïƯ»·D‰D4₫ü­[·zyyÍÊfáå÷ïß·jƠ*%%eÆ Üú7úöíkiiyö́ÙõØÆ`×v’2鮂6>Íœ™/^L“&iªc­,™'̉=(†M²Ç%Ÿ₫Iw£nûi?Ÿ¦ÓîäÎzG³ ÙƒbÈ ö»^BSƠùd÷îƯiiiăÆ+ñeªcÚ´iVVVGMKKẸ̈%AAAñññÆ ăªF"ªQ£Fûöícccõ¼Éz‡@¿̀˜!Ä“'kª×s焘_@§åÓ̉ß|ƠHD̉¬$EBSƠ#FŒÈnĂĂĂŒŒÜƯƯùccăfÍ_óرc,?Pƒ÷ôéSÖ)doÀ€̣|á¸o_4_̃ܺ~½‘=ÛØ¤EG?f½‡Y“ôA1`̉>.Ây~yÿI!¢§å…­])4Đg~öA1íÄ‹B6ÉAAA«W¯~ö́÷°Q£F–––ƒ =zt–×Yç 99™ˆ̀3ƯgÀ‚ˆ̃¿Ÿù%>| ¢¼~ưÚ×××ƯƯưăÇ{÷î]³fÍØ±c:¤Ê¸£a0+qºrjỹóüî;!¾~ƯÈÁAº;®+ÅĐHö¸́ØA}ú¤Ç‹•÷óËSoÉ”̀Ç¥¨”d÷#ñôô^æ¯u¯èƠ?̉º8fáÂ…Ó§Oç«F^RR̉5kæ̣£2*³¶¶–ÉdIIIÚè˸cü­.\صkWkkë’%K5ª[·nOŸ>=|øđ·̃@}âEóøeH$¾‚ËÁơ®hNï̃B́ïŸ×̃|H¸·æ©T$¡ÂñöíÛ›7oæbîöƒ~”qÇááájơibbbee•yd1>>ˆJˆ—”ưÂÜÜÜÔÔỒ̀̀ĂĂCÜ̃ªU+"º'>w @SæÏâ¼]%vơªưO@,¨±®₫ ?ø¸u`½gºAB…£¿¿¿R©4225kÖåË—ùv++«U«Vq[¶lQ·[;;»¸¸8®Räq'ÇØesƠ@‰% (aZœ›¡NMMeư9ä×Sƒ~ÿ«3&÷ư(HÁÇŨëƯĐ*ï̃½KD:tđ̣̣ÊpaÛ¶m›7oN¹đkÙ²¥B¡8{ö,ߢT*ƒƒƒmll\]]³|‰‡‡G||üưû÷ÅW®\!¢Ê•+³₫œ@O‰q̀CÅwåW¨Àz§4­_?!₫ư÷Ü÷ƒûSä„ Ç¸¸8Ê₫ü_'''"U·[OOO##£Ơ«Wsç5Q@@@lll= (Àµ$&&FGGó—­uëÖˆfΜÉ_v}óæÍ 6XYYµnƯơçzJ¼J¨Oîú¸uKˆ›4a½GùCÍ‹$³¶™6óqWêÊzŸt†„ Gî¥,ÏbT*•aaaDTAư!{{ûÉ“'GEEué̉eö́Ù\¾|¹‹‹‹è»988¸]»vÆ ăV©Re„ ׯ_o×®Ưˆ#Ø»wïÏŸ?Ï;·X1̀h€ta øßöĉyíÍ’,Yï€.‘PáX½zu" 3fLHH×sæ̀™Q£Fq…cƠªUsÑóàÁƒ—,YR¾|ù#G¼yóÆËËkëÖ­™w:tèo¿ưVªT©óçÏ?~ü¸eË–ûöíkß¾=ë ôÚ¸qB¬₫é¼Dtñ¢êJ ÿâeËrÓĂÂǘ§P‹L©Á{ÅçMlĺwß}—Ăd´¥¥ǻííYgú {ăs)‹ÖUĐøI8JIQë¥ÄŸ‚[¿>…†²̃—oÑ™ƒb`t⸈g«sñ%&#áơJ’Ê—`tâ ƒư®—Đˆ£­­í̉¥K3Ügiiéëë+ưª@3Ô¿~óÔ`8Ä‹8N›–û~̀7’P„ G"jĐ ÁÉ“'‡ æââR¸pa"277¯Zµª··÷?ÿüÓ¢E Ö ä3ñ"₫©ÖK¿œßAD¤Ú­1tƠĐ¡B́ë«̃kGÑ(>Æ<5€º$4UYBBwo@Ưb°Ă×R¦K=ü$œ™eºéQv¢¢¨bÅô¸vm-„*]ºtP ‰®—\ÏVëÜ<5éÎA1(û]/­Ç t±jĐ˜ädƠ·Å<5ñ"?ÿœ›ŒÉ87/0lŒ Çwêcư‰ä3ñ"{ö¨ø¢Ó§…8›…íôÊ(a™~ưUƠW§ñ|Œyj€\0aûöơë×W÷%†92 $ €Ö¯O½½ÉÓ󛝸²t=Qơê¬ó°´‚̉@ÖéèIOUº¯ï±̀Sƒa/â¨ú #ä Gé8Pˆ÷ïÿææÇ ±›ëä´e¼0í¬̉iSi*Pëôtă©jL&«X±b­ZµjÔ¨Q¤HÖé0H›7§Ç̃̃ÔµkÛ¾|)ÄüàÙ"îïC¹¼#<€“Já¨T*œuBzJºWUQ§NB|înßơ&†é7a:FŒâÅ´˜çÓ|Öiè<̉&¾́åË0cZĐ&”€ ¦Đ>NÓY§ óOUÂÅ9³³â/ àăzj€̀&M¢%K̉ăÀÀ¯~L@SNNN¬?ÉkÓFX<,ŒÜÜ6ḿÖuz̉°x±P8úø·7­¤•ü³â¥ ×0U yYÍVsÄK=@âµ¾gÓlÖéè’'¾-̀͛Æ 0O 6v¬oƯÊ:}„Â@ˆnD½nĐ,¾5¬X!ă/­åcñR(tAVC‹… ±Î @«F̣ñ<Ç:=Â@T¨Àư4ưηa 3ñ" q(tD“&D´Fñ ^^¬S5kˆˆÈG¸Ÿn3 AŒ ÇääääääÔÔT"R(ÑÑÑÑÑѬ?Iúz€Ñôä `.¢E¬³ĐŒ¿|5jT«V­íÛ·ÑË—/Ûµk×®];ÖŸ €$ÉåuéÿóÔÙÁ̉ßù‡ñàŸ>}"¢“'O:::~øđk¼páB/iذ!ÛœX¹LuøxP£"9댤¨ñúÍüVÆ—êS]Ö èÆ…c±bÅ^½zué̉¥K—„¡”æđ’ˆˆ¶9H‚·7=Ë: )̣&aÈQQ/””¬Đ#Œ§ª›7oÎúĐ Ó¦ ñ:J!!¬3()Ä`€a<â8uêT“sçÎÅÆÆ*•Êääd"*\¸0ë@r|}…xEGSụ̀¬ó–?èáÁ‘DäíMß}Ç:-}Á¸p,R¤Èœ9s¸øÙ³gDtơêUÖ €.đö¦₫a€´ˆç©iÔj"e€a\8™¶jƠuR4k– K9:Å:/ÉùH379B:°Î @/H¨p,Z´èô•[‰ˆ̉̉̉âââ-jll̀:5Ææ‰î—6²Z0Ưụ́àéS*S†uvR±›vóñàÔ!¿Ä̃̃ốëäô‚„ GNbb¢¿¿ÿ¿ÿ₫ûøñăOŸ>(PÀÑѱY³f#FŒ°°°`€Rƒé±·7;Æ:!©ÏSo0YÇÏŸ³Î @_HëîááámÚ´ ¸ÿ>·ÄcJJJddä† Úµkwụ̀eÖ 0đË/B¼lQưúÂăăÇYg !èƒø¡§§Ÿ<É:9½ ¡Â1!!ạäɱٜÆüúơëI“&%&&²N@ÛfÏâñă‰ˆH.ZúûƠ+Ö HÂ>ÚÇǃh}}ƒ%ÜN@#$T8<₫œˆlll&L˜đ×_;wnß¾}“&M²¶¶&¢gÏ­_¿>ï đ}‰x:‰È̉RxöÉÖùè ăxăÆ "233Ûºu«³³3×hkk[µjUwwwOOÏääd¬Ô†fÁ!–rl̉Dh=xu’đ†̃đ±Ñ—a‘®]iÿ₫ôÆÿ%wwÖYè8 8̃¿ŸˆÜÜÜøª‘çääÔ¨Q#ÂưÁđLŸ.ÄS¦ˆ/ưưö-ë4;L‡ùØ‹¼ø£ó%¡Â‘£P(²lOKK#",Í߇"™ç©9Å Û<|È:KƯ'¡ÂQ.—QxxøÍ›73}ú4pàÀ•+W^¾|ùÉ“'—/_^¹rå€>~üÈo` &Oâ32=-^ú;!u²̀œ |ü=}ŸáYŒÎhL©T²Î!]rrr—.]d囃ƒĂÁƒÍ̀̀Xgú r¹çbJMtttyñI:B&â,~R§ví̉ăï¿§;Yç«=(zOKY*C1\ü>XPÆ»E|ăGỊtñ è=ƒư®—Đˆ£™™Ù²eËJ—.å³öööË–-“~Ơ )+W ±x)GAÛ¶B¼kë|˜á«F"Ê\5Q›6BÎ:]]&¡Â‘ˆªW¯~äÈ‘1cÆÔ¨Q£H‘"DT¤H‘5jŒ=úèÑ£5jÔ` €öŒ'Äsæd³‘₫̀:eNÓi>îNƯ³Ü³Ơ"¡u9¦¦¦#G9r$%$$à₫Ô9Y¿ºtI½½iëVÖ h[v×S‹98ñ¬3Đẻq̀U#,ñư©ÅK9fÔ¹³oÛÆ:k¢(mÈ&»Í<<„8,Œủ:K̉…#€ÁŸÔ8~›ˆæ tñ´€<¡>.I%sØ̣矅xÄÖyè,:N|Y Î̃#§¾F×rØR|³ÁË—Yç  ³P8HøD~ñRYë.º`ăFÖ¹hU ë¡Ø‘]Î7n,Ä·o³N@7¡p!^´H…àl`0Hé"·¥¶ßÜ×Vä GƯ'₫>6Œu6Z¢ÊơÔb•+ qh(ë́t“D LjˆˆăÇïܹ3!!!55ơưû÷¬3Đ’-[„X¼”cN¾ƯcmƯ:Ö{ %·è—¡2ª¼ÄÍMˆ##YÜ:AAA«W¯~ö́÷°Q£F–––ƒ =z´L|ß(}$A[¾\å—*DŸ>±Î@{®Đ>nA-T|U` ñ·’đö¦à`Ö» k¤5â¸páÂéÓ§óU#/))iÍ5sçÎe @¾KMÍƠËijƠ£G³̃ €|§î<5§zu!>s†ơ>è ·oß̃¼y3óíü(ă;Âq“QĐk₫)Äê-5çå%Ä«W³̃€|w•®̣qy*¯ú kƠâGX‘Páèïï¯T*ŒŒfÍuY´Ê–••ƠªU«LMM‰h‹øü/½#§^³FÍIèÇ _Ư¤›|Ü”ªơZ\[ ú¦¹{÷.uèĐÁËËË̀̀LüTÛ¶m›7oND÷îƯc&@>JNÎĂ‹Å߇'²̃€|”»yjN:BüÏ?¬÷@×H¨pŒ‹‹#¢̣å³qprr"¢ØØXÖiä—={„X¼”£ª âeËXï @> #ánÓÎä¬îË]\„ø¿ÿXï €N‘Pá(—ˉ(˳•JeXXU¨PuùE>Ï]ˆqœ6ơä j=uç©9 DƠæÑ£¬÷@§H¨p:t¨­­-?~üÇä́ăăó÷ß‘¥¥åơ.4́Ù³ÇÓÓÓƠƠµqăÆÓ§Oûö­ê¯}ö́Y:u&ûÁ¹·¿˜Û^† b__Öû/B(„]È%w8‹æ·_¿f½KºCB…£­­í̉¥K‹-å³–––¾¾¾ööö¹èyụ̀å3gÎ|øđa½zơ,,,‚‚‚† ’¬ÚeJ¥rêÔ© ¬?ĐsâyêÀÜŒ¡„(âă:T'×ư¬_/ĸ¶@u*‰¨Aƒ'O6l˜‹‹KáÂ…‰ÈÜܼjƠª̃̃̃ÿüóO‹ª̃@,""" ÀÎÎîØ±cÇïß¿ÿ7–,Y¢ÊË7õ̀Í’䫸8!-cª>ñ"³f±̃- ËËơÔbÍ ñÿ₫Çz¯t‡´ G"²°°?~ü_ưuơêƠË—/_¹reß¾}“'O¶´´̀]‡»wïNKK7n\‰%¸–iÓ¦YYY=z4---ç×FFF._¾¼råʬ?Đs‡ qß¾yëkäH!7ơhØi:Íǵ¨V^ºrtâwïXï€\áȉˆˆ8~üø¡C‡RSSß¿Ÿë®ÂĂĂŒŒÜƯƯùccăfÍÅÅÅ]¹r%‡¦¦¦N™2ÅÆÆf.2€|†yjUÄP × yè‰+ää Ç   .]ºŒ3fö́Ùõ¼IHHpww_µj•R©T·7¥RùàÁƒ¢E‹f8ủÙÙ™ˆbbbrxíï¿ÿ~÷îƯ äz°@E/^±©i»/☫<¤É•\ù8/óÔœ–-…8(ˆơ¾èÖ |eáÂ…›6mÊÜ””´fÍ7õ̀™3G­“’’ …µµu†v+++"zóæMv/¼víÚúơë½¼¼5jtûömuw„[“ŔرcÚù !KOŸ>eB¶Î5#*ÉÅe˦FGÇä­?¢®]ËO˜Ÿ>Íz³&åƒbȤ|\âÊ çÛFÛFS^ÿm—W(̉ă;w™™©=<¡R>(¢]»v¬S ·oß̃¼y3+¾ü4Ëd2.رcGÇëƠ«§zŸÜ¥ÓæææÚ-,,ˆ(»đäää)S¦888L̀í}Û"""}­́nJÄœè4 ºuˤH ç)Ù—xn†LÇå #ó•©²F’âlî”[âEU[î@²̣cÓ¥‹oƯÊz?$OBÇT¯^ưêƠ«¡¡¡cÆŒéƠ«×óèÑ£]»vq…cƠªUƠíÖÓÓÓßßơêƠÍ›7箉 ˆơöö.P ·Mbbâ«W¯ (P¦L™&Mp•"ïöíÛ!!!uëÖ]¼x1ë ôʹsBܱ£¦{Ÿ1ƒfÎL'O¦I“Xï.@îí£}|́NîíÜÚ €¨JB…ăĐ¡C9{üøñăÇsƒæ7°´´1b„ºƯÚÛÛO<Ù××·K—.M›6}üøqhh¨‹‹‹¿Mppđøñăœœ:Äúc‚yjU| |́@ï?0zöL½½ñĂ MUÛÚÚ.]º´h6Óu–––¾¾¾ööö¹èyđàÁK–,)_¾ü‘#G̃¼yăååµuëÖ̀‹;h™øZ¯’%óá fÏâU«Xï.@.åß<5§G!̃°ỡH›,·cÉW ëׯ?{öltttRR’¹¹y¹rå5j4tèP]¹ƒ‹\.Ç:R-µUШ~ưô¸Mú2È®i_–A%"’Ø» $‹Œ„ÆJÊ—Æ”˜øå-¤ơƒB$Ƀû]/¡©j……ÅøñăÇOD ÜY‰úóÔªøDŸø¸$åÇÈ<Q` ơé“N~~¬w@ª$4U½̣ ₫̉¨AƯ¼)Ä?kë ñ"ø2”ßóÔœ̃½…ØßŸơ>H˜„ Ç   µk×®]»6‡[H臫W…ØĂ#?ßi₫|!VÿÚ2æ¶Óv>îH_}@P° ë]Đ*{|9?ù‰ølúóÔªH£4>.J]é4#ñOâØ±¬÷@ª$T85ª[·nDäïïÿêƠ+Öéä£+W„XưUíƠ$^ÁU*èí̀Ssúơb,B ]3f̀"*Y²äƒÚ´iS¥J™øP""Z³f ëḶäöm!₫z±ùü±x±pçÜU tÈ&ÚÄÇƯHƒwsÏL&ÅKª$EB…ăßÿÍÇÉÉÉWÄc2zóÔê*BE´đ.ôăéñ¤I¸U'@$4U ` BC…X.×Ê[ÏØÚ²…ơ ’a4Œó{#ºU-]Êzÿ$IB#¹¸ €Î¹_ˆùÀóƯ´reźíM°₫¾m­ăă^Ô‹u:@$©Âq,.c §^¿E©©¬?ơ¢BZ{/??><=₫é'Z°€ơÎH ¦ª´ếY!®^]‹o,ÑçG¤ª3uæcí̀Ss† Óă´p!ëO@z$4â¸Rµ/³%JÈạ̊jƠªÄj­ k¢£…Ø̀L»ï½f ­]›OŸuê@âÑ!>ö"/Öé@: kùo5899-[¶̀ÙÙ™uÖjÏS‡„°Ë#)‰ơ' *#­ÏŒ­ZEcƤÇ?ÿL¿üÂú#]ªŒŒ́ׯ_BBëDÔpê”×®­ơ·×­{÷²₫0²5&đ±6ç©9£G ñ¯¿²₫,$FB…ă!CÚ·oÏÅÅûî»ï† Ö³gÏ2eÊpơë×÷ññéÚµkñâʼnèƯ»w[°°è§O…¸Z5ˆ/ÆÁ2à aËi9¢A¬Ó„ Ç~ưúƯºu‹ˆ<==O:µhÑ¢ñăÇÏŸ?ÿĉ̃̃̃DtóæÍÎ;ûúú8q¢AƒDÂr¶@=>>B̀~Ưï÷ïYg ]âE1è &¡ÂqÅ111%J”øå—_LMMùvccăI“&988$%%­^½ˆ ./å¨M„©rúùgÖŸ€”H¨p¼pá•.]ÚÈ(cV2™̀̃̃ˆ®_¿Îµ)R„ˆ̃¾}Ë:k•¼z%Ä,¯éub¶$i-âă!4„u:𠉉‰DtëÖ­;wîdx***êÆD¤ürÿùcÇw²#€ôIå₫Ô&¢…bcÙå uâE± #OB…c½zơˆ(%%¥ÿ₫+V¬¸té̉“'O®_¿Đ·oßääd"ªU«Í;wé̉¥DäààÀ:k•<(ÄM›2M凄øèQ¦©d4‹fññjZÍ0“©Â„9ưôĂD¤EBë8N™2ạ̊åËoß¾ưđჟŸŸŸŸ_Æ\MLú÷ïODW¯^åZºuëÆ:k€oŸRQ¾<ëléÏ?Ócoo‰ %óh¤‘¬Ó€Œ$4âX®\9??¿%Jdùlæ̀™ĂJrêÔ©Ó¡CÖY|›Tæ©9â[Ö<{Æ:é_O½lël¤AB…#¹ºº₫ư÷ß?ưôS­Zµ¬¬¬ˆ¨P¡B+V́ӧω'<==¹ÍªW¯>jÔ¨7⮃ ₫úKˆ[´` ớ)ÄÿÍ:€t¿p“ñR¬̀œ)Ä'²Î@düå&”`nn.“ÉX'¢¹\Á: øJtttyF“ĉ‰da‘—)C11¬? "zÿ¬­ÓăråèÑ#&Y0<(†ÇEFÂo{%Iâ»IüưĂđÛ?,d°ßởqäEDD?~üĐ¡C‰‰‰©©©ï±X1è,iÍSs¬¬„øñcÖÙH—xÇßg €H®p ̣đđè̉¥Ë˜1cfÏưæÍ›„„ww÷U«VIyp ;;w qÛ¶¬³á}÷³Î€Đ>ö%_Ö餛;WˆÇŒa €H«p\¸páôéÓŸe:a?))iÍ5sÅ?Áºàóg!Îæº/FăŸâ›!02¦óñÂ:È„ ÇÛ·oõ¼™‹ùv₫Ç;v„‡‡³N@ Rœ§æØÚ qd$ël¤kÚ4!ö÷g k*ưưư•J¥‘‘ѬY³._¾̀·[YY­Zµ»{ơ–-[X§  †mÛ„¸sgÖÙdĐ¾½_¸À:0hKh ‹—r”‚Â: Î:Ö$T8̃½{—ˆ:tèàååe&^j¨mÛ¶Í›7'¢{÷î±N 7llXgî[ ’1™&óñ Á:È–„ Ǹ¸8"ÊnÅ'''"ÅƯuAwÈåB,­yj½½gºA<đÄ‹8È:¦$T8Êår"Ệ,F¥RFD*T`&€ªîßâîƯYg“¥R¥„ø̉%ÖÙ€ZI+ù¸IñF²K„‰t S`à$T8V¯^ˆBCCÇŒÂ5ÆÄÄœ9sfÔ¨Q\áXµjUÖi¨_\rħ6b¶Găøø/ú+÷@₫“Pá8tèP[[[":~üø?₫È5<ØÇÇçï¿ÿ&"KKË#F°N@%â“èׯgMvÊ•âë×Yg ]âE·ne ;*mmm—.]Z´hÑ,Ÿµ´´ôơơµŸ• aâe;z÷fM7bÔ uki-‹—r”•Ât:FçÁ I¨p$¢ œ {Ç“Ÿ_z¼s§´g̣´F3@Ơ:ê÷ß…¸_?ÖÙ|S£FB|÷.ëlÀ€¬'áü_ñR̉´V˜TÇè<. 8&''_¾|ùƯ_¿æÆmmmkÔ¨Q»vmsssÖÙ䯗ûeJ[` ñëx{Ó¹s¬C1„†đñ"ZÄ:5$&²Î€IŸ?̃±c‡¿¿ÿ›7o2?kffÖµk×±cÇÚHñæ‰× –ú<5§J!>u6̉ơă´aCzD=z°N@ëØOU_»v­uëÖ¿ưö[–U#%''ïØ±£C‡×®]c,À·-[&ă³ÎFEơê ñƒ¬³ƒ°…„¥´ÅK9J®%`\8¾yóÆÇÇçÅ‹|Ḱíí«V­joo_ @ñ–C† yûö-Û„ô¾Aë¼Iø—¶œ–³NGmï̃±Î€Æ…ă¶mÛâăă¹¸uëÖÛ¶m»yóæéÓ§÷íÛwúôé[·nưùçŸmÛ¶å6xÿ₫ưV¬» ̉6m‹—r”º5„88˜u6`R)•u ¹Ñ¿¿<È:­c\8̣·́Ñ£ÇêƠ«ƯÜÜd__MP§NU«VơêƠ+Ăö̉äë+ÄC‡²ÎF-5k ñăǬ³=÷'ưÉÇ⥥£ó`àO<á‚Ñ£Gç°Ùرc¹à1¾Ị̈ ¾A‹ÄóÔ«i5ëtÔ :…^½b €Ö1.?|ø@DE‹-UªT›ÙÚÚ/^œˆØ& ƒY³„X¼”£n¨[Wˆÿ₫›u6 ç’)™u ¹'^úûØ1ÖÙhăÂQ¡P‘™™Ù7·äî@Èm Móæ ñ¨Q¬³É~5G"zöŒu6 ·öĐ>ö!Öé¨ £ó`ÈØ/ÇRïCĐ ñ„| ×S‹‰ÿº}›u6Z OV­bñRºM<·s'ël@OÄP ¡"¬ÓÑ ñ™—/³Î ÿ¡pÈ“±c…xî\ÖÙhP‰Bœ’Â:Đy§é4w£n¬Óь΃¡AáYÁ÷!h”₫ÍSs…øÚ5ÖÙä?¹çç'Ä?ưÄ:ͯJ·u+ël@çEQ¥¢¬ÓÑ$ñªù7n°Î Ÿ¡pȽ#„ø·ßXg£q66¬3=qÎñq'êÄ: Ăè< |‚†èë<5G|#‹đpÖÙä3¹$.«ÄK9êîƯ…xĂÖÙ€»G÷øǾX§£y  ñ]Ư¾!À7 pÈ%!^¼˜u6ùÄ‚u óÂ(ŒÛR[Öéä ŒÎƒá@áÙÎ:ĐIú=OÍ©ZUˆÏŸg @~2”ÂqÏ=®®®7>}úÛ·os̃>99yóæÍ:uªU«VÓ¦MüñÇsçΩöV`¶lbñRúæûï…ØßŸu6 “n̉M>.CeX§“_êÖâXgo ¢p\¾|ù̀™3>|X¯^= ‹   !C†$''g·}jjêÀ,XđêƠ«† VªTéâÅ‹ƒ^³f ë]©ÏF­XÁ:›|U° ë @‡]¥«|Ü‚Z°N'a¶ „₫vvvÇ 8~üxÿ₫ưoܸ±dÉ’́^²{÷îk×®Ơ©S'88ØÏÏoÓ¦Mûöí³¶¶^³fÍ]œö DD”Ê:­Ă:Đ1†0OÍ©YSˆƒƒYgoô¿pܽ{wZZÚ¸qăJ|¹…Ú´iÓ¬¬¬=–––åK;FD3f̀033ăZœœœ† ¦P(0a DôçŸB,^ÊQ?ơë'Ä¿ÿÎ:Đ1Wè —§̣¬ÓÉ_âÚñÉÖÙäư/ĂĂĂŒŒÜƯƯùccăfÍÅÅÅ]¹r%Ë—DGG›››»¸¸ˆœœˆ(&&†ơ{ây(ƒ8A&cè¤[t‹›PÖéä;̀Vƒ!ĐóÂQ©T>xđ hÑ¢E‹~u‡+gggʾ \·nƯÎ;34̃¾}›ˆXï°—ưù±zJü}(¾ G IX̃P¿ç©9â“'Yg?LX'¿’’’ …µµu†v+++"zóæM–¯ª*^YˆˆBCC *ÔµkWŨW.—ghᦿ•§OŸjª«£G͉̉O{¨]ûctôsÖ;—ÿ<<„)ÆË—£££5̉« hKBù>.]04ó/GÊ vLJJ¡¿xñI‰ t‹æÚµkÇ:©Đó‘»tÚÜÜƠ7cư÷ßÔ¨QzüË/eÖXỊ̈JVæ¯ờ#DBϧª­­­e2YRRR†ö„„ú2‹/vîÜy₫üù¶¶¶6lèĐ¡ëöTøsC‰qœ6u6  çzj1ñ½a @>ĐóÂÑÄÄÄÊÊ*óÈb||<ñ×Ygöùóçùóç0àÙ³g£G>zôh#₫¯H0`ñÀ¬³Ñ¦¡C…Ø×—u6 B(„«Q5ÖéhO¥JBË:MÓó‘ˆ́́́âââ¸J‘Ǥegg—åK̉̉̉&Nœ¸uëÖ–-[8qbÔ¨Qüº<`àÄWJÊ €Úħ3Ö¦Ú¬ÓÑ*\[ úMÿ Ç–-[*³gỊ̈-J¥288ØÆÆÆƠƠ5Ë—lÛ¶íĉ?üđĂ5kr•$?06f–‰qœ5‹u6 i†9OÍĩ\ˆÅsúAÿ GOOO##£Ơ«Wsç5Q@@@lll= (Àµ$&&FGGs—­)•ÊíÛ·)RdêÔ©¬siŸ±ôì³Ñ¾Q£„x̃<ÖÙ€¤¢S|́J®yèI'•+'ÄzV4è/=¿ªˆ́íí'ÓëëÛ¥K—¦M›>~ü844ÔÅÅÅÇLJß&88xüøñNNN‡zưúơ“'Ò̀̀úö훹·nƯºyyy±̃'`óÔªxJÂÚ1uv#/0Z·N½½iÏÖ h₫D4xđàâÅ‹ïß¿ÿÈ‘#¥J•̣̣̣7n·"Ofܸcrṛ­[·2?‹Kd ÙsÑzÖë²e4aBzüË/ôóϬ)2äyjN«VB¼w/ël4J¦T*Yç oär9Öq”èèè<®‚ṿ$µi“{z̉îƯ¬w‰ñíóöÛ#ị̈C̃‹Œ„$J2Đ¯˜̉¥éÙ³ô81‘ ÎSoøa‘ ƒư®×ÿs4óÔªxI/ùXNºB2áÚjĐ_(Ṭä‰[Z²Î†!ñ" ²Î$óÔœöí…xÇÖÙh G€oû÷_!VívåúkÊ!₫é'ÖÙ€ä¢C|Ü„°N‡¥âÅ…8%…u6‚ÂàÛ0O  ·ô–+PÖé0†ÙjĐK(¾íáC!.VŒu6̀‰q\º”u6 !âyêơ´u:Œué"Ä[·²Î@CP8|Ă¹sBܱ#ël¤`Æ !4‰u6 !Ñ_|Ü‚Z°N‡=kkÖh G€oÀ<5€*(ËPÖéHf«Aÿ pø†{÷„¸dIÖÙH„xéïU«Xg’€ë©3ëÑCˆ7l` €& pÈIX˜ó €Í+ÄcDzÎ$aíâă¶Ô–u:RanÎ:Bá̀S¨â3}æc;²c„ˆoŒÁ:€>¬³f6̉F>îNƯY§ù…#@Öp=5€º,È‚u %₫‚Û-NCáµĐP!®\™u6’5fŒăv¼i ăc̀SgçÇ…7x†Â ‘‘B́æÆ:)[¹RˆqK5ƒ´Öññ÷ô=ët ¡pÈæ©s#%…uÀR!*Ä:I/â(^@· pÈ™3B\½:ël$nøp!̃±ƒu6 U£i4c:gĂ„)}Z¸u6¹… £G„¸V-ÖÙHßÚµBŒk« ̀jZÍÇ^äÅ:Èw(2ÂDƒX§Ú€Âà+˜§Î«wïXg ]âEçÍc €úP8|åèQ!nĐ€u6:¤!₫ßÿXgùnMăc̣gΘ0AˆgÍb €úP8^¿b''ÖÙèñđ,®­6¾äËÇCi(ët@KP80O{ ñ«W¬³® „Ø×7÷ư0Â@ bmÖŒu6:§wo!>vŒu6f‘0Éú;ưÎ:3mZÖ1€N@áîư{!vtd.µƠc —uŒ¢Q¬ÓíAá®Z5!ÆBSX§Ú†ÂóÔ%.½ïßg €tM*ÄëÖ±Î@5(hëV!O´B.‰'ûCCYg³”–̣±x)GÈ… …xØ0ÖÙ¨…#€@|iäf«ơÔ$ÄÇ3hët€`è0O­yânßf €tM˜ Ä7²Î@(ÁĐmØ Ä=z°ÎFoˆ—P¿|™u6 â%ÅK9B^,&ÿ1:º…#@:ñ ó ¯0[­wÆ̉X>CsX§£‡”JÖ¨…#´áĂ…óÔäè(Ä×®±Î@ºF‹îÚ¸};ël¾…#4!îƯ›u6z¦Y3!¾qƒu6'~äÇÇ?ÑO¬ÓÑ+«DwmÄè₫~c̃úô‰u߂ ×Xá”-̀Sç''!g €t *Ä»v±Î G(Áp‰gˆúơc^jØPˆï̃e äR W‰—rMŸ3ƒÑy8$“±Î@_a¶Z/ø/¦Å¬ÓÑs ¬3È G0P“Dă&˜§Î/U« ñù󬳮Áƒ…xß>ÖÙd…#(ñº»â_Ù auë ñƒ¬³µm¡-|,^Ê4 £ó +P8@~Â÷¡ó&ᨭ ¬ÓÑ[âf̃¼a @öP8‚!êÜYˆÅ§¥ƒæƠ¬)ÄÁÁ¬³µ¥R*ë …——ûùå¾€|… ѡCB,^̣…™™?~̀:PĂŸô'W£j¬ÓÑskÖñܹ¬³È GÈggÎ1f«uxú&Ưd³´â—/Yg `p~₫YˆÅK9B~_ó÷߬³5$S2ë Ë÷ß ññă¬³­¼(NIDATÈ G08¿₫*Ä£G³ÎÆ@ˆ×åy₫œu6 ’=´‡ÅK9B₫Áµd }( ÿáûP‰ç©(€u:ÁÂBˆŸ>e @VP8‚a7—r„ü%¾÷à‘#¬³•ÄS<ë Q÷îB|êël2Aá†E|‚ă„ ¬³1(NNBË:ø†t€̉@ÖéŒÎƒÄ¡p­À÷¡NÏSnÊ©=66BÍ:€LP8‚Y¸0ë´¡Y3!>p ÷ư€VÄ’0*lLƬÓ1,â;œ=Ë:€¯¡p̣ÓOBîE½X§c Ä£ó>X|¤…#h‘èûĐvÚ4ÖÙ@¦Ù ÇóÔ¬”.-Ä·n±Î@…c¶ö́ÙăéééêêÚ¸qăéÓ§¿}û–uF{›7[̣±x)GжöíùĐâàAÖÙ@™<ăă"T„u:†K|fÇ­[Y§…cÖ–/_>sæ̀‡Ö«WÏÂÂ"((hÈ!ɘYÓY¿üRŒçÎe+^\ˆSRXg_ù—₫åă®Ô•u:M<[ưÓOÅs߀F¡p̀BDDD@@€Ư±cÇ?̃¿ÿ7n,Y²„ujº×VK®§–ñêU·ocĤ…cvï̃––6nܸ_E˜6m••ƠÑ£GÓ̉̉Xgjó÷bñRÀF—.B¼u+ëlà+é!£byè 4@¼j₫Í›¬³ ""Ö HQxx¸‘‘‘»»;ßbllܬY³ƒ^¹r¥nƯº9¿üѬ2̣34>·(ơ^.nùPàM‘”¢_[&ÄñiUc_qx][Ụ̈ÙèSÁ´B¹î0ËÆ4J3úú¯‹'%/–}Q?×&(¬øê¬©gEoÙ¿©–ëßziưÉNỤ̈Ê"ªDBqËư‚D!̉„ˆ^&₫Ø„PHÊØaEU ¯^₫‚^”¤’6Ẹ̈µY6̃¢[Ơ諌§xK²̀u‡éb}úê(H‘ù̃ªw˜eăgú\¾ä¸L—ëP\wø–̃ÚĐ—›©m+HŸ?ß«L•ï…|ơsRæQ“§;̀ªñ?³7¥“¿ú zR8¶l’­*¯Í²1̣̉¥SüWÿ–b ÆÛ~¶̀u‡×lŸÖ-#nI6úd–é‡TơÏ—~Ô迌™]°ÜđY¹\¼ËKËdª‘w¼á@+¿ü¬\¿N5kf|›j̉D¥ÆØX²ưú¸DF~uïru;|ü˜Ê}½ƒÏ‰/ØW»Ă»w©J•¯Z̃½#këÜwxù2Ơùú‡%%… P·ĂÀvÎô·tûĐ¹́uñ†© ™‰±RÜ₫Ä®^Ù—û{T¦‰ăSUß'X™§[n?³q±›ëŸ¿5-eóQÜưÚ¼|ñÄ\wøđe‘vÄ-¯̃*aư)×̃ø¯X̉qâ–„dc 3…*¯-óh$™R©̀{/úD©Tº¸¸ØØØœ;wNܰté̉… vëÖ-çd$c½ỵ¼•|Á: ’¾£¥Ë0 (LUg”””¤P(¬3ư­ieeEDõ¼a @¾CƠ( ˃´ p̀ˆ»tÚÜÜ>>¬S`…cÖ\¼xñưû÷9r¤T©R^^^ăÆăVä0L(³Ơ¹sçÎ;³Î@*p#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#¨…#„víÚ±N2ÂA‘& ÂAé@á*Aá*Aá*Aá*Aá*‘)•JÖ9è¹\Î:È_¬S`…#¨SƠ               ³gÏOOOWWׯOŸ>ưíÛ·¬32,ÉÉÉ›7oîÔ©S­Zµ6múă?;w.óf8L¬<{ö¬N:“'OÎüöƯ¼ysÔ¨QơêƠọ̣́ºxñbæmp\´éóçÏëׯï̃½»««k‹-Æ™y3-ˆ’Ëåׯ_Ị̈YU~&ă9sæ°ÎA,_¾|Ñ¢E ơêƠKNN¾páBXXXçÎ (À:5ƒÚ¿ÿ½{÷* 777KK˰°°}ûö¹¹¹ñ›á0±¢T*G-—ËÛ´i#~ EûN:åííU¡BGGǰ°°   —̣åËóÛà¸h“B¡èß¿PPPêƠ«W @3gÎ́ÚµËÍÍ­té̉üf8(Ú±jƠª›7ozzz–,Y2ĂSªư?LJȳ{÷îU®\¹iÓ¦/_¾äZæÍ›ḉ́üË/¿°NÍPüñÇÎÎÎ}úôIJJâZîß¿ïææV¥J•;wîp-8L mܸÑÙÙÙÙÙỷ¤Iâví{÷î]ƯºukÖ¬yé̉%®åúơëƠªUkÔ¨‘B¡àZp\´Œû 6v́Ø””®åüùóUªTiÓ¦ ¿ J~{ÿ₫}xxøÏ?ÿ̀ư²ºvíZ† T9†p˜0U­»wïNKK7n\‰%¸–iÓ¦YYY=z4--uváØ±cD4cÆ 333®ÅÉÉiذa …‚Ÿ°Æab%22rụ̀å•+WÎüöÅÇÇ6¬N:\K5Ú·o{óæM®ÇEË®\¹BD 011áZ6lX¥J•G½yó†kÁAÉo;wîÛ·ïÎ;³Û@•C`‡ …£„‡‡¹»»ó-ÆÆÆÍ5‹‹‹ă~@~‹677wqq7:99QLL ÷‡‰‰ÔÔÔ)S¦ØØØL›6-ó³8(Úwæ̀™LÖµkWqă¢E‹"""jÖ¬É=ÄqѲR¥J_#‘R©|÷î‘‘_Jâ ä·ùóç¯]»víÚµ5ÊrU!&y¥T*₫üáÇJ•*Í™3gÇ|»ƒƒĂ+ªU«F8.,Èạ̊mÛ¶ 8pàÀ|£——×ôéÓ¹…9U&Œ8æ÷—º¹¹y†v "zÿ₫=ë B¡Øºu«··wRR̉Â… mmm ‡‰…äää)S¦888Lœ81» E»>|ø@D<8r䈯¯ïÅ‹ƒƒƒGưßÿ;–;"8.Ú¿páÂÄÄD—̃½{·nƯÚ̀̀lÿ₫ư§Nâ6ÀAaN•C` ‡ #yemm-“É’’’2´'$$Đ—¿3@k.^¼8wî܇–*Uê·ß~ăOUÁả>__ß§OŸîرƒ¿b)í355å‚… ¶hÑ‚‹GớÙ³   Ă‡÷́ÙÇEû¦L™rụ̀åiÓ¦ 4ˆkyö́Yï̃½Çÿ¿ÿư¯B… 8(̀©r ä0aÄ1¯LLL¬¬¬2ÿ%ODüuUß>₫<₫ü<{ölôèÑGŸàŒĂ¤eaaa;v́:t(½Ef8(Úgnnnjjjffæáá!noƠªƯ»wp\´îƠ«W§OŸ®T©_5‘½½ưˆ#RRRöíÛG8( Ê!0Ă„ÂQ́́́ââ⸼èèhî)ÖÙ„´´´‰'nƯºµeË–'Nœ5jTæQ.&mânz±víZùƯ»w'¢ÿưïr¹¼S§NÜf8(ÚW¢D‰ Èd2q#÷ó’Ê=ÄqѦ¸¸8"rtt̀Đ^¡B"zưú5÷…9U!&Đ²eK…Bqö́Y¾E©TÛØØ¸ºº²ÎÎ lÛ¶íĉ?üđĂ5k²û«‡I›Ê•+×ñkM4!"{{û;6kÖŒÛ Eû<<<âăăïß¿/nä á×ÚÄqÑ&GGGccăÈÈH¥R)nˆˆ ¢J•*qqP˜SåÄab½¹>øï¿ÿ*W®Ü®]»>p-₫₫₫ÎÎ΋-bAHKKkƠªU:u’““sØ ‡‰­[·ne¾s öƯ¹sÇÙÙÙÓÓ3..k¹qㆫ«k½zơbcc¹-:t¨³³ó+ø›÷Ü¿¿AƒƠªU{đàׂƒ¢53f̀Ẹ̀Î1ªC8L2å×â@îlܸÑ××·té̉M›6}üøqhhhƠªU7nܘù²|иW¯^5mÚỒ̀¬bÅ™ŸíÖ­›——ă01tûöíîƯ»wé̉eñâÅâví[·nƯ²eˬ¬¬êÖ­›””.“É/^ܾ}{~míÙ³çóçÏ«V­wụ̀å´´´™3göíÛ—ß E;fΜ¹gÏƯ»wg>E[•C ÷‡ÉxΜ9¬sĐ®®®/_¾ 111iß¾½¯¯oæ!?DDD¥¦¦¾ÊJåÊ•ù«dp˜zưúơ®]»äry›6mÄí8(ÚW·n]{{û¨¨¨[·n}úô©AƒË–-«_¿¾xm*\¸p¯^½ˆèŋ׮]KII©[·î¢E‹¸‹–x8(ÚqêÔ©;wîxzz–,Y2ĂSª½?Lq•àâP GP GP GP GP GP GP GP GP GP GP GPÛçÏŸẃØ1xđà¦M›V¯^½M›6C† Ù¸qăÇUïdçÎr¹\.—÷èÑCk™GFFÊ¿¸páƒÏ.+§OŸ₫çŸ₫ùçŸ7õd·MPP—vƠªUăăă3oàááÁm°hÑ"ƠßzåʕܫFÉúc€ÂÔsûöívíÚÍ™3çܹs¯^½úüùóăǃƒƒ}}}Û´ióï¿ÿ²NP÷L˜0aĈ#FŒˆˆˆÈn›V­Z‘B¡8wî\†g>|ǿÙ3.nß¾=ë½…ÂÔíååơßÿñ-\5Ăyụ̀å¸qăîƯ»§JWæææ¥K—.]ºt‰%Xï–°²²jذ!gxö̀™3\PºtéêƠ«³Nô GPƒ¯¯oRR÷èÑăÀ7õ ™?¾¹¹9%''7N•®:wî|êÔ©S§Nùùùå=±§OŸ~₫ü™Ég¢µ·æ‡Ïœ9£T*ÅO={6Ă6ù…#¨êüùó§OŸæâ!C†üöÛo•+W666.^¼xÏ=—-[Æ=ưèÑ#.ŸB§P(V®\Ù¬Y³•+WR6ç8¦¦¦îر£OŸ>M4©U«V§N&OœaSÜglĺ¤I“êׯ߲eËFäb¿ÄÆÇÇ/\¸°G®®®ß}÷¿¿jjj.̃:»s'L˜ >qé̉¥r¹œ¯Å(—Ë“““³̀“Ÿ­‹‹»uëßœœÎÅ:tàÛÓ̉̉>ܯ_?êƠ«{xxôë×oß¾}â=ÊùÓÈ!s^lĺüùó{÷îíêêÚªU«Ñ£Gß¾};ÿ̉@²LX':cÇ\`ee5|øđ Ϻ»»7õüƠ«WDáèè˜aƒ3f́Û·/‡₫?₫Ü·oß7nđ-‘‘‘‘‘‘üùçŸøá‡ Û'$$ôéÓçÉ“'ÜĂ>,]ºôÑ£G¿ưö[îv0>>¾wï̃>ä̃»wï̃½{wï̃å*Ư|}kUX[[7hĐ€;Á188˜Ÿ’ å†<\\\øí'L˜pôèQ₫á³gÏ={vúôéU«Vi$¥ĐĐЉ'ÆÆÆr“’’bbbN<9pàÀiÓ¦åßG¬`ÄTuåÊ.hÓ¦MáÂ…3o°ÿ₫ưû÷·mÛ6ĂS·nƯʹj$"???®j455mÙ²e¿~ưjÖ¬IDJ¥r̃¼yQQQ¶ }̣äI±bÅêƠ«ÇçÄÏÛª+,,́áÇööö5kÖ,T¨×x́ر›7oæÓ[ÿøă'O433ăúúú}:Ë%]ÚµkW¿~ưúơëó×_ór(Âx&&&?ÿüshhè+:wîliiÉ?ué̉¥̀w̉‹‹‹?üøñ#?Ÿ^ºté|ư(¾u±bŸ9ôøøø .p ñ8::fÛóóóÛ´i“B¡ppp˜3gÎÿ₫÷¿+W®xxxh* ~zăÆ'³̉©S§|ư(@ûP8€ªøSÙ={¶sçÎ Ï>}lăÎĂSËçÏŸcccccc?₫ܾ}û%K–„††nÚ´‰Ÿ¤æ—*äEFFr«ÿpΟ?ÏÍ)(PÀ̃̃>_? Ơß:Ă}¥3Tœ¹Ă..Y²„;¥2Ă<5ưùçŸ\0{ö́>}úÈårccă/^¨₫.ß̀¼\¹r\ P(ÊXYYYZZZZZæpy8è( *Fqñ¼yóÖ¬Yóúơk"JII9pàénÙ²e«T©¢nç>lü·>¢±±q£Fzö́Ém €ä¤¤¤üúë¯)))DôúơëÅ‹sí-Z´ß1?|ó­ù3 oܸÁ/‡~âĉ°°°œ»UåƯ[·nmddDDwï̃åZ2‰‰‰ü41_ÿƯ¾}[•UxTÏœÿǰk×.₫4ĐăÇ»¹¹Ơ¯_ßĂĂC³§T€àâPĂO?ưäééùñăG¥R¹jƠªU«VÙØØÄÇÇ+ nƒB… ­Zµ*u›\.·µµU(}úôñđđ°²²úï¿ÿN:ÅmĐºuë̀¯:qâD‹-*V¬xóæMn²ØÈÈh̀˜1Zø(r~k~!î?víÚµJ•*oß¾å¯&ÉÀ̉̉’;_píÚµ‘‘‘ 01Éé—³­­mƯºuùJ®B… üœÂ… .\˜ësÆŒ‡’ÉdgÏÍù1êf>tèĐƯ»wÇÇÇÿư÷ßưû÷wss‹ŒŒäϹ4huè Œ8€œ7mÚ$¾>úíÛ·|ƠXºtéßÿ=ĂDddd´fÍnr366vÏ=Gå¦bƯÜܼ½½3¼¤^½zööö¯^½ºpáWºq«ääëEÍ*¾µ‹‹Kǹ899ùÊ•+ÑÑÑü(]†̃¸àêƠ«‹-ReÜQ¼8Qæyj™Læîîοû©S§₫ùç;;»úơësÜPq–TÏÜ̉̉̉××—  [½zơñăǹúôé3zôèü>  }(@=µk×>qâÄôéÓƯÜÜ+V°`Ạ́åË·hÑbúôéÇk̃¼y®{®U«ÖÉ“'GŒQ½zơ%J˜˜˜XZZÖ©Sg₫üù[·n寶æYYYíØ±£W¯^¶¶¶mÛ¶Ư¼ysï̃½µđ!¨̣Ö‹-?~¼³³³™™YƠªUû÷ï¿{÷î,¯.Ÿ>}zç΋+fffæää¤Ê…DmÛ¶åf«)ÓơÔ|ŸÎÎÎDdddT¹råîß¿¿U«Vܳ‡â§¡3S=ó-Z8pÀÓÓÓÅÅÅ̀̀̀ÁÁ¡uëÖÛ·oŸ3g*{:G–y}2)[¹råÚµk‰¨U«VkÖ¬1·Î…ÔÔÔÓ§OS6³ü¹€sô“‰‰ JFĐ,LU€JP8€JP8€Jpq ¨#     ’ÿÔ—à£F„@ùIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/trimf_101.png000066400000000000000000001272051463010412100221230ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́Ưw|M÷đO"‘Ơ‰ED¬ØÔ½·–R«Q{¤ö*QÔ¦vSjÿ̀T 5CŒÚ›‰UĈŒ’ơûărÎÉ7ó{÷«¯¾¾Ïɹç>÷^'÷É9ßa”˜˜""""¢O1éDDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤SÑ è!Ñ)Qö ‚,³…a₫cR3~(jĂEø¹¨?2Ø‹D¼UMDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHaß¾}¢S äø¡¨?â‡BêÁ‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´b*:""R#Ñ)圠  Ñ)èDD”:~•’àŸIÚă­j""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G""""̉ G"""]åîîndddddÔ¡CѹhkàÀœ‹)":J7DDD:̀ƠƠuăÆ#FŒøäơêƠóööN{Ÿ×¯_0 hÑ¢–––ơêƠ;}úôÇöŒ5555J*₫üŸ}6nÜX³fMÑïe„©èˆˆˆ(ăºwï₫ÉƯ.^¼xâĉF¥±ODDDƠªU¼J•*#G<|øpʃƒƒL›6-Ơb4]‡"¢̉èDDDéǻ́́ååµtéR›\¹r•/_~ܸqï̃½“vX¸pa… ,,,́́́jÔ¨±iÓ¦d=wî\Å+V¬¨Í₫Ç=z´••U˜…•)S&=#""nß¾Ư­[7###icÆ W­Zuúô锃o‚ƒƒsçÎ/_¾íÛ·¿xñÂÍÍ­zơê¹råÊÀ¡H‡°p$"¢t*\Xä³'&¦ñĂ₫ùgæ̀™ăÇׄcÆŒ™;wîÖ­[»víºaÆ̉¥Kïß¿ßÔÔTó#{{û}ûöI… ¯¯¯··÷¤I“4÷?¹ddäåË—5Ơ˜©©é˜1c¢¢¢Î=kffàÊ•+õ¼166̃ºuk¯^½Ö¬Y£y §§ç®]»¹ơêƠ¥kxºu릩4jÔ(000::ÚÊÊÊÈÈèĉ÷ïß/V¬€U«V­Zµ*ẹqqq{÷îưØKk×®]¶¾u—fee¥Ühmm-½öd‚ƒƒ¼½½;wîlfföçŸzyyµoß₫Úµké=éDD¤?ÜÜÜ4wK5,,,\\\î̃½ ÀÖÖöäÉ“¸uëÖ;w®_¿§|¬‹‹‹rŒË'÷···—Úz1åæææ‹-9r¤³³³››[íÚµ›7õªU+eQQQíÛ·ÿØKKLóR+€»wï*{JS´¤I₫Í›7Ế́́RîôèÑÜØØ8Ù­ä°°0…RëWêää”lKÓ¦M\¿~½W¯^é:éDD”N5jˆÎà£nܸ+]틉‰¹yófƒ ưüü-Z4|øpiçdW•̉»ÂĂĂƒƒƒK—.íééééé™°|ụ̀¡C‡®\¹rÊ”)Ê=3y«Ú̉̉R› ?ÆÔÔ´lÙ²ÇWn}zDDD‡4sM+«œ;vDEE}́ _z÷OCPPĐ_|1qâÄéÓ§066nĐ ÷²%™¼Uyưúơ>|ø={Z·n àÙ³g;v́h̉¤‰³³s²=ÍÍÍGU­ZµC‡i^HBBÂܹsMMM5c̉µ?éDD¤?'O|̣äÉ+:uêÀµjƠêÙ³ç£G,,,úơë×½{÷B… :uêđáĂùóç ô÷÷oÑ¢E²ăxxx¤kÿ4T­Zµ\¹r³fÍ )W®\PP¿¿¿]·nƯ’í™É[Ơ™×»wïß~û­{÷±±Y»vmtttª«(PÀÛÛ{́ر¥J•jÑ¢…Í₫ưû/^¼8sæ̀²e˦ëP¤[88é5j8pàƠ«W?ÿüóÇGuäÈccă¢E‹úùù.\xÉ’% .477¿råÊO?ưñóÏ?§ư±ÆÆÆ%•?~ií¥T¯^=ooïdÓ>ÔÇ~Ú§OŸ7Ö¬YSô{L2SÑ QÆ988tï̃]Óˆˆ¨Zµêƒ:wîloo¿cÇæÍ›9rÄƯƯ=åCCCăăăk×®]¢D i£¥¥e%¹xñâ‰'5j¤Ü˜ö¡̉øiơêƠ«W¯¾gÏG‰~›éƒDÊj¥K—%":J:IŸ‹Nÿ*‹‹‹‹‹‹Ë™çzûöm||¼¨WZ©R¥ Há”)S¬]»Ṽ½{×ÆÆÆĂĂ#ƠÇîƯ»ÀÁƒSưiº»ÿ₫)S¦h.XN:UûC}̣‰ºvíZ¸pál}3đ¯]§Òà­j""̉ÎÎÎ^^^K—.µ±±É•+Wụ̀åÇ÷îƯ;i‡… V¨PÁÂÂÂÎήF›6mJöØsçÎU¬X±bÅÚ́?|øđÑ£G[YYåÉ“§F{÷î‹‹?~¼«««•••‡‡Ç74;ÇÄÄLŸ>ƯƠƠ5õ¼Åóôôü÷ß³ăزe‹££cÏ=5a‰%:wîđäÉ“”;(Y²dæ̃¬Y3ooïçÏŸ§÷Péz"…#éíÛ·:´^½zcÇÍŸ?ÿ́Ù³›4i’˜˜`êÔ©ßÿ}₫üùÇ;pàÀ7õôèÑc÷îỬc>|جY³7õh:Ơ}rÿ7®[·nâĉ̃̃̃!!!;w®_¿₫áÇû÷ïÿÍ7ß|ươ×====øá‡"E|ÿư÷îîîk×®mß¾}–¿öˆˆˆÛ·o{xxI6l˜j÷ÄàààܹsçË—oûöí¿ụ̈K`` Td§÷PËQ·nƯJWVé}"}‰ˆ(}_ñ$&¦ơÓ₫ùgæ̀™ăÇׄcÆŒ™;wîÖ­[»víºaÆ̉¥Kïß¿ßÔÔTó#{{û}ûöµiÓF³³¯¯¯··÷¤I“Œ|rÿÈÈÈË—/—)S€©©é˜1c¢¢¢Î=kffàÊ•+õ¼166̃ºuk¯^½Ö¬Y£y §§ç®]»..NÓï0UíÚµKûµkr³²²Rn´¶¶–’O&888!!ÁÛÛ»sçÎfff₫ù§——Wûöí¯]»–̃Ce8«,|"Ê,‰ˆH¸¹¹åÊ•K -,,\\\î̃½ ÀÖÖöäÉ“¸uëÖ;w®_¿§|¬‹‹‹T5j³¿½½½ÔÖÔ‹)·077_´hÑÈ‘#ƯÜÜj×®Ư¼yóV­Z)óÔˆJăvbÚ×Z?<û›7o”#""ØÙÙ¥ÜÿèÑ£ỵä‘~Ô·oßÿ₫ûođàÁqÍé:T†³JoÎ$ G""JŸAƒDg¦¦¦QQQoß¾íØ±£ŸŸ_µjƠ6mÚ¶mÛZµjU®\Y¹§ÔÖfí <¸S§N{ö́9r䈟ŸŸ‹‹K@@@²[´ÖÖÖŸ¬Óààà`llœ́oXX€B… ¥ÜßÉÉ)Ù–¦M›¸~ưz¯^½̉u¨ g•̃œI8DD”>Ë–‰Îàănܸ+]틉‰¹yófƒ ưüü-Z4|øpiçdW•̉»ÂĂĂƒƒƒK—.íééééé™°|ụ̀¡C‡®\¹R3̣ø™¹UmjjZ¶lÙăÇ+7;v̀ÈÈÈÍÍ-ÙÎ÷ïßß³gOÆ ]]]¥K}ÅKס2“U>å ª&""ưñüùó… JáôéÓ#"":tè ™AZY$íØ±#**êcWø̉»‚‚‚jÖ¬9₫|MhllÜ A(îeK4·ª?F›çêׯ߽{÷ö́Ù£ Ÿ={¶cÇ&M8;;'ÛÓÜÜ|Ô¨Qưû÷ƠlIHH˜;w®©©i“&M̉u¨Lf•…OD9€W‰ˆH8::N<ùäÉ“+V5jÔ‘#GŒ‹-êççW¸pá%K–,\¸ĐÜÜüÊ•+?ưôSDDÄÏ?ÿœ̣8éƯ? ¹rạ̊÷÷ïƠ«×É“'§M›vôèÑ&Mœ8q";®¨YYY|ơƠW;v́˜;wnÉ’%>¶Öó˜1cv́Øáàà°qăÆU«VÙÚÚúûûK3¥ëP™É* Ÿˆr€Q&ÿ¸¡”\\\‚‚‚DgAI„††̣®‡ÚđCQ'ésÑÅ_eÎÎΕ*UÚ¹s§èDr»»»Í‘#GD'’ºuëøđáẮ{ ük×Å$Kđ#i…}‰ˆˆtسg϶nƯZ¨P¡:uêˆÎ%‹;wîîƯ»÷ïßÉX8‘hÑ¢EñâÅEg‘Ónܸѵk×öíÛë_á¸zơê•+W(\¸°è\è=DD¤'–/_.:…œvñâEÑ)d£+V¬X±Bt”û8~BHHˆ‹‹ËåË—E'BDDD$ ÇOذaƒèˆˆˆˆT·ªSqûöíƯ»woÙ²Et.DDDDªÀÂ1umÚ´ù÷ßEgADDD¤",S7cÆŒ·oßظqăÉ“'E§CDDD$ ÇÔI“d`:₫ÑÑ02—ä!2÷îÁÙW¯¢|yôDá%^ÚÁ®4J‹ND Y­L™u€‘‘Kiù_Ơ¾}ûDgfĐi>RưøPJ”pP¾<!$$TtF™¥Ÿ Qz…†¦ụ6õ\jߺ­ùÿdL₫?N<§±p̀j âĂâ•Aÿ₫‹×¯E'DïqYd̉ơÅÈ(ù–Ï?wNHV¦éúçB”iÿ³—–¥6‚|ÚÇ FtÖp:¬vô¨ÜˆÀ×_‹Nˆˆ²…ƒC*Ѧè̀ˆ({(oOç É5óDg$ Ǭ§¼CÍ›±i“茈(‹ơí‹gÏäPÙ»qÏp© "ưă¯;¸#…Å[‘,³‡̣k¤G¼z%:!"Ê2¾¾X³F5§»̣¤4ˆÎ’ ƒ»»»‘‘‘‘‘Q‡Dç¢.Ô¼3EÉüÑâà",’ÂDîP8ÙæàA¹mk+:"Êÿư‡ÎåPY/9#·‹( WW×71@ll¬©©©QRùóç—v~ưúơ€-jiiY¯^½Ó§OkóơêƠóööN¶1íCåØ}́±}úôÙ¸qcÍ5³äMn‚&r>0èÑ “m5‚—.|r‚"½`n.·÷îṂ£jƠ0u*¦N}̣¤§œáààĐ½{wM;444>>¾víÚ%J”v°´´Ô4"""ªV­úàÁƒÎ;ÛÛÛïØ±£yóæGqwwOăø/^T=Q­^½zơêƠ÷́Ù“ù‰”b₫‡ÿYÁ*›>JƯHi8qbé̉¥/]º¤ưCJ—.­ ÷ÿåÊ%úƠ®Ñ)Prºø¡Hg38hPêûT«&ïcl,:ăô“>—$¿ÊtM\\\\\\Î<×Û·oăăăE½̉J•*5hĐ@ ÷îƯ ààÁƒ©î à€wï0r¤è„ˆ(ƒ*V”ÛÅaÙ²ÔwS̃°NH@¿~¢ó6$ÎÎÎ^^^K—.µ±±É•+Wụ̀åÇ÷îƯ;i‡… V¨PÁÂÂÂÎήF›ƒ5=wî\Å+~ø°Ó̃øđá£G¶²²Ê“'O5öîƯ7~üxWWW+++7nhv‰‰™>}º««k̃¼y‹+æéé™M«Ú(Y²dª?Ư²e‹££cÏ=5a‰%:wîđäÉ“”;‡‡‡7kÖ̀ÛÛûùóçé=T=QÚͼz¨'µm`³³ăYt ÇO˜>}zPPPEå7Fz)oV-X€Ă‡E¿&"J· på̃»—ÖÎÊ“~Ơ*́Ü):{C²}ûö¡C‡Ö«WóرùóçŸ={v“&ML:ơûï¿ÏŸ?ÿرcøæÍ›=ź̃½[źÇ›5köæÍMǸOî¿qăÆuëÖMœ8ÑÛÛ;$$¤sçÎơë×?|øpÿ₫ư¿ù曀€€¯?̀ÈæééùĂ?)Räûï¿www_»vmûöí³ăåçÎ;_¾|Û·oÿå—_¥º9""âöíÛF H6l˜j¯Aͦ[·n%ûQڇʱ'Jû±™7³ă¸¾ÄË, ]Ä>9âåKy|L£F́÷D¤[NœÀO?É¡6gp|9èÿƒµµ6h :!"úeƠر#¾ư6}_±E‹ÊaS‘è+X ü/½Ù¾{÷îíÛ·mÚ´©[·®¿¿©R¥FyóæMkåïdÀÆÆFjk³¿ö|ï̃=Ÿ *øùùúرB… OŸ>M¶›µµu£Yµy"''§dUÓ¦M\¿~ƯÁÁÁØØ8Ù̃°°0… J×ËIûP9öDû,>ÉR»1{Á+›HGñcÎzơJ₫" Àܹ=ZtND”ºæÍåvîÜđơÍÈAîß—OúK—0i¦OưÂ2MÍ ߸q#66VºÚsóæÍ úùù-Z´høđá̉ÎÉ® *¥wÿ4„‡‡—.]ÚÓÓÓÓÓ3!!aụ̀åC‡]¹r¥f®åñ3s«ú₫ưû{ö́iذ¡«««´Qs}®X±b¦¦¦eË–=~ü¸̣!Ç322rssK×+JûP9öDø,>© ºDCîp²ăYt¯8æ8å_cÆ`×.Ñ Q*ºtÁ₫ưrøß?”̣¤Ÿ1¿ü"úµéµçÏŸ/”V^¦OŸÑ¡CÍ,ĐÊjÇQQQ»’—̃ưÓT³fÍùóçkBccă @q/[¢¹Uư1Ÿ|"ssóQ£Fơïß?66V³%!!aîܹ¦¦¦M4Đ¯_¿{÷îíÙ³GóÓgÏíØ±£I“&ÎÎÎé}Qi*Ç(kyÂsvH!ĤWE¸u úS£}{ö{"R›»w±C₫úÈ‚sôñc89½o€₫ưE¿Bưåèè8ỵä“'OV¬XñÔ©S¨U«VÏ==zdaaѯ_¿îƯ»*TèÔ©S‡Ο?`` ¿¿‹-’ÇĂĂ#]û§¡jƠªåÊ•›5kVHHH¹rå‚‚‚üưưí́́ºuë–lOÍ­ê ¿ö x{{;¶T©R-Z´°±±Ù¿ÿÅ‹gΜY¶lY½{÷₫í·ßºwï>xđ`›µk×FGG§\âOi*Ç( =ÇóƠX-…¬?†WEpqAÛ¶rh$rb "JI9}̣¶mYp@GGôê%‡<é³O58đêƠ«Ÿ₫ùáÇ£F:r䈱±qÑ¢Eưüü .¼dÉ’… ››_¹rå§Ÿ~ˆˆøùçŸS'½û§!W®\₫₫₫½zơ:ỵä´iÓ=Ú¤I“'NdÇ5³1cǼرĂÁÁaăÆ«V­²µµơ÷÷—&'²²² øê«¯v́Ø1wîÜ’%Kdl5ç´•cO”…  €Ô^¥Y~|½a”™?n(U...AAZ ƯoÔH Ü‘‘¢×g¡¡¡Ùñ;2Cµ²ª›1&dÙ‘;vL2¸:ûJŸ‹¶¿ÊÔÄÙÙ¹R¥J; iÊuwww›#GˆND¥ºuëøđáĂ´wsqq¹t[Ó‹±³0ë“GÖÅ$Kđ£8‡Éí¨(|ơ•脈ùóËíÚµ³²jđûïI¦OÏƯN"Ê åPN›ªÑ±pJyÁaÛ6¬_/:!"ƒÖ«ÂÂäđĉ¬·oåö¾}X²Dôk&Ư÷́Ù³­[·ND]Î;·uëÖû÷ï§ëQWqUtâjÇÂQ4eí˜́[‹ˆrP²¿Ư²ï>²̣ÈÆ!$Dô+×#-Z´¨U«–è,rÚ7ºví*Ú&Ơ«WwíÚơÔ©SÚ?„b´ÁQƠ*pô¨<x₫ü*í÷D¤×"#“ôÉî³đÂT®ü¾ưùç<é³̣̀åËE§Ó.^¼(:•Z±bÅ+´ß?i ^qTúơ1fŒr¼%QË—OnïÛ—íOçî”CôDÂ)Œ¡4°pT‡Ù³¡œÿóÏE'Dd@”uÛ°ahÖ,'t̉$(ï©(ñCåªqíÜ Á°a¢"2åÊÉíܹ‘Îú2åäI¹ưü9úôư^} G5QvtZ²$ÉzgD” ÆŒÁơër˜™u3Fỷ¯]‹íÛE¿#DDibá¨2ÊiÀ›7 ‘> Àܹr(j„̣y¿üÑÑbß"¢´°pT lƯ*‡́3O”m¤É ÁaùûËm vĐ'"cá¨>_~ÉEm‰²›̣ÄZ·Ÿ}&2™æÍ1dH깩 çqT¥µk±w¯| ¤ví$½è‰(s”•ÙW_¡gOÑ K–`ï^„†¾Ë—ÇU,`áââ":"Rjơü¹üåvê&NÄŒ¢s"̉ÉmKKlÙ":¡BBä“₫Ú5Œ ±K‰~Kè½ĐĐPgggÑYè°è¸;¥+ÄdoU«˜²Ïǜ™¸tItBD:o₫|>,‡õˆN()åI¿`‘î[…U¬³ Gu»{Wn»»‹Î†H·Ưº…Q£äP ư={&·ë× ‘{‚'ưĐO Y5f Gu+Q‹Ë!û̀e‚««ÜVθ¯*ùócíZ9äIO”Np’Ú'ÁÑY€…£ê d´Ü¹E'D¤“”Øœ9IÖøT›^½Đ¥KꙑöŒ Ÿ<1±jeâ`ô G]°oŸÜ~÷;NˆHÇØØÈíúơ1z´è„>eÛ6äÍ+‡‹NˆH×EQ©í÷é˜.:#=ÁÂQG({cí܉Ơ«E'D¤3ºwÇë×rxô¨è„´%·ÂÂ…¢"̉1đ!Já\‘₫`á¨;”µ£§'₫ưWtBD:`Ó&üïr¨Î1£̀öûïÁéqˆ´±»Wb¥r@LÖbá¨SNœÛ¢³!R»W¯Đ£‡êVƠ¨¡œ¼LÑÙ©^Ú¢­¾Å[Ñé:¥vmL˜ ‡́3O”&[[¹}đ èl2¤\9̀-‡<é‰̉f©½;s!—èŒô G]3c*V”ĂâÅE'D¤RÊËË+É‚1ºèÔ«'‡Êj˜ˆ””è=áÙíEg¤‡X8ê å2÷ïcĐ Ñ ©̣®®‹ ,PæÈíW¯Đ½»è„ˆÔ§ªImG8₫_Eg¤ŸX8ê&e_­+°w¯è„ˆT$Ù8’[·D'””'ưÿ₫—dÄMÅÔs8'…ñXtFz‹…£Îúï?¹ƯºµNvû'ÊÉf®Ñ§3CùZºwÇ«W¢"R‡38ă o)ä0êlÅÂQgåÎ __94æGI$+[ÿJ+åvv$̉¨RûˆNGϱÚĐe;âÛoåă-Éà)O‚M›`m-:¡¬Ö¨¾ÿ>ơ×Kd˜”bVbe‘cá¨ăV­BÁ‚rX£FÆE¤ă”UÔ×_ăë¯E'”=æÏ‡‹‹rrG2dÆ2¦ ÚôGÑé?ºïɹ}æ zö‘Êû¶66Ø´ItBÙI9Ü'(-[NˆH„"("ug4†ñŸøStF…£^Pö™ß°çÎeüPD:hΜ$Ư_¾PöSô₫₫8tHtBD9kV<Â#)ŒG¼èŒ  G}qê”Ü®V-ăÇ!̉5×®áX9Ô§aÔi»_n+‡é½x0̣ÆF“X8ê‹5±|¹²Ï<Œ̣åå¶~LÙ¨¥¢E“Ü‘çIO†£Ií³8+:ĂÂÂQ ˆÖ­åĐÄ$ă‡"̉ÊjiÁ‚$£F A²1@¬É(‡QOÅÔª¨*:#ĂÂÂQ¿́̃-u$$ m[Ñ e# ¹Ư¨¼¼D'$B²Y‡4Qvr„£Ô®†jS0EtF‡…£̃IHÛ»wcåJÑ e‹/¿Dt´*gÆ64ÊA˜3GtBDÙĂÿâ_)<ƒ3¢32D,ơ‘rtÀÀxøPtBDYlƯ:lß.‡†3 æc”ïÀر¸~]tBDYm'v®Æj)ä€QX8ê©3¿Ă QVºu ½{Ë!«F›7åv¹r¢³!ÊRQˆêˆRÈÉwbᨧªUĂEÏö™'=âê*·Dg£eÊ`̃<9äIOúÄ–R{7v³z‡o½₫:5ÉØ''Ñ ee=T³&êƠŒ™d|ùD'D””Ă¨Ë¢lk´ÎÄÁ(³X8êµÈH¹ưä úơQ¦”(!·Ë•K2í=i¼x!·##ñƠW¢"Êw¸Kí"(ŕÀ+ G}§́ÿµj₫øCtBD4t(BCåđêUÑ ©•̣¤ß¶ ë׋Nˆ(£&ả%\’Âx :#RkáøöíÛàààÓ§O?|ø0>}`3'.Nnwè€ØXÑ ¥Û¾}XºT9 &mÊ÷§W/„‡‹Nˆ(ưNáÔ ̀B£V SÑ $wüøñåË—_¼x1ñĂo>33³† 6¬dÉ’¢³ÓM&&øóOy2đ\¹ø­K:§E ¹%:]pô¨<¸½=Oz̉=µQ[j?ÆcÑéĐ{êºâ8aÂOOÏ .$*~ÉÅÆÆîß¿¿M›6[¶l ÎjÓưûË!Ç[’NQ₫ƒƯ¶ yóNHԯѣå'=é倘_ñ«rÁKE…£¯¯¯rK¾|ùŒ>ü¶KHH˜6mÚ™3œ&>£V®DáÂrX° è„ˆ´¢¬xz÷F—.¢̉sæÀÍMí́D'D¤eƠØ<á):#’©¥p|÷î¦í́́¼té̉K—.;wî̉¥K+V¬(Q¢€øøø7ÎT—)—yú“'‹NˆèjƠ’ÛùócÍÑ ék×äöË—>\tBDŸ̉Í¥v.äú¿‹Îˆ’PKáǿÙ³7õÈ›7ïúơë›4ibnn O< 6\¿~½¥¥%€óçÏ‹ÎTÇ);:MŸÓ§E'DôQÉ₫…>{&:!Ư¤<é/Æ₫ư¢"ú¸%X²̣¿Ñ·x+:#JN-…cáÂ…mll¸¹¹(P ÙOóçÏ_¾|ỵ‘2åŸä¶̣z‘\¼˜ä8ÇvdÆ›7r»yóŒ‡([… d†I!‡Q«“Z GuëỌ̈îƯ»d?½{÷.€êƠ«‹NS÷99áC¯€}æI¥*W–ÛwïÎFÇYZbëV9äIOêô9>—ÚqQt:”:ăÆ+Z´hxxø°aĂL{“D±„<Å̃>́i…·ª ˜4 5kÊay4‰²›rïĉ¨][tBúnèP4k&‡ỵˆNˆ rơP m†f™8åÁW;uê @+V¬Đ´?)ÙzÖZÚ¾}û¶mÛ‚ƒƒóæÍ[¿~ưÑ£GÛÚÚ¦±ÿ»wïÖ­[çïïjkk[¾|ù!C†”*UJ́Û•N’¿ºŸ?GŸ>\ÜrL±br»R%LŸ.:!ðoŸ|̉¿}‹N¡_®DQå¤öçø|1‹Îˆ´%¸p¼ví€B… Ií́°pá•+WZXXT«Ví₫ưû¾¾¾wîÜY¿~½fUĂ”âăă{ơêuáÂ''§ºuë¾|ùrÿ₫ưX·n]µjƠľcÙ(1Q₫Y»­Z¡sgÑ9‘₫8ÈáENú›ƒ”'ưï¿cơj|û­èœÈŒÁ˜ë¸.…Á¥ƒ₫ߪ ̣ññqppØ·oŸÏ₫ưû{ö́yåÊ•yóæ}́![·n½páB‹-8°xñâ 6¬Y³À¤I“D¿l¦́èÔ¥ ¢£E'DznϬ\)‡́i—ó”ï¹§'₫ưWtB¤ï0s¥btà+̃̃̃,,,¤v–Û¶m[BBˆ#¤%°Ç·k×.ÿ‰'§R:_¸p@¯^½LMß¿?µjƠruu½víÚ‹/́́́ľiÙËÏ-[¾o[Xđ›œ²OBÚ´‘Ă·oE'd¨Q§Îû¶£#BBD'Dz­Hmåô¤+]»vMµ…Î=kllÜ Ai‹‰‰I½zơvï̃}áÂ…ªU«¦|ˆ££#€/^H[_½zell,•’z«E ‚¥K߇oIÙ¦dIg©ưûïÈ•KtB†ê‹/0~<~úé}X¢„3OzÊ&Ê1ë°î3|&:#J7=¿U˜˜lgg—́2aé̉¥<|ø0ƠGµnƯ:O<3f̀8uêTLL̀ăÇ'OüèÑ£.]ºXYY‰~MÙoÉ8Ëßè(W.ă‡"úå0jOOtè :!Ă6s&*V”Ă"ED'DúHY5~‰/{¢g&F¨îúYlĺƯ»wïß¿Ÿê-¥©Zˆ·±±I¶ƯÚÚI¯)*¹¸¸lذ¡wï̃½{÷–6öèÑc‚Ö‹s¹¸¸$Û²oŸNÍPuès‰ïÛׯ¿8đŘ1¢sÊ”G‰NdíÛ;ïW¤.P ~„¡¡¢s2x;w¢D‰÷1>z„o¾‰˜6-\tRôüë^°;>ŒGÍ›wÖưY¡Đ¥Ó¾yóæ¢SP ‰‰‰ëÖ­›?₫;åRµ)¤«pŒ‰‰Á‡>”J–––^¿~ê£"""fÍåææV¾|ùđđđÀÀÀ?₫ø£fÍM4Ñæyƒ‚‚„¾—YA1̃̉zåJ믿FƯº¢sÊgåeTgêT\¹"‡OŸühTA9ÈzăF«®]­Zµ} Ó¿Á`Á)œ’Â(ă(;éS~­§¼Bd TT8₫₫ûï?I½l²ˆ‘‘QtÑÁ‘‘‘øpƯ1¥1cÆœ?~ܸq}úôÑlyüøq×®]½¼¼₫üóÏ̉¥8½÷́™<x½ź́H™wö,”£àøoJmbb MSÖº5? ÊA y9Q£Öu*êă¸~½¼̀¹‰‰‰““S¡Ô¤ë˜¦¦¦ÖÖÖ)¯,FDD(Ú)Ï=;räHÉ’%¥ª€““Ó AƒbccwîÜ)ú}ÊAùó'™\Ù+(CªW—Û'N<̀ø({äɃ+I!Ozʼ2(#µ¯!»&l¦£¢+÷ïß`bb2{ö́FåÍ›7Këàà¡×ªùQÊưĂĂĂ/^<ÙvÍ…ÆçÏŸ‹~ŸrVï̃đóĂöíïC²¦LPV!+VÀÑ1NtF”fÍ¢úöÅo¿½ỷSf(Ä̀Æl7¸‰Îˆ2KEW5•™‹‹K›6m²ªjШQ£øøøăÇK[lmmƯƯƯSî_¼xq“;wî$&ưe©éßP²dIÑïSÛ¶ Ê£qcÑ ‘NRN™Ú¦  }ÜêƠP₫Y]£†è„H7ÙÀFj×C½1ĐíA–¤¡¢Â±zơễ¼y“µ‡í̉¥‹±±ñ̉¥K5ưøøø„……uêÔÉ̀̀L³%***44T3lÍÜܼ^½z÷ïß_¼xqBB‚f‡;wî,_¾M*ºUM:ÀÏ/É4à¶¶¢"USVS§&©IWl̃ å4à¦*ƒÔHY5zÁK_«FC&øwÀ AƒD¿”NÇÉåÀ«WèÑ7ΉÔÈÑQnW«†)SD'Dµg|̉ÇÇ£m[o¢Ô)§ltË,e=Á…ăđáĂE¿”~Ê…É6mB«VèÖMtN¤.ɇå’NSô»wă—_Đ¿¿èœHeFbdä[··pKtF”-x«2DÙÑéë¯!:!R‘ßÇêƠrÈ^qúAù9€‡\÷‡ạ́ú"Äè1Ơ!!!7n đâÅ‹qăÆ5jÔ¨C‡Ë—/÷îè́HáÀ¹ư‘U¿É½}‹NäđĂ\¨¤₫₫[n-*:R“Æ×†x‰—¢Ó¡l¤®Âñÿû_ëÖ­üñÇ—/_:tèÎ;=ztăÆŸ₫ùÛo¿;œ’hÜ#FÈ!µ%@z­[‹Nˆ²ÑçŸËí\¹À9 ÓƒrûâEÔ©#:!ÊN.p‰B”ÄAÑQN¼Vu’TLM7mÚ´bÅÓ§O¿}û¶N:Æ “~joo¿lÙ² ˆN“>E¹¨í̃½¸qƒó;ꥥK"‡oßNˆÄQô'NàÔ)Ôª%:'Êë°î6ä)Ø8 Æ0©-–wï̃Ư½{×ÅÅÅØXE×GÓàââ”ùăè°[·àê*‡*ø7ế́,: ư’ärcÆ>a~(ê”±ÏåÉ89É¡ Nz½¢†“å9€|í†U£Á~׫¨ûùƒ‡*·çÊ•ËƠƠUWªF€2e0o²Ï¼̃QV/ΆTÀÑÆ4<éơ‘²j @€ètHƯªöơơ}úô)€ Qv·&]4r$üüđaùäˇ7oDçDYCYLŸdÁ2dØ»W ÜȈ×ơ‡rơXŒ­‡z¢3"aTt¯S§NÆe_k̉]‡ÉíÈHtí*:!ÊùóËíZµ0q¢è„HMvî„™™¶l):!Ê ŸC¾ÅPåfa–èŒH$C† éĐ¡€•+W>{öLt:””¶nÅúơ¢¢LéƯaarx̣¤è„H}”KÈøûcéRÑ Qæ ÅĐÈăà®âªèŒH0ƯªÖŒ¡.X°`pppÓ¦M]]]mmmRô”Y¶l™èL)=”ă-{ơB«Vǿ3Ñ9QFlßuëäw!éc”'ưĐ¡hƠ ¢ÇuPíĂ¾¥kˆ!¨ªp\t ”®_— »w1|8~₫YtNôiåÊÉí%°x±è„Hwœ:%ŸôÏ¡O¬Y#:'̉BmÔ–Úù‘ ø±‘L¥·ªƒ‚‚öïß¿eË–ÈÈȸ¸¸×ÊIw);:-^ŒưûE'DŸ0v,®_—Ă»wE'DºFỷ¯]‹;D'DŸ23Ná”>'9¡$TtÅQĂ××wé̉¥?Ö„µk×¶²²̣đđèÓ§ÏĐ¡CØSF×½yƒ|ù̃·›7gŸy5;v sæÈ!?+Êå ë.] ssÑ9ÑG\Â¥I˜$…FM)©ëă¬Y³&L˜ U’èèèeË–y{{‹N2Í̉[·Ê!ÿP±úơåöó碳!]æç'·órˆ…¹Ă]jßo1P*TT8^¿~}íÚµ¶‰‰‰´]ºÊ¸yóæ³gÏN“2íË/ѳ§²vT%åDzv-́íE'Dº¬E ,‡<éƠI9 f1—@ Ñ‘©¨p\¹rebb¢±±ñäɓϟ?/m·¶¶^¼xqèˆï /¹ûDgDꥢÂ1<<€óG–¦*Uª€0eµAºN9ÚbâD\¾,:!‚8|X##E'DúEỷÏăÇE'DÀj¬̃‰RÈ1”6...RíŘ˜˜xæ̀%J°Ë…~Q)•*‰ÎÆĐaäH9ä0jỂ:êƠÁûÿzÂS Y5̉'©¨p,_¾<€Ó§O6,00P³ñáÇÇ2dˆ¦p,[¶¬è4)Kyx$™œ}æ…*SFn_»&:̉S®®I¦çI/–#¥ö œéÍăØ¿??¿°°°ưû÷ïÿ05tß¾}¥¬¬¬¸,¡6 {÷⯿̃‡ææˆ‰“!R~Ï 77Ñ ‘₫êƯ{÷Ê“ṇ̃¶ÊaÔ0A¹` ÑǨ製½ưüùóí́́Rư©••ỚÙ³œœD§IÙ@¹„̀ÿ¡sgÑ [[¹]¯ÆŒé»íÛ“L̃´©è„ Oq—ÚQqfˆÎˆtƒ G5kÖ>₫Áƒׯ_đàA||¼èt(§('çpp₫{ưZXƠH¤¡œ†«tiÑÙeƠö)§ôQÑàààà… ÄÆÆj¶˜™™5lØĐËË‹'ô_:7³f½Ùg>›ÙØÈíƒEgC©BüôÆ̣¤ÏnÊ1¾đ̓<¢3"£®+[¶liÛ¶íÁƒ¥ª@lĺ₫ưû[µjåëë+:AÊ~?ư„<_dœ¹3Û(oV®œdÁ¢œ4n¬¬äP¹)e-eƠX¥;¢£èŒH÷¨¨p<{ö́?₫¨¼1/_>©?eÊ” .ˆN“²Ÿr:ĐP ":!=äê*·K—†bqx"^¿–Û/^à›oD'¤j †Ôv€C ±e Ç7ÆÅÅ(V¬ØâÅ‹/]ºtîܹ˗//[¶Ls“:66vưúơ¢Ó¤¡¼YµlüưE'¤WF‚rƠwƒ́̃Mª£<é7nÄ–-¢̉/Ó0í ÎHá¿øWtF¤«TT8?€¹¹ùºuë5kfnn O<7̃°aƒ……€sçΉN“rr®–-Eg£?ÆüùrÈ₫d¤ÊƯºáÍÑ é‹s87S¤Ă¨)3TT8æÉ“@¹rå“ư(₫ü*T`bb":MÊ)ææØ¾]¹0YQöe|ñBt6DIIkHI:>RfTC5©}÷D§CºME…£»»;€wï̃%ûQ\\\HH¸Vµ¡éܽ{Ë!kÇLS¾…6$Y0†H 4ÁđárÈ“>ó”b–cy1é6£G.Z´hxxøđáĂÿưWî~ñ́Ù3//¯§OŸ{zzN“rÖ5I¦WŒ—¢ôR~wí=D'D”E‹’L‡ÓÅd‚²jl…V1PtF¤óÏă8xđ`ehmm àđáĂÇ+Uª”½½}XXØ;w4ƒf,--ûí·*UªˆÍ™rÚÓ§rɉÄäÉ¢s̉=rÛÊ ›7‹Nˆèănß–Oú·o1jæÍ“j‹¶ÊpöˆÎˆôàÂñàG&‹‹»yóf²9I±aJL”¿F~ø­Z¡reÑ9é’yópô¨*§>!R'åI?>ZµJ̣Ç}̉/øe7vK!ÄPVQÑ­j¢´„†Êm^uN70z´r5éđp¹Ư°¡èltÊ#<€RȪ‘²à+ƒ ư(^K—Ê“sa2­¹¹Éí7DgC¤5;;¬_=߇<éµWE¤ößø[t:¤WĂ•Ăçˆ̉6x0öî•'73ƒbiJJ•r@̀¼yIŒ!R¿o¾ŸŸ<8kGm(Äü€ª£ºèŒH¯đV5é??¹‡öíE'¤jÊ1è9RtBDé·ys’ɼg¶Â(,µ« 7¼EgDúFđÇdΜ9³té̉Û·oGDD|lŸ¼Ùfà”}æw킾ûNtNjÔµ+"#åđđaÑ eTD„|̉9‚ùóùWPêú£ÿ?øG Ïk­QÖSQáxæ̀™={&̣>}’²v́ßUªp¸L2`ëV9äYEºNỷ…2eĐª•èœTf"&úÀG 9 †²‰nU/Y²„U#iëôi¹]µªèlÔ%<¿ü"‡<«H?\¿.·[·ÊÄ!n&fJa,Øÿ›²‹®8i;wnƠªU.@i¨QăÇă§Ÿ̃‡́3¯`o/· Q)[sæ`̀˜÷!Oz%3˜Ií?đ‡©¾ÜIϨèß–……Åëׯ~üñGcc] %•9û÷ăÂ…÷aáÂxôHtNâ)‡Q D'D”uF†ŸŸ<›½µ5g³’£₫ßµC;Ñ‘>SQ}V±bE–––¬I[çÏËí₫Aÿ₫¢¬dI¹­¹¿ü‚½{ñχUªTI2tF)¿/{öÄW_‰Nˆ(§̀›??ܼù>,]·o‹Î)G(«Ævh÷¸zå&&&¬­­W¯^mjª¢ÄHg0³faÜ8Ñ9eZ_ô 7 —ÂS8%:#2h**‡gĂ•“ÄÄÄàà`;;;;åß¡@é̉¥<|ø0ƠÂñÚµk¶¶¶ *QBG¯Ô•(!·—-ƒ³³sÆ¥úñ*ô®.ÎÎèÛ¿ưö>,QÂY7Oú$b~ĺ₫¹è´”_ë)¯u ™5kÖ„ ¤ªQ½lÙ2ooïôĐÆÆÆÈÈ(:::ÙöÈÈH|¸î˜Œ´Ôá¬Y³Ú·ooccS°`Á!C†tèĐáÑ£G{÷îư&Qúm̃ü¶bE9,XPtBé¦ü‹iüx=è«I”½V¯F“&r¨‹ưŒ”Uă7ßLÂ$Ѫ*¯_¿¾víZMÛD1VºÊ¸yóæ³gϦ똦¦¦ÖÖÖ)¯,FDDÆY+YXXäÉ“ÇÜÜÜĂĂC¹½qăÆnƯº%ú}¢Œx¼s§<}o¿Q:(¯2T¨€™3E'D¤ ₫úKnÿ÷:wPzT€Ü1ÓÎ̃áé¾nB”MTT8®\¹211ÑØØx̣äÉçÏËS›Z[[/^¼Xs!p]ú×âupp×TMï0‡TR @33³d·Å5w¨ăââD¿O”QÊ›U¿ư†ßVƽ{rxù²è„ˆt‡̣¤÷ơÅ5?TNñW!Oư]í™MzIE…ăÍ›7´lÙ²GÉú6kÖ¬~ưúÈĐ¿FÅÇÇ?~\Ú’˜˜`kkëîîêC<<<"""nß¾­ÜxáÂeÊ”ư>Q&(¿F:uJ2±*ùùaụ̀ÔÓ'"m(Ͼ}ñô©è„>å8ÏÂ,9£&•QQáwÊ.Uª€°°°ô¶K—.ÆÆÆK—.ƠôkàăăÖ©S'333Í–¨¨¨ĐĐPi,a‡L4Iv}ơêƠƠ«W[[[7Qö!]´gÜV}¿§V­ävLŒèlˆt“âºôp®‡zRû)T_ç’áQQᨠ”j/ÆÄÄÄ3gÎ(¡Yª''§Ñ£G‡„„´mÛvÊ”)½{÷^¸p¡››[¿~ư¤}7o>`ÀMèêêúư÷ß_¾|¹yóæƒ êƯ»w×®]ß½{çííưÙgŸ‰~Ÿ(sZµJ2´$ăôs’2µ;đaÔ¥O:?^U|̉'³k  @&F”-TT8–/_ÀéÓ§‡ ¨ÙøđáĂcÇ 2DS8–-[6GîÛ·ï¼yóœưüü^¼xÑ£Gơë×§œÜQ©ÿ₫3gÎttt$íÑĐDé¶c̀ÍåÉÀ›5Ă₫ư9Ÿ…©â\lÙ’«Qe£ß~Ẵ½xö́}X«NÆgçw«ƒ:ă0NôCôi‚ Ç5j¤÷!†9ˆ‰²WLŒ|Ùá¯¿Đ±c/Hèè˜d̀̃½¢ß"}÷ô©|̉Ÿ>Æqđ`¦˜^Ÿăóx!…Çq<#Ê9ª¾UM”s”vîDpp=ó/¿$¥#¼Ç‘Pk‡áÂ…œ{ê-Ø¢\bH‡°p$ú@yÁ¡T©œyÎGđaÅ"€U#QκtInW©’COúoº¡›²j$Ư¢–QƠFFFŸ₫y¥J•*T¨/_>ÑéAjÔ3gb„÷aŒ·,RDn+§o$¢P±"–.Å!ïĂœdm+©ư₫ư¥Z ÇÄÄÄààààààßÿ½dÉ’•+W®T©’»»{ñâÅE§F†düx́Ư+Ono/e”yÊáœ?ü€êƠE¿|"Ă3x0öî…¿ÿû0W.¼{—O§F=Ă› ‰è7€(}¾¾¾—?¸w„„Û·oß¾}{Ë–-lll*Uª¤)"+T¨ ™œ(Ê]x8zöÄúơÙñ<… Éí*Uàí-ú…*??ù¤Eûöøăly¢²(+µK¢ä",ử‰̉MpáX®\¹råÊuï̃Àëׯ¯\¹"Ơ‘¯_¿đêƠ«£G=z€‰‰I©R¥víÚ%úM#}—˜(lØ€V­đƠWYû ß}‡ÇåđÜ9Ñ/™È°)Oú]»đë¯è×/‹Ÿb4FßÄM)¼ƒ;¢_4QF¨åV5kkëºuëÖ­[W̃¿ỵ̈åË—.]º|ụ̀­[·ââââăăoƯº%:M2 ʯ‘®]Ѫ²n:ú?₫À¯¿&y*"Nỷ÷Zµ‚“S–ǜĂ<ù¹8 †t–zGUçË—Ï̉̉̉̉̉2õ¼fff¢Ó!Ă³oŸÜκ[ÑÑèĐAăâD¿L"ú@9 ¸²3Iæ5DC©pÑ/”(ăTtÅ1!!áÎ;.\¸té̉Å‹ïß¿Ÿr•¡œÓ¬† ĂâÅïĂ,oia!·ÿü&&¢_&}P³&&MÂôéïìd­³́`'ú…eœàÂ1""BS&^¼xñÊ•+QQQÉvÈ“'Oụ̀åƯ?°µµ›0–ŸÆÆxñau‡råpíZf§FƯ»7Ú´ư‰(©ÄƸwï}X¤>̀Ô•Uck´î¢_"Q¦.«W¯˜âº‚ º»»W®\ÙƯƯƯƠƠƠÔTE—EÉà„‡Ëå̃ơë3sæd́HÊé… Æ5¢_¥&4T>é=Bÿ₫øå— ÊR;̣íÆnÑ/(³×dRƠ¨™\sYÑÑÑÑÈÈ@ddäÙ³g“=¤V­Zbs&ƒ£́3?w.ZµBưúé=ÆäÉI4Ëä5 "ÊVÊ“̃Ç­Z¡mÛtdæÅQ)Œ@„è—E”Ôr1O|ûöíiï$:Y2‚#¢ó%Ê.,‰2dôè$Ó€[[KMå7Ê´iIŒ!"ƯƠ¿’iÀ•gºrơhŒn€¢“%Ê.,‰2êèQ¹¯¿àà o«Q“'‹N’ˆ²Î®]I¦oƯJAåYeç ƒ«’éD™ ́½¸ysßúwŸ=“7œ>-:="Êjqqr{ï^4¼:<Á̉–ë¸.:A¢́%x:˜˜fff¦¦¦ñññ<à¬́ F¤rµơE§5Ç>Wn&"½$¯dƯô¯#åËÛ9 † €à+µk×®T©̉Æ<}ú´yóæÍ›7ư¥ÓáĂ10ïŒ̉VDúí́YÀ₫f̉åôDzLđÇ·oß8pà@ñâÅß¼yÖ:u*‡ÔR®ûK¤y-E{Ñ Ø+:'"ÊFU«‰Ñ1]·Xn±QN\8~öÙgÏ=;wîÜ9Åœ%½{÷Nă!AAAbs&JF9¸²)₫j ?”.Û·EçEDÙE9Œơ±ơ+Ç)öذ{÷âåË÷¡µ5^¿5eœ²jl‚&Ă1<ÙË—ĂÏ÷ï¿óæEt´ÖG'̉*ºâà́Ù³M›6ơññ¹}û¶fÇØØØ;wî¬^½ºyóæçÏŸ 6•ÛææØ¾ư#û½x!·#"’t‡$"̉•á_ø+ƠƯîƯ“Û11˜8Qt̃DÙ@E…cddäèÑ£ĂÂÂRưéóçÏG%:M2h‹áÀ9üÄåȘd°‰HG¬Á_øJaÚë *Oú™3qâˆôŒ GŸ'O°µµư₫ûïÿư÷'ŃܹsÔ¨Q666?~ü믿N“ W²Éµ0­œ\9å#é‚gxÖ}¥P›Ơ¨•ӀשóÉƯ‰tŒú8^¹r€¹¹ùúơëK—.­Ùhoo_¶lÙ té̉%&&†3ơ@₫UÀ•+Ú=¦T),\(×›FFœ ‡H‡8ÀAjÇqmR° V¯Æ·ß¾ỷ“QÑÇÛ·o¨^½ziå÷3 T©Rµk××$q”b~ú åËkưÈ# œdÊÂBôK!"­(ÄŒĂ¸$ Ƥ©oß$Ó€s5é›'!!€‰‰‰èÉÙÙÉíºu1n\:Ÿ¬_d—.¢_}‚3œ¥vTø ?¥ëá¾¾I&tlÖLôë!Ê"**]\\œ={öj1ׯ_?uê€R¥J‰N“ Î7ßÈóê8v,CGQ̃¬Ú±k×~YDôQC0äîIáe\ÎÀAbbäö_añbѯ(+¨¨ptwwđöíÛ̃½{ÿüóÏçÏŸđàÁùóç₫ùç^½zư÷ß̉>D9fèPlÜ(‡™ê«¤|pŸ>¸uKô‹#¢TxĂ{–I¡6b>FỷC‡D¿6¢L3JTM¯Ư˜˜˜¶mÛ>xđàc;)Rd÷îƯæææ¢3ưöÅT›ĐĐPggçô>*"B^w™¬5CưúYzD–±…²?eׯÄäA¦Ö¼|•*ÉaÆNz~(*d°ßơ*ºâhnn¾`Á‚B… ¥úS''§ ¨¿j$}¢¬W­Ê#Ö«‡5å}æ‰TFY5NÇôLV*VD‹ăó¤'§¢Â@ụ̀åưüü† V¡B…|ụ̀È—/_… †êïï_ÓàQR₫~1B\#³NB¹rrX¢„èJDï)«Æ>è3Y³ö‹Ÿ¾øB?ûLôë$ÊÍ㨑'OÁƒ<@dd$×§&!Ê–•Û©³̉Ơ«rY¡C±d‰èWLdèjB¾à‡ßđ[<0P>é_¼@ÏX¿^ô &Êu]qL†U# 1jñ”Cåâ/YFÙÑiéŔÛ'úE´ñăßø[ ÿÅ¿Y₫Ê“~ĂlƯ*ú5eˆª G¢œwäæÏ—Ăl¾¢\x]ÙˆrÖyœÿ?Haf†Q§Mùû¤kW¼y#ú•¥ G¢$6”ÛááÙùLyóbÛ69dŸy"Aª¢ªÔEh¶>×₫ưrÛÊJô+'J?D2eñ¶~}’c²E—.èƯ;ơ§'¢¡³ Ë£x¶>]Ó¦>\ñ́<éI×°p$zOù¼kW|óM<ë5ÈŸ_kƠư6SÅÑ–h9ƒràI-BÉ’r¨G¤~,‰€¤w¨Í̀°ys>÷³grûôiLŸ.úÍ 2íĐ.ñR¸{ś©ïÜ‘Û7obôhÑï‘ÖTZ8í߿˖-‘‘‘qqq¯_¿é³yóp䈾{—ă(û̀OŒ‹E¿%DzÎ>âO)̀¾1£<éçÍĂÑ£¢ß"í¨nG__ߥK—>~üXÖ®]ÛÊÊÊĂĂ£OŸ>C‡5bÊjÉ₫ܶ `Hˆ<xåʾ!Q¶úÿôG)̀ùªQ#, ööïÛ<éI7¨ëă¬Y³&L˜ U’èèèeË–y{{‹Nô²ƒÑậpvN2 8ÿF"Ê6…QXjŸÆiQi|öÖ­“Cô¤TT8^¿~}íÚµ¶‰‰‰´]ºÊ¸yóæ³gÏN“ộ7ơܹpuÍ!I&t̀•Kh6DúI9Œz2&×@ Éố‰¯¾RäÆÚ‘TOE…ăÊ•+'O|₫üyi»µµơâÅ‹óäÉ`̣¯3¢̀QN¢Ö F??¹‹D'D¤W ˆÔ®ŒÊÓ0MtFزÊỦ5QTT8̃¼y@Ë–-{ôèann®üQ³fÍêׯàÖ­[¢Ó$=Ñ­[’e”ƒcSvtúăüú«è„ˆôDô„GRxç3q°¬¤ü]tø0,ÑÇ©¨p à́́œêOK•* ,,Lt¤6lÀ–-r¨º>éÊ„¾û)zưQzư‰?}à#…¢Ä|Œ̣¤9¼HBª¥¢ÂÑÅÅ@ª½Ïœ9 „4́”(£^¼@Ïr¨ºªQăÔ)¹]¨èlˆt[<âÛ¡¾CÎϹơi×®ÉmÁư­‰>NE…cụ̀åœ>}zذa>~ü¸J•*£9µ¿^P₫.5 ‹N( ?₫ˆÊ•å°H‘ŒÈ€)‡Q÷C?å¥Gµ=ơëˡ脈RPQáhoo?₫|;;»Tjee5{öl''§ yáÂ…“&Mº{÷nµjƠ,--}}}¿û˜m›˜˜8v́ØÈÈHÑoeR¥ä¶«+æÎĐ')¦À£G0@tBD:¦*ªJm'8)»9ª“r ™×¯ñơ×¢"JJE…#€5k8p`À€nnnyóæ`aaQ¶lYOOÏC‡5T.'¬µ   ‡}ûöùøǿß¿¿gÏW®\™7o6_»v­æ.9éº#,‡"çúNè_~ÁŸfüPDf ¦(‡NÿƒDg¤åI¿y36m‘‚ê–´´´ộ̣̣̣̣i©œ̃*C¶mÛ–0bĈ h¶Œ7n×®]₫₫₫'N46N«t¾sçÎÂ… Ë”)Ăi€tƯñăæ?ÿ,‡*ó1ï̃É“·k‡¸8(fÈ'¢Tư¿•Ó4ªmuÚå~5=zà̉%u]å!C¦̉‹AAAû÷ïß³gOddd\\Üëׯ3|¨³gÏ7hĐ@ÚbbbR¯^½đđđ .¤ñÀ¸¸¸1cÆØÚÚ7NôûA™Ơ«WA©!:›ô23ĂÈ¡©ê₫̃#R¡¨)µâ¡èt̉íĐ!¹]©R1Ñé½§ºÂÑ×××ĂĂ£mÛ¶Ă† ›2eÊ‹/"##4h°xñâÄô_&JLL ¶³³KÖu²té̉>LëWÉ’%Kñ¼ùÓO?Y)!¤³e ̣åP´k‡~ưRID”‚r@̀/øE¹8µ®hØß¯xE<éIÔuébÖ¬YkÖ¬I¹=::zÙ²e/^¼˜:ujºo“bdµµ5€/^|́—.]úơ×_{ôèQ»víëׯ§÷…hæ¤TÚ·o_쇔L‰̣”̣:DV¯₫<4TtN3~|ÑƯ»M₫ưW½-_₫±÷w|ôèQæBYN>—Ị̂Œ¿£7yÚ$:yÚ‚]» ß½û~̣ %b̉ùOGG5õ\t j¡¢Âñúơëk×®Ơ´MLLâăă5m£gm̃¼¹U«VƠªUÓ₫˜¡ÓɶkºN~́xLL̀˜1c)2räÈŒ½–   Aï"%Q·®Ü¶±Áï¿[™í5+̉“'̉e‡Ü×®9¯] ooÑ9eÊÇV"±túsi…VRÛ&̣€¿Ë×CCÍ–,qæ‚„B¤üZOy…È@¨èVơÊ•+'O|^1 ‰µµơâÅ‹óäÉ`Ưºué:¦‘‘Qttt²íéu4×S={ö£Gæ̀™“lÉl̉-³fáĂḌ¹;ULÙacÚ4pÈ?‘Âr,÷ƒŸÆ!NtFY@ỷ/\ˆƒE'D†ME…ăÍ›7´lÙ²GÉ*¶fÍƠ¯_@zG7›Z[[§¼²@g­tæ̀™Í›7÷ïß¿bÅ¢ßʸ«W1~¼†„èäªÔ=x ·kÔ ‘ZÜÇưÁ,…º5Œ:m—/ß—ÚMˆÎ† › Çđđp|üI©R¥„……¥÷°áááIG̉†††j~”rÿ;wîX¾|¹Ë;vđ矺¸¸´nƯZôûDZ©PAnß¾-:›¬U¤V¬Cö™'Gq©}çD§“•̣åKPÎæÈ“RQG—‹/={6å5³p—(Q"½‡mÔ¨QPPĐñăÇ[µj%- ÀÖÖÖƯƯ=å₫Å“öÔxưúu`` “““»»{Á‚µyRKù[uáB”*]ó1`ï^́Ùó>46FB‚蜈DR£ö†wTQûúkøùÉ“éÚ|´¤/TT8–/_₫âÅ‹§OŸ6lØ—_~©ÙøđáĂ{÷îmƯºUS8–-[6½‡í̉¥ËÊ•+—.]Z¿~}͘Ÿ°°0OOO3³÷CƠ¢¢¢={fffV¸pá:uêÔ©SGy„ëׯV­Zu®,QGP…jÜ#FˆN(›́̃ că÷_‰‰hÓ»w‹Î‰H G8Jíê¨₫~Q¶Ø¸{÷âƠ«÷aưúưû÷÷óó Û¿ÿ₫ưû5ûöí+í`ee5hĐ ôÖÉÉiôèѳgÏnÛ¶mƯºuïß¿úôi77·~Yñ¼¼¼J•*µGº„Cº©H(‡B8 :¡l• _\Ư³ß~‹Ơ«EçD”Ó\ạ̀/₫•¿ñ·èŒ²ÑË—̣ÍZ·¿µ(‡©¨£½½ưüùó“ÍÔ-±²²={¶““SÜ·oßyóæ9;;ûùù½xñ¢GëׯO9¹#éºu렜Πîă(_äo¿á¡î-A”¿ă÷Û{1ëÓ€˜Qô{÷âÚ5Ñ ‘1ÊÀr,Ù*22̣×_=~üxhhhtt´……E±bÅj×®Ư¿]YÁÅÅÅ…ó8æ¼°0äÏ/‡É₫]‡††êôÔtiY³ ó:T/ëó‡¢Ëtèsy‹·yG ăo¬¦«!Y(Ù‡²oZ´ª;'½^1ØïzƯªÖ°´´ộ̣̣̣̣©é•HôIʪѰúưôéƒû÷å™ÀÙg †²j܃=úZ5¦Ô¼9,$äIO9IE…ăÏ?ÿ¬it́رH‘"ø°¾ Ñ')‡QƒzơD'”æNÅ̃½8÷a₫‘B…đÏ?¢s"Ê^ÊaÔ1P¹`Œ!đ̣Ẫ½8tè}hi‰ÈHÑ9‘aPÑßg¾¾¾Ë—/_¾|yKH¥ôùçr»\9̀-:!!”óX=~ ÅØ/"ưS •¤v1[å¢3@¹„LT>LFB”½TT8vêÔIÓx \ƒ(MC‡"$D¯^@Ê›U«Vá?D'D”-&bâe\–Â{¸':#a”'ưöíH碼D¡¢ÂqÈ!:t°råÊgωN‡tÀ¾}XºTÙËññr»C¼{':!¢,v'fb¦Â0ê´)ïơîçÏE'DúNE}‡  `Á‚ÁÁÁM›6uuuµµµ5J±²̉²eËDgJj¡W%:506ÆŸ¢mÛ÷aîܬ¦IÏÔ¼@Ă<* ~ư÷íx̉SöRQáxPÑ_#&&æÂ… ¢3"US₫M±ṃæJ´iƒ°råûă-I(ĬÆê‚à°P¯Æ•»wó¤§l¥¢[ƠDÚSVŸ.]D'¤*+VÀÄD+WQPVNpꋾ™8˜¾™5 y义’ $ÊZ*ºâ˜åÉ0Ơ®-·óçGp°è„T(.N.®/^ĤI˜>]tND× Í¤vnä₫œp*¹˜ù¤ Á°aX¼XtN¤TT8>\t ¤¦OÇ©SrÈaT•˜(̀˜V­P«–蜈2b1ÿ…¿¤đ?ü':#•RôK– eK4o.:'̉;¼UMºäâEL,‡́Çó ËmåuZ"Ưqw‡C¾¬ÀaÔiSN®>H”UTtÅQZ9&m pqq)W®\®\¹D§L9MÙ[O9}#¥ÎÑ¿₫*OÎ>ó¤ƒJ¢¤Ô¾ˆ‹¢ÓQ; lƯ¯¾ẓ¤§,§¢Âqụ̀tLư_ªT© ”.]ZtÖ”s”b–,³³è„t‚§'üü°sçû_#¤S”b¦cºrÁú˜/¿Ä̃½X¿₫}È“²–®̃ª¾sçÎ7ß|ɵ9 †̣úróæ2DtB:ä÷ß“¼}5jˆNˆH+ù‘_j×F퉘(:#±ńíå°R%Ñ ‘QQáøƯwßµøĐ#ă³Ï>k×®Ư€:wî\¸paÍÆ5jôëׯ}ûöùóçđêƠ«u\_É0tè€ØX9ô÷ÎyûVnŸ9ƒ%KD'Dô ½Ñ; aRx'Dg¤c”KÈ\¾Œ™33~("%ß|ó͵k×té̉åđáĂsæ̀ṇ̣̃1cÆ_ưåéé àêƠ«mÚ´™={ö_ưU³fM¢³¦l÷ë¯IV]æ=— R¾qƱ‹(©Ù6l[ùºÄdŒ̣¤Ÿ8—/güPD‹-zøđa¦M›–G1“©‰‰É¨Q£)½téRyóæ3f €₫áT^zîñc|÷²j̀åjLœ ˜Ô* Q_á+)dƠ˜ÊinyĂ²„ ÇS§N(T¨±q̣¬ŒŒŒœœœ\₫đS¾|ù¼|ùRtÖ”½ ’ÛÊé)#ÜƯ“Lb!x"5°„¥Ỗ‡}¢ÓÑmŸå„%<é)óTT8FEE¸víÚ7’ư($$äÊ•+?\qÚ·oMgG̉WÊßq“&¡fMÑ é‰“L^ €è„ˆ’P£¡Êc(c† C3Å»¨\™(TT8V«V @lllÏ=-Ztîܹ\¾|ÙÇǧ{÷î111*UªÀÛÛ{₫üù)":kÊ.ÊÏÖƯ?₫(:!½q̣¤Ü~₫}úˆNˆè½r('µK Äbpɼ¬±OqƯöí[t́(:!̉e*Çq̀˜1çÏŸụ̀å›7oV¬X±bÅä¹ö́ÙÀÅ‹ïç€íĐ¡ƒè¬)[ €GäPÙ7²€ra²µkѲ%ºtº±{×¥đ.îÎH¯(Oú;±z5¾ưVtN¤›TtűX±b+V¬(đ‘{gfffS§NƠ\•Ô¨R¥JË–-EgMYo÷nụ̈‹r@L¶P¾­_~‰7oD'D-s0G 9 &;(OzOO<|(:!̉M**¸»»£´Ô® äÉÀỷS¨ë£$((hÿ₫ư{ö́‰‹‹{ưúµèŒ('(ÿFè×íÛ‹NHï-]dÍï D'DGY5~‰/{¢§èŒôÜŒI&t,VLtB¤kTW8úúúzxx´mÛvذaS¦LyñâEdddƒ /^œÈ¿Œô¢ÿ*œœàă#:!¡\BæêUŒ':!2 ĐHj[Àb+¶ÎÈ |_ `à@Ñ ‘NQWá8kÖ¬ &<~ü8ÙöèèèeË–y{{‹N²ËÔ©8wN¹$PR₫I6{6„Xp‡¥0‘¢32 Ê“~åJ́Ù#:!̉**¯_¿¾víZMÛÄÄDÚ.ơqܼyóÙ³gE§IYḯY(ÿ(à•e=“Ûơê‰Î†ô_‚Fb¤ruÎ{ûVn·iĂ_¼¤-+W®LLL466|x́ر!C†h DzeËN“²F²q| ¢"‰²“ü÷ßăömÑ ‘Ø„M›±Y 9 F=”'ưÔ©à0TJƒ‘z&G k×®]7£­¬¬víÚåää$:ÓOpqq …ª=xdÖÙø7ú±^”k×P¾¼fÏ'ÄE²ésy…W¶°•BVé’'KÎÿZÖuû]¯¢+öööóçÏ·³³Kơ§VVV³gÏVƠHÚP₫z:sFt6”R¹r˜5KÙg2MY5Â!ÑéPrE‹bùr9äIO£¢Â@Í580`À77·¼yó°°°([¶¬§§ç¡C‡6l(:AÊÊßGS§&Y0†Td́XÔ­+‡¶¶?<å0êïñ}Cđ—¹ ˆV­äP1Ÿ2‘̀TtÉYZZzyyyyyˆŒŒ´´´e%å%ăjƠ0eè„( ÇÉe₫«WèÑ7Ήt \¤v”™ù¢3¢Ú³ÆÆïïS'$ m[üù§èœHeÔuÅ1VzÆÓOÈ!oRëeG§M›đ¿ÿ‰NˆtŒ¼nC_u7EgDŸ ª¸{7~ùEtB¤2*ºâs₫üù+W®<₫\s­Ñ̃̃¾B… •+W¶°°eÖ´iX½ZÙóZg$&Ê×»wGÓ¦°·é†X±‹¤bt…̣¤0ơë£L™Lô‰* Çwï̃m̃¼yåÊ•/^¼HùSssóöíÛ>Ü–½¬tÖÛ·IîJṣsđ 7~ßΟŸU?iiIí×x-:J‡¿ÿFïÛ®®<éI&₫Vơ¥K—4i2sæ̀T«F111›7onÙ²å¥K—D'K”'Ü₫á×Ó5¡re9äçGZPˆ‚!V°¥Cơê¨WOỷ“DpáøâÅ‹~ưúưûï¿̉333''§²eË:99™™™)÷üî»ï^¾|)6aÊåoœ¹,n:¥KË!o\Q”Ucwt_‚%¢3¢t @ƠªrX¨è„H6lˆˆˆĐ´›4i²aÆ«W¯9rdçÎG¹víÚÿ₫÷¿fÍivxưúơúơëÅ&Léåî.·“ÍF:F9ƠmPF©T=È—ªl`³Œ¯«”KÈ<~Œï¾©€àÂQZZ°S§NK—.­^½ºQ̉ âUªTY¼xñ—_~™l̉ 'BÙ¿à₫}Ñ Q&);:-X€Ă‡E'Dª3³ă¸¾oé6åIÿë¯øăÑ ‘h‚ ÇhC‡Mc·áÇk÷Yzè“'1s¦²oµPviÔHt6¤.×pmÆI!‡Q뇸8¹Ư¡bcE'DB .ß¼yÀÎÎÎÑÑ1ỨííóçÏ 22Rl¤½/¾ÛÊéI·ÙØ$™œ}æI¡<ä%Îoá–èt(k˜˜$™ó&?̣KíˆN‡r‚“~ưUỷÁ·ª÷́Ù#ú ¬¡üƯ1c*Vå˜ï¿Ç̃½̣dàụ̀áÍÑ9QNP£ƒ1ÊcH¿yzbï^y2p##̃b2 ‚ ÇR¥J‰~( ØÛËí/¾À„ ¢¢vèü§Cd$ºvÅ–-¢s¢́ơ9>—ÚåPn6f‹ÎˆrÔÎÈ•K ¼E øû‹Î‰roUSf5k†đp9äªJyÁaëVxq6}ÖíB"…WqUtF$À»wr{ß>®dm(X8R¦lƯ¿₫’C̃­0hÊÑ¢$OÙ‡}B^H„b Y²•¬CB2~(̉,)ă4÷$%¬ GÈmẻ#-ĐBjG‚ËÀº äöçŸgü8¤+X8RÆåË'·÷í ©Aƒ=Z9̃Rï(ÄlĂ6 XˆÎˆswÇôérÈ“^ï±p¤ R₫v6 ͉NˆTbΔ-+‡ÊYHÇ)«Æ^èƠ]DgDª0qb’iÀ e'”Ê™?ÿ?ÿ,:!R•ë×åv²yáIgƠ†<×s~ä_‹µ¢3"9yRn?.§ÇX8Rº›¤0©²ÇëâÅI†P‘§pJ Ÿá™èŒHu”'ưºuؾ]tB”=X8Rú`Î9ä€ú(å4à́Ê Ë.ââ$L’B£¦Q~#|ù%¢¢D'DÙ€…#¥OƒrûùsÑÙYZ&™œ}æuVeT–ÚwqWt:¤jÊiÀ--EgCÙ€…#¥ƒ̣«íZN·BỴ̈ƠWèÙSY;ê 倘%XR%DgDªÖ¼9†•Côú‡…#iKy₫wé‚^½D'D:aƯ:|ö™Ö©#:!J‡\È%µ›£ù é€Å‹QBñ÷Eụ̀¢¢,Å‘´̉¸±Ü¶°À¶m¢"&·OœÀ̀™¢"­t@‡XÄJ¡?¸1i뮢Gõk7NtB”u ¥pܾ}{—.]ÜƯƯ¿øâ‹ &¼|ù2íưcbbÖ®]ÛºuëJ•*Ơ­[÷Ûo¿=qâ„è!̀‚8tH#¹T¥—²Ïüĉ¸|YtBô «°êü!…Cé¥<égÏÆ±c¢¢,b…ăÂ… 'Mt÷îƯjƠªYZZúúú~÷Ưw111Û?..®wï̃?ưôÓ³gÏjƠªU²dÉ¿ÿ₫»o߾˖-ưR ÂÈ‘rÈaÔ”AÊy›*U ¥å1÷C?)dƠHóL1kSưú¢³¡,¢ÿ…cPPƒƒĂ¾}û|||öïßß³gÏ+W®̀›7ïcÙ¶mÛ¥K—ªT©°bÅ56î–f.@IDATkÖܹ́ӯÆfÙ²e7õư‚rZ™2rûÚ5ÑÙîJ6S<û̀«X!’Ú'q2G"ƒ–??Ö¬‘CôúAÿ ÇmÛ¶%$$Œ1¢À‡UÆgmmíïïŸêCöíÛ`âÄ‰æææ-¥J•0`@||¼¡Ư°Vç³gĂÍMtB¤Ó’®MY\ùG ©F gy\Ă$Lª…Z™8º̃½Ñ¹³²vÔú_8={ÖØØ¸búA“zơê…‡‡_¸p!Ơ‡„††ZXX¸%­’J•*àáÇ¢_P᱑ÛơêàÑ ‘Ø·Oj½{‡ND'DIEQ©í÷ñ£èŒHçmß¼yå°IÑ Qæèyᘘ˜lggggg§Ü^ºti|¼ üå—_¶('.\¿~@‘"ED¿¦̉¢^¿–Ă€Ñ ‘̃Pö“ưưw¬^-:!zïk|ựoÅ ¸‰ƒÉ”KÈ<ˆE‹D'D™`*:́o£¼t°¶¶đâÅ‹TU¶lÙd[NŸ>íăă“;wîöíÛkó¼...ɶ́S\hQ¿]»,÷íË/…!!¡¡¡¢sÊœG‰NBBœ¥ỹ<=”/Ÿ?¦H™v(ï¡Í›¥0$4$:~Úë=ø ‚%œ5m//T¬ø¨xñØ̀2G5õ\t j¡ç…£fè´……E²í–––^+/©}D||ü¦M›æ̀™?₫|{íK ử3îƠ+xyÉab"gÑIegg}xúcåJ  i­QƒĂơÅJ@‚ru¢̣:çÍÄñ(ëéÁo0__¹sJÆ…uë¤Oùµ̣ ‘Đó[Ơ666FFFÑÑÑɶGFFâĂuÇ4üư÷ßmÚ´™1c†½½ưêƠ«[¶l)úå[[¹­œ¾‘(+ơïÿjĐ 9dŸy¡L`"µW>]™¬)ëúˆŸ~’Cô:JÏ GSSSkkë”W#""Hă¬Sz÷îƯŒ3zơêơøñă¡C‡úûû×®][ô«É Ê3ùûïѰ¡è„H½5*ɄʼnÎÈ@)W£ö„gÓ覢3"½5nê֕ä£H7èyáÀÁÁ!<<\S)J4]öR}HBBÂÈ‘#ׯ_ߨQ£¿₫úkÈ!̉¼<úMyƯƯÅóç‹NˆỗÅ‹rûÁ(¯AR¨†jRÛ¿âWÑ‘S.!ọ́%zô¥“₫5?~ü¸´%111 ÀÖÖÖƯƯ=Ơ‡lذ᯿₫úú믗-[–ÆUI=óư÷¸}[oƯeG§+°gè„ ÈTL=‡sRøEgDAỷoÚ„Í›3~(Êyú_8vé̉ÅØØxé̉¥‘–Xöññ ëÔ©“™™™fKTTThh¨fØZbbâÆóåË7v́XѹçœC‡°p¡êVŸẻyÿư'·Û´á¿¿œqg½á-…\Wr’̣,ÿúk$½)Hª¦ç£ª899=zö́ÙmÛ¶­[·îưû÷OŸ>íææÖ¯Ÿ<„0 ÀËË«T©R{ö́y₫üùƒ̀ÍÍ»wị̈h:tè¡Ö7–Û¯^‰Î† MîÜøưwt́ø>46f혪£ºÔ¾û¢Ó!ƒsà€<¸µ5Oz¡ÿ…#€¾}ûæÏŸÿ?₫đóóstt́ѣLj#43̣¤¤¹îs-µ…™ơrˆŒr@̀¦MøÔXs¢lĐ¡¾ưV ÜȈ_#ÙJ9 fV(Œ!ÊcÄy2pôºÂ(‘TVsqqÑ¡y•UcñâĐơ‰¾?&44TfAÓ3©|(&&V¯V gΈÎQ?™À$ïßg8ü‹•?åÉ¢Bzü¡äÎwï̃·Ë”ÁÍ›¢̉n}×g!ưïăHi¨WOnÛØèmƠH:#>^nŸ= oïŒ>¢ ÚHU£Œ’UD9́í[¹}ëF} GĂ5{6cÍṇ̃¥è„ˆ´ÏüÔ©8w.ă‡¢VbåÈăÖ¥ ’H åI¿`¥‰…£ºv ăÆÉ!;,Ü»'·«UËđa(™‡x8¥Ă¨I=”W.5 ¥‰…£*_^nd' R±bŰ|¹ra²,¢ś?J*bcƒå'½±p4DÊsrÁ”.-:!¢dD«Vrhjó?d+å0ê)˜¢\0†H ºwG·nrÈÚQµX8cÅg̃¸1¼¼D'D”*å2ññpt3‰Ô®†jS1UtFD©øßÿ’̀gk+:!J GẲ¥K’Nˆ( ʬÿ₫‹_~Ṇ„§r oR“)W xơ sæˆNˆR`áh@Ö®ÅrÈ1¤”ÿL À£G¢̉1;±s5VK!Äú)Oú±cqưºè„()†âùsôé#‡¬Igüư·Ü.RDt6ºä̃uDG)ää;¤+nƯ’ÛåʉΆ’báh( Û¢³!̉^ơêøá9dŸy­åFn©½»•ăcˆỒÅóçË!OzUaáh”gƯرIŒ!̉̃̃¨RE P–‰0 5Z‹Îˆ(¾ÿ Ê¡¥¥è„èúïóÏåv¹r˜5KtBD \Bæñc|÷è„TÍîR»(®À Ñ¥Û¡Cr;* _}%:!ÀÂQï †9¼zUtBD¦́™ûë¯øăÑ ©ÔDL¼„KRx÷EgD”AÊ“~Û6¬_/:!bá¨ßæÎÅ’%rÈ1¤óââäv‡ˆêü_gb¦r5é:å7W¯^¸}[tB…£>3FnGFΆ(óLLđçŸrha!:!Ơụ̀Mü'x":¢,pô¨ÜvqÁcᨷ”b¶nå7,é‹6mĐ¿¿r¼¥‚r@̀*¬*ˆ‚¢3"Êơë'¹“^,úIy^ơê…/¿QZ¹… ËaåÊ¢ReƠؾŷ¢3"Ê2³gĂÍMK–cᨇ¾øBnÛÛcíZÑ e¹‡åöÅ‹˜,]*:¡l×}Cûv'3q0"Ư&·OœÀO?‰NÈ`°pÔy«WcçN9ä€2PÊúC‡"4TtBÙh;¶¯ÅZù¥s@ $åI?a®\a`á¨Û<§§²j$ƒvA14D;ùF#úKÈsú³j$CvçÜ®XQt6†…£nsr’Û'NˆÎ†H,wwüø£êiŸy Èë‡úÁOt:D"•,‰E‹äPOOzuaá¨Ă”gÈ„ ¨][tBDÂM„5åĐÁAtBYL9Œz†´€¡Œ"ú˜áĂѤ‰›‹NHß±pÔUÅÉíJ•0c†è„ˆTâÔ)¹ứúôP–©€ RÛÎK°DtFDªđ×_rû¿ÿĐ¹³è„ô G4h<Ă‹E'D¤*Ễ¾k×bÇÑ eñW¥0!¢3"RåIïë‹5kD'¤¿X8ê={°b…r@ Q*”'F—.ˆ‰P¦"pfÉ/bˆRPô}ûâÙ3Ñ é):&1mÚÈáÿ‰NˆHµüG̣æM¦ÔE]©ưOE§C¤RÇËm½ëá¬,uŒ±â=:É‚1D”D‹¨ w ÔƯñ–Ê1}ÑW¹` )Ơ©“dtœÎôªÆÂQ—(Ͼ}1g脈Tị̂e/.‡:8Ï›²j́ŒÎ«±ZtFDªvêT’?E'¤wX8êŒ5䶃VóëƒHÊ%d®\Áøñ¢J‡&g1‡ùvl‘¸|Ynß»‡!CD'¤_X8ê†iÓpæŒ₫û¯è„ˆtˆ²Ïü¬Y VaÑA”ÂhD‹ÎˆHg(OúeË’tx¦Lbá¨Οǔ)rÈaÔDé¦üc«nƯŒ'§ÜÁ/xI!‡Q¥W´âO­V­Dg£GX8ꀪUåö½{¢³!̉Eɺw¨¾Ï|i”–ÚWpEt:DºÇÜ<É®ª?éu GµS₫[_¶,É‚1D”}û¢cG9Tñ׈r@̀Oø©<ʋΈH'uê”dé(Ÿôº„…£ª™™Éí–-1h脈t¯/̣ä‘ĂfÍD'” ;ØIíº¨;ăDgD¤Ă~û-É„ÊÉz(cX8ªW»vˆ‹“Ă½{E'D¤”KÈüơ/P=Đă%^Já1‘ÎSöp₫ûoüø£è„t G•̣ñÁŸÊ!Äeåé4|8‚ƒE'ỗfl̃„MrC”E”'ư?àüyÑ é2jôèú÷—CVDÝ̉%¹]ª”èl _ăk)dƠH”µ”3º*‡œRz±pT£"EäöéÓ¢³!̉?+bæL9TAŸykXKí8 :"}S¼8–-“Cœôº…£ê(ÿ5ÿđC’cˆ(ËŒ/¾ĂÏ>˜‹rơŒhŒÆ“!̉Wƒ¡eK945nbá¨.… Ëí*Uàí-:!"=¦\BæÅ ố)$ W¸Jí̉(½ E¿/DzK9̀4>íÚ‰NH±pTWWüó;':!"½§́A¼aFŒÈá篪·pK ƒ$ú!̉sÊ“₫Ï?Ñ£‡è„t GµØµ ·ä¯ˆ!Ê)Ê“íçŸñæM=óa>yx'Äå åI¿i=Naᨠ±±hß^•Ó7Q¶óơ•ÛVV9ö´ĐHj+§o$¢́vL1Gªr@*} GUÈ•KnïÚÑ ”1|¸æÈxK倘ØhÑï‘©[“'Ë!Yk…£xʯưû£m[Ñ  E‹P²¤–-›­Ï¦¬»¡[wtưú‰ δi¨RE•ƒS) ,Kö¯våJÑ ¬;wäöÍ›=:›ÇRÛ VÿĂÿD¿r"¥„úÏ?I–̃ aá(̉äɸpA>‘Sö™Ÿ7Gfù3̀Ă¼£û¯E¿f"ƒ¦<é“-öK©bá(̀éÓ˜>]9ŒHÂĂ嶇GÆ“¸1̣…L£&RƒØX¹Ư®ǧ~ GajƠ’ÛÊé‰H$;;¬_/‡YÚg̃ nRûnˆ~©D¦¦øă943º±pCùeäă''Ñ ‘ä›oе«fQí¨3s• Æ‘XíÚ¡_?9ä ë4°p@ù/2Ù?V"R…Í›‘7¯6l˜ÉăYA²ŒÂ(ѯˆ’đñƒƒV­*:!µbá˜Ó”+¬›™%¹R7t{yA#8"úµQ*₫ưWnŸ?)SD'¤J,sỔ¥đ÷—ĂwïD'DDiPY=7ofà°a ¶È‡ä€"SôÓ¦áï¿E'¤>,sNh(†•C£&̉ׯËíôÏ ₫/z¢§²j$R?åÔx5kÎF}X8æœ%ä¶rúF"R¯²e1g¦³ÏügøLjó5‘N(\¿ü"‡(“ Ç¢ü—÷ăpwiiôh4h ‡ÖÖZ>N9ŒzF5@-HDb}÷]’åY;*±p̀  Èí51i’脈(](.FDàë¯?ùˆR(%µË¢́\̀ưˆ(v킉‰¶j%:!Ơ`á˜íúôÁóçrxê”脈(”½’7oƦMí;#‚,…×qD¤k”KÈøùaùrÑ © Ḉµ};Ö®•Cˆ!̉aʸG¼|™ê^ᯟñ³ü ˆ!̉YÊ“~đ`Ü»':!`ᘢ£ñå—rȪ‘HçưïrÛÎ.Ơ]¡™Ô~§¢3&¢LÙ»Wn;;‹ÎFX8~ÔöíÛ»téâîî₫Å_L˜0áåG®.¤ÁÂBnûù‰~=D”yƯºaäH9LÑg^9 f ¶@íKD*Ơ²%¦M“C”aᘺ… N4éîƯ»ƠªU³´´ôơơưî»ïbbb´?‚̣ßÖàÁhÑBôK"¢,1oÊ”‘C©©¬¿Á7_á+ѹQ˜<5jÈaÁ‚¢…c*‚‚‚|||öíÛçăă³ÿ₫={^¹reÖkU¨ ·‹Ç̉¥¢_e!å2·oĂË @Ô‘¶ÙÁn=Ö‹Î’ˆ²̀éÓrûéSôí+:!qX8¦bÛ¶m #FŒ(đaqăÆY[[ûûû'$$|̣áaa#¯^•ĂĐPѯ‡ˆ²œ²Ị̈¢E?{'¤ áe1åI¿f "#›eüXº̀(‘C6RhÛ¶í;wNœ8a§èü>jÔ¨Ư»woÚ´©jƠªi<60uo+…̉%Ar‹rÏxa‡ä먼n‘ÆÆ ¸P••[̃âmnäÎđSƯ˜€ă¤]ü¿k F†øọ!ŸrË5\+‡r>àSyGÇ$[BCS`¢ưï̃ÅçŸ'Ụ̀́ Èø¯\Ir‹@d$,-Óx¬Ño«¥Í11È“††…cr‰‰‰nnn¶¶¶'NœPn÷ññ™?₫¬Y³:tèÆĂŒ€Dƒï:Kd¨î”BÉà̀†ˆTÊ-[Ahm€5oU'o“âoMkkk/^¼Hûáøoˆˆ4~Ϊ‘Hϵ„ß ¼Ÿ Ü0¿ñY8&§:m¡œJ`ii àơë×¢$"5̣\…a‹E'ADÙoOÄŒDèƯEÓ̀BÏØØØEGG'Û‰×ÓVÚ¥tPPè×AI„††:sæV•Ñ·ÅđCVĐ·ÏE/đCQ›é€‹ËzĂü¦çÇäLMM­­­S^YŒˆˆP §ó%"""ÅÂ1áááJQªù‘è́ˆˆˆˆÄ`á˜FÅÇÇ?~\Ú’˜˜`kkëîî.:;""""1X8¦¢K—.ÆÆÆK—.ƠôkàăăÖ©S'³”qI…““ÓèÑ£gÏƯ¶mÛºuë̃¿ÿôéÓnnnưúơ‘0,S×·oßüùóÿñÇ~~~=zô1b„eÊÙ䉈ˆˆ  ÇjÓ¦M›6mDgADDD¤́ăHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáHDDDDZaáH¡yóæ¢S äø¡¨?â‡BêÁ‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´Â‘ˆˆˆˆ´b”˜˜(:}ăââ":"""Ê^AAA¢S€…#i…·ª‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,‰ˆˆˆH+,³̀öíÛ»téâîî₫Å_L˜0áåË—¢32,111k×®mƯºu¥J•êÖ­ûí·ß8q"ånü˜Dyüøq•*UF̣GüPr̃Ơ«W‡ âááQ­Zµ=züư÷ß)÷áç’“̃½{÷믿v́ØÑƯƯ½aÆÇ¿sçNÊƯø¡ä€—Ë—/§úSm>ư₫˜L¦N*:}°páÂ9sæDFFV«V-&&æÔ©SgΜiÓ¦™™™èÔ B\\\Ï=ẃØ_½zu++«3gÎ́Ü¹ÓØØ¸zơểnü˜DILĹééR¢D‰âÅ‹Ÿ9sÆ×××ÍÍÍÙÙYÚ‡ŸKNïÙ³§¯¯¯™™YµjỜ̀̀;¶uëÖêƠ«*THÚJÎX¼xñƠ«W»téR°`Ád?̉æ#Đÿ)‘2íÖ­[eÊ”©[·îÓ§O5[¦OŸ^ºtéiÓ¦‰NÍPlÚ´©té̉Ưºu‹Öl¹}ûvơêƠ]]]oܸ¡ÙÂI ß~û­té̉¥K—5j”r;?”œ÷êƠ«ªU«V¬Xñܹs-—/_.W®\íÚµăăă5[ø¹ä0Ío°áĂ‡ÇÆÆj¶œüP²ÛëׯÏ=ûĂ?h~Y]ºt)ÙÚ|†đ1ñVuضm[BBˆ# ( Ù2nÜ8kkkÿ„„ÑÙ„}ûö˜8q¢¹¹¹fK©R¥ /Ư°æÇ$Ê;w.\X¦L™”?⇒ó|}}#"" P¥JÍ– *´hÑ",,́êƠ«-ü\rØ… ôêƠËÔÔT³¥V­Z®®®÷îƯ{ñâ…f ?”́Ö¦M›îƯ»oÙ²åc;hóÂÇÄÂ1 œ={ÖØØ¸Aƒ̉“zơê…‡‡k~Pv µ°°pssSn,Uª€‡jB~LBÄÅÅ3ÆÖÖvܸq)Ê%ç;v̀ÈȨ}ûöÊsæ̀ ªX±¢&äç’ĂH5"€ÄÄÄW¯^K¥$?”́6cÆŒåË—/_¾¼víÚ©î ÍG` Ç̀JLL ¶³³³³³Sn/]º4U e«_~ù%埉ׯ_P¤HđcgÉ’%7õüé§Ÿ¬¬¬’ưˆ×®]³µµ-X°à¹sç~ươ×¹sçî̃½;&&FÚŸKÎkƯºu&^q̀,Í_êɶ[ZZxưúµè N||üúơë===£££gÍeoo~L"ÄÄÄŒ3¦H‘"#GüØà‡’³̃¼y 88ØÏÏoö́ÿ·wïAMoÀ7€J°%P¨V”"„R¥"¤¾¢†; -p@oµT¬b/­̉Q‚è°¶Û)^†, •ˆx‰Xµ#  EđBªT0̣₫±Ó3ù%@IƠïç¯={6çlÎc;»g7¢‹/–——ÇÇÇ777̣É'4"ˆ‹₫)”””'O¸ººFEEùûûs¹Ü‚‚‚²²2ÚA186!xI„ÇgeaaÁápÚÛÛµêÛÚÚÈ?g€̃\¼xñ믿nhh7nÜ;˜WU&ư‰D÷îƯËËËcV,iAPôÏÔÔ”RRR|||hyÍ5R©4??ÿøñăˆ‹₫}₫ùç—/_̃¸qă²eËhT*Z¿~ư±cǃc‚—$Lq|V&&&<O÷/ …BAaÖUÁpS*•ÉÉÉK–,‘J¥ñññÅÅÅ/8#LzVYY™——·jƠ*f½….EÿFmjjÊår…B¡f½ŸŸ!¤¶¶– .z×̉̉"‹™¬‘bcc×ƠƠuôèQ‚ ü° ÁK&$C`́رr¹œ₫Ë`466̉S†îƯK¡§§gÆ đơơ-))Y³fî(¤OôG/²²²øÿ˜?>!䨱c|>?$$„6CPôò˜1#FŒàp8•ô¿—îînzˆ¸è“\.'„ØÛÛkƠ;88BZ[[é!‚bplBđ2„ ‰ăđơơU©TLZ­.//·´´tww7tï^ ?₫øcIIÉÂ… 333ûú«ả§ &̀û_3gÎ$„ØØØ̀›7oÖ¬Y´‚¢B¡P¡PܼyS³’nẤµ‰¸è“½½½±±q}}½Z­Ö¬¯««#„8::̉CÅàØ„à¥“¡w 477;;;=~ü˜Ö́Û·ÏÉÉ)55ƠĐ]{)ôôôøùùM›6­£££Ÿf“aUWWë₫r ‚¢ׯ_wrrŒŒ”Ëå´æÚµkîîîÓ§O—Éd´qѳU«V999íÙ³‡ùñ›7o ‚·̃zë?₫ 5̃lÚ´©×_a‚—!Lơÿ₫‰ƒ“““#‰lmm½½½oß¾-‘H\\\rrrt—åĂkiiñööær¹'NÔ=ûÁ,Z´ˆ–&ª©©™?₫{ï½·sçNÍzEÿ¾ưöÛƯ»wóx<öööK—.q8œ;w3m}’Éd₫ù§½½½‹‹‹\.¿|ùrOOÏæÍ›cbb˜f~l̃¼ùÈ‘#‡Ö}E›M^ø0'%%º/www{{ûœ={ÖÄÄ$88X$éîx Ă¡®®.??¿»»»¥7ÎÎÎ̀*„É€Z[[:Äçó4ëưóđđ°±±¹uëVuuơÓ§OÁîƯ»½¼¼4Û .údff¶`ÁBÈưû÷ÿư÷®®.ÔÔTºh‰ èGYYÙơë×###ßxă ­SlBđ‡ #À Ç+H€$À G`‰#°‚ÄXA⬠qV8+H€$À G0¥R™——·|ùrooo77·€€€•+Wæäätvv²¿ÈÁƒù|>ŸÏ×[Ïëëëùÿ¸pá‚]oÄbñ©S§N:ơ×_ơƠ&??ŸvÛÅÅE¡Pè6 …´Ajj*û[§§§ÓO}üñdž~ đ@âSSS”””tîܹ––¥Ryûöị̣́r‘HpúôiCwđù“WWW×W???cccBˆJ¥:wîœÖÙ††©TJËÁÁÁ†₫BđÂBâĐØØ¸hÑ¢ææf¦†f3ÔƒÖ­[W[[ËæR£G¶µµµµµ3fŒ¡¿Ös€Çă½ûî»´\^^®uö̀™3´`kkëææfèÎÀ ‰# €H$joo§åđđđªªª³gÏ&''=̉ÑѱnƯ:6— -+++++ËÎÎ~öƯ»wO©Tä™èíÖ̀Pâ™3gÔjµæ© ­6É#°u₫üy±XLË+W®Ü±c‡³³³±±ñ믿±{÷nzª±±±©©‰–5_¡S©Tééé³fÍJOO'}¼ăØƯƯ——=sæ̀©S§†„„|öÙgZC˜×”ÉdŸ~ú©———¯¯ïŒ3öïß?ˆï¥yA…B‘’’îîî₫₫ûïïÛ·¯»»{·îëƯÁ„„Í7wíÚÅçó™\|é̉¥|>¿£££×~2³Ơr¹¼ºº©ïèè¸té-Ï;—©ïéé9~üøâÅ‹…B¡›››P(\¼xñÑ£G5¿QÿO£Ÿ3d2YrrrTT”»»»ŸŸ_|||MMÍ3₫K€ÿ,Cwyyy´Àăñ>úè#­³sæ̀™={vKK !¤®®Î̃̃^«Á¦M›=ÚÏơ•JeLL̀µkטúúúúúú_~ùeË–- .ÔjßÖÖ}çÎzøøñă]»v555íØ±cp_P¡PDEE544ĐĂÚÚÚÚÚÚ7nĐLwXo͆………@  /8–——3S̉‰„yÚÙÙ¹ºº2í‹‹™C©T*•J+++ÅbqFFÆtI"‘lذA&“ÑĂööö»wï–––.]ºtăÆĂ÷(ÀP0âl]¹r…̀̀̀t́ß¿¿      00PëTuuuÿY#!$;;›f¦¦¦¾¾¾‹/2e !D­Voß¾ưÖ­[Zí%É;w¬¬¬¦OŸÎô'??Ÿ™·¨ÊÊʆ†›)S¦Œ5V8q¢ªªj˜n½bÅ̉̉R.—KE"Qii©©©i_탂‚hAs󂣿7ZưÀˆ#°̉ÖÖÆ”±Ëåæææ†††N™2¥¯¼“fi„ÂÂÂüü|§¦¦¦1ƒm ccă­[·9’viÆ ´₫êƠ«̀¥d̉¤I4k$„888xxxĐ²æ*̣aº5K–––„µZMS榦»wïB&L˜àââ´œ;wnZZZZZZll,­ikkc6Úüû￟½3Lnº`Á¦2<<œ¾ˆ)•JûÙ]SqVè¢iªŸ}ªû2ỵäM7gΜIÇĂ9‹‹Ë¬Y³|||̃~ûmƯöNNNăÆÓü8-¨Ơê»wï:::´“Z£}<¹àpß½   ºuùéÓ§Ă˜yjÍe1L— EEEEuuơơë׫ªªÛµkׯÄÄĐa ̃ÚÊÊΡ+ .Đx́ííµÆö²³³sssU*•]RR̉±cÇ®\¹" ‡ª¯¼̣ 3““SÚ›a} H€-æU6©TzđàA­³b±˜l£ïá ˆR©”Éd2™L©T§¥¥I$’ÜÜ\f’ÙªQ__Owÿ¡ÎŸ?Oç”GŒacc3¬‚ư­µ~WZ+ăfp1--¾R©5OMùùçŸiaëÖ­ÑÑÑ|>ßØØø₫ưû́ị̈¯=Ÿ0a-¨Tªñx<¹¹¹¹¹y?ËĂà9…ÄØ …3f̀ åíÛ·gff¶¶¶Bººº ™¥»ăÇŸŸomm-“ÉT*Utt´P(äñxÍÍÍeee´¿¿¿î§JJJ|||&NœXUUE'‹ŒŒÖ®]«‡GÑÿ­™¸;;;ĂÂÂ&OüđáCf5‰sssú¾`VVV}}ư’%KLLúûŸ³µµµ‡‡“É9880{4Rffffffô›6m***âp8ưÿf̀@{¾jƠªĂ‡+_ư566ÖÓÓ³¾¾yçrÙ²èê"xa`ÄÀÉÉ)77Ws}ôÇ™¬ÑÖÖö›o¾Äp#!ÄÈÈ(33“NnÊd²#G|ÿư÷ÅÅÅt*ÖÓÓóĂ?ÔúÈôéÓmllZZZ.\¸@S7ºKΰ.jfykWW×yóæÑrGGÇ•+Wí́́˜Q:­«ÑÂƠ«WSSSÙŒ;jnN¤;OÍápæ̀™Ăܽ¬¬́Ô©ScÇợ̣¢•t¨¸Ẃ{nnn.‰èHpeeå̃½{OmÚ´äää0«­<///oÁ‚öööÖÖÖ?üđCTT”›[§¦¦®_¿̃ÉɉË庸¸ÄÆÆ>|¸×Ơ剉‰¡¡¡VVV\.w̉¤Il̉Ùj¢³¹¦““!ÄÈÈÈÙÙyé̉¥~~~ôlQQ3 ­‹}Ï}|| ###]]]¹\®¿¿ÿO?ư”””Äæ[Às‡£»?ÀYzzzVV!ÄÏÏ/33ó%¹ơ tww‹Åb̉Ç,?À àG€“‰‰ RFZ˜ªV8+H€,V0⬠qV8+H€$ÀÊÿS›Íë‚pIEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/assets/zmf_101.png000066400000000000000000001213221463010412100215700ustar00rootroot00000000000000‰PNG  IHDRh\­A€IDATxÚ́ƯwXWÛđ{ ‚´ Ø#¢bẴ{ïơµ5ѨQ±Çh,1‰Ø5V±ÄÆÄØ£bï½!Q6° ǺûÇâΰXö Ëư»¾ë{Ÿ9;{æ™™3sΨÔj5ˆˆˆˆˆ>ÆLtDDDD”=°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½°p$""""½XˆNÀ¹ººNˆˆˆ²–¿¿¿è`á˜%ræLJæêêÊ“¢4<)ÊÄó¢@<) ”c/ñV5é……#é……#é……#é……#é……#åû÷ïéâIQ&âI!å`áHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDz±QZ\]]E§@¦Ïßß_t Ù G""R:₫R§,Å?NôÇ[ƠDDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDDD¤DDD”)îîî*•J¥RuíÚUt.‰¾ụ̈KMJÅ‹‹IaáHDDD™U¾|ù73F§ưưû÷uêÔ©[·®¼ñƠ«WÆ +Q¢„µµu£FÎ=›FÏ Ë–-«R¥µµu¹råæÎû₫ưûvơùçŸoܸ±N:¢Œ©aáHDDD™åääÔ¯_¿Æë´O:ơܹṣ–ÈÈÈ5jüúë¯ 6ưôÓ‘#G(P`̉¤IÆ ûhWµjƠêׯ_©R¥DSĂ‘ˆˆ(KÄÇÇÇÇÇg[ï̃½KHH½Çº:4õ< yăÂ… }||6mÚ´dÉ’'N¨TªqăÆ¥ØĂúơëÿ₫ûïƠ«WïܹsΜ9'Nœøßÿ₫·víÚ€€€ôvEÁ‘ˆˆÈœ½¼¼–-[fgg—;wîJ•*M<ùƯ»wÚ-ZT¹re+++‡ÚµkoÚ´Iç»/^¬R¥J•*UôYôèÑ&L°±±É›7oíÚµÿ₫û︸¸¯¿₫º|ụ̀666M›6½}û¶f娨ØÙ³g—/_>_¾|%K–ôôô|üøqÖ‡'O|öÙgÅ“·oÙ²¥páÂưû÷×,–.]ºG~~~=J̃ÉÏ?ÿ\ªT©Áƒk[¶nƯªV«]\\̉Û„Eæ» ""àåKDG‹L hÑÔ>Ù¾}ûÿư×®]»*Uªœ={ÖÛÛû̀™3ÇS©T3f̀˜9sf³fÍzôèñöíÛ]»vyxxØØØt́ØQóƯÖ­[ÛÚÚ¶lÙÀG×߸q£¹¹ù7ß|caa±páÂ=zT«V-..nèĐ¡+W®́Û·ïƠ«Wxzzñ¼¹E‹Ư»w¿yóæºuëñ¼™öó…¦V«û÷ïooo¿xñb777m{ddä½{÷úôé£R©´Í5ûå—_Î=«3¶æíÛ·/^́Ơ«W\\ÜÅ‹õ¼é́́\¯^=++«ôvE†Â‘ˆˆ²'//¬['2µ:µO₫ûï¿~øá믿Ö,Nœ8q̃¼y[·níƯ»÷† Ê–-{àÀÍ Ü‰':::îß¿_[úúúΜ9sêÔ©fff>º~TTÔµk×Ê•+ÀÂÂbâĉÑÑÑ.\È•+€ëׯŸõ¼ÚÇ₫"""ÄÄÄhW.\¸°¶jđÑơkƠª¥©4mÚ@Ÿ>}4U#€æÍ›Ÿë;::jcM½˜¼€¥¥åâÅ‹Çḉ́́ææV¯^½6mÚ´oß^§Fttt—.]RÛ5uê×Y5"##ûôéÓ²eËQ£F%ÿT“Ûëׯu¾ÀÁÁAgåüùóøôÓO·l٢ɳ}ûöóæÍû́³Ïv́ØÑ®];ư»"CaáHDDÙÓ´iø0-‹̣YXXDGG¿}û¶[·n{÷î­Y³f«V­:uêT·nƯjƠªÉ×´³³ÓÆú¬¯¿#Ftï̃}Ï=GƯ»w¯«««ŸŸŸÎƯ^[[ÛV‡iX½zuPPP—.]æÎ«iyơêU||¼··w‰%zö́iff¦s+9<<@ÑdÏŒj«_¿¾¼º­_¿>€;wî|₫ùçúwE†ÂÂñ#‚‚‚Ú¶m»mÛ6íè6""R„̉¥Qº´è$Rvûöí÷ïßk¯öÅÆÆ̃¹s§I“&'OÜ»wïâÅ‹G­]Yç ¢\z×OCDDD```Ù²e======V¬XñƠW_­Zµjúôẹ́53y«Z3~|áÂ…̣Æ/^L<¹I“&}úô©P¡Â‰'äŸ?~\¥RÉÇĐhXYY•.]:,,L̃¨©‹+faa¡Wd(œç#6lØ :""Êf={¶hÑ"íấÙ³###»ví  |ụ̀Úv́ØÚ¾ô®Ÿÿ:uê,X°@³hffÖ¤IÈîekinU§æ£úæ›oÔI•*UªN:jµúèÑ£† ̣ï¿ÿîÙ³G³₫Ó§OẃØÑ²eKggçä½ 0àÈ‘#Ç×,&$$̀™3Ç̀̀¬yóæéí ‚WS¦äÿ×_mÙ²Et.DD”Í.\xÚ´i§OŸ®R¥Ê™3g:T·nƯ₫ưû‡††ZYY 2¤_¿~E‹=sæ̀‘#G (p̣äÉ}ûöµmÛV§Ÿ¦M›¦kư4Ô¨Q£bÅsæ̀ ªX±¢¿¿ÿ¾}ûúô飳f&oUÔÀ×®]Û¯_¿#FØÙÙ­[·.&&fæ̀™)®<|øđíÛ··lÙ²_¿~ÅÛ·oßÅ‹'Nœ¨¹ ˜®®È xÅ1e;v́ׯ«F""Ê€Úµk:tèåË—K–, ?~üÑ£GÍ̀̀J”(±wï̃bÅưôÓO‹-²´´¼~ưú?₫¹dÉ’äư¤wư4äÎ{ß¾} 8}úô¬Y³;Ö²eËS§Nÿ✟Ÿ_¯^½v́Ø1õ¼2eÊøùù¥öRiGGG??¿Ï?ÿüüùóK–,É;÷¦M›¼½½3Đ„*KÿªÈ¾N<ùöí[7n<}útºq¬Ñ¸î́Ù³uƒÂCK;&™:ÿeôk;«ü:«] ½]£X}o= t+\F̣̃.î}n‹\î0ÅÆxu¼U‚u¾x˼ñ–ỵxxíE‰*ö:«_Œp®ñ‰>o£̃ç±N’äă{‘…ÊÚd¸Ă×Ïbó°”·<‰v(n¥³ÚåCƠZ–ѧĂä_ứM₫yơùîíÓ/ë¶¶)ä˜ôñ£ÇQ¨P’–7oW·C#ùï>D‰IZ`f–ñSlŒ‡¹y’–ÿ₫Kaºcư;L¶×¡¡¡ÅjƠB~Ư$Vpp°̉n󹺺úûû‹Î"œ«V­ºk×.щ»»»æN´¢ôéÓçäÉ“!!!i¯–ÿƲƯ–†Â[Ơ)kĐ &ÈÀ?ƒK~gÛ¢…è=È2mRi|a‹5p©:.UÇÅø·™ß=Îz7êƯá” œ!đ]̣&W®đï„?;áÏ8™‰é©.]đóÏM BDDÊÄ‘ Ä₫ZBËC)|à‚­±¿ ´F\ưOήó0a&h[Ú`ÿ·˜UgD§¦ü?₫ۤɳŒO:3™f4Qz=}útëÖ­E‹Ơ^yëâÅ‹÷ïßđàë§ñi›6mốÇäåĐßâdT.p ÀÈeRK´~ï‹Mưà×XtrẤG›ư®ßĺé˜Y ÿNJ0ËcÇJÔ­‹5q₫¼è\r4¥ƯªÎvÚ¶m[ªT)ÑYÛíÛ·{÷îƯ¥K…kÖ¬Yµj€bÅé³~ÚÿÙ'¿+íêê*zÅà31uêÔíÛ·§ëÇÍêO:U§10âa™O’<—ö2öµ¥îÓ]çÂnÖ.RQŸÆO*9¹È[̃ŽËm‘;Ă&oŒWŽ5{ûÆâÍó7±1±æobÍcöç;ø©Eɰ|aa–ÿ…å {ckăÜ>´cß ₫U^TM<\ç"ÊÔÖ}‚0ÅÆ×Ï̃æ/G̃₫ Ú±¤î3—UoUZŸ“=̣雂yơùîU¿W¹‹üïi®°§ÿïA°§éøó¬IÍè‹B>±‹ÿ°™@”Ñ}4ÿ₫ ßI)>ă˜âwơoL₫Œc̣g+ÓƠal,,“<₫×_+WâáĂDíÚ8{VÿăFÄg)â3úcáø(śL—qù".^Â¥ƯØưO2ĐƒÜFaÔøÂ€Y)áwáÓ§øóOüù'₫úëă+{yaᯖ­I'ÅÏC† ÉÇîî¸|Yt9‘₫±èÈá?TÉX8êÓñUCµ/đÅj¬~ŒÇj¨5ÿ÷ovcw%T²‡ưG{¸…[C1T• ª*¨̣₫½O†Q° <=ñ矉%,,­—¥-Z• *Ö¬·4nŒ{÷ VăŒ́‰Ï+WP±bÆû$"¢,À‘Œ!̣tB§ë¸₫Ï5¥ä3<[‚%µP+í/^Çơ®èª)"«¡Ú}ܽ+S¸0V®L,"/]B)¯æé • ›6‰N×8êÔüÈ­[È©O) GĂ£0êÎiêÈP„NÂ$KX¦ñ•+¸ReTP•EÙ8 z ©Z5<} µGÂÁ!…<< Ra₫|щ‡¼v¼w »mJD”“±p$E(¢s0'1:̣[|[ÅS[9mĐF•̀z¢§èÜ ©IDD@­NùÇ  RaüxÑY¼vü÷ß&'""X8’ÍÄ̀‡x¨†:ñÓ0-µƠÔPïÀT¹k¶‰ÎÚ¼¼ VăÅ $ŸÓpÁ¨Tؽ[tYM^;†…A¥±pü˜Ù³gûûûë?¤ Ë f³0Kṣ ®4DĂW‹C\/ôRAU Åüà':kƒ±³ĂăÇP«‘ü?À.] RáÍÑ)f)9rĵV""EcáHÙFUT=ăj¨£ơ9>Oqÿđ_4QAƠíDçkHW¯B­F̣7XZ¢~}ÑÉe)yí¸`èlˆˆr:”ưXÁj-Öj.CN½ÄOnöiÆbûÀGt¾³oÔj4j”¤ñôi¨T˜5KtrYg̃<)₫䓌÷CDD™ÆÂ‘²·¹˜«© û£+h¦„́T´S̉Ù·Bùùáư{ƯÆéÓM÷!@ùêçÏág:"e;,ÉDü†ßÔP‡#ü¤pQêfî›eQVƠn˜Â  ¨ƠøûoƯv• >¦sUæÙ3)n̉Dt6D¤ËƯƯ]¥R©Tª®]»Î%Ñ—_~©I©xñâ™ï´X8’IùŸ„#\3Ú:ź ‹ */x‰ÎÔÚµƒZQ£’4 ;;Ñ™œ£#ÊÆE}₫yÆ»"¢¬Q¾|ù73F³xưúơ^½z*TÈÚÚºF‹-‹‹Ó|ô₫ư{ URRz Âưû÷U©hÚ´iÚ]}₫ùç7n¬S§ècj,D'@”%º£»jưÑ6è|º‹cqUT=‡s¹‘[t²™²d –,IrŸúƠ+¨Tص ]ºˆN΀—vrƯ:üú«è„ˆ( ''§~ưúiâ   &MÄÇÇwíÚµD‰‡;v́ñăÇwíÚ 888>>¾^½z¥K—Ö~ƯÚÚ:yŸÖÖÖ:±±±¾¾¾7ª§ÑU­ZµjƠªµgÏĐĐPÑÇÆ¤°p$·ë×cư¦Ç›< é₫ô¹«yÇö₫đ/€ê^)Ôjx{c̣d©¥kWØØàƠ+Ñ™ĐÚµ4(1V©t'ë!RøøxæææFØÖ»wï,,,̀̀q#q́ر¯^½:{ölÍ5̀5kđàÁk×®=pà@ëÖ­5Í›7O»''§ tỵ̈Ÿ0aBáÂ…çÍ›@ÿ®ÈPñ_QV«[O uâj¢¦ÎG/đ¢ ª º†k¢Ó̀”I“tK©ÈHÓ1£s‡zçNÑ ¥̀ÙÙÙËËkÙ²evvv¹sç®T©̉äɓ߽{§]aÑ¢E•+W¶²²rpp¨]»ö&ÙÛè5ß½xñb•*U´S§½₫èÑ£'L˜`cc“7õÚµkÿư÷ßqqq_ưuụ̀åmll6mzûömÍʱ±±³gÏ._¾|¾|ùJ–,éééùøñă¬8GiÔ¨‘¦jÔ9r$€3gÎàCµW¦L™ ô|úôéE‹­]»ö“O>ÉdW”1¼âH9ˆ9̀Ïă<€‰˜8ót>­ªöa_´IßJ¡Vcܸ$o,T©pơ*Ld{µZª…»wçEGR¬íÛ·ÿ÷ßíÚµ«R¥ÊÙ³g½½½Ïœ9śØ1•J5cÆŒ™3g6kÖ¬Goß¾Ưµk—‡‡‡MÇ5ß iƯºµ­­mË–-|tư7››óÍ7 .́Ñ£GµjƠââ↰råʾ}û^½z€§§çæÍ›[´hѽ{÷›7o®[·îæÍ›gÏ5́¾ÇÅÅ1¢F̣ÆÈ“'€ÀÀÀ®kWi¯øo- dđ¼d¥Ô~¨˜Ê?`cư_jJ•*à‡~жL˜0ÀæÍ›Ơjué̉¥Ë–-û₫ư{ÍG/_¾´°°>|¸ü»3gΌ״|tưܹsß¹sG³8wî\UªTy÷Aƒ"##£¢¢̀ÍͨÍjđàÁaaa™?GU«Vm̉¤IjŸFDDÔªUËÜÜü̃½{jµºmÛ¶–––öööÚR¤|ụ̀/^üèVæ̀™cii¢mùhW½{÷.V¬X†ÿ3́WLoUSÎơ?üO ơqO₫Qc4VAuWDç˜AææP«Q¶¬Ô2w.LdJ ùê{÷DgC”2GGÇqăÆi§OŸnmm½mÛ6çÏŸ¿|ù²…E⿈ˆ111Ú• ...nwể{(;V§N .,_¾ÜÅÅ@```BBẦ™3ĂÂÂ={¶fÍÿ₫û¯K—.¯̉|(;<<üÇ3fL±bÅ´ë2ƒ·ª)§kˆ†j¨Xåâ/ÿ¨ª@@dËhüư1s&f̀H\ 5•!%ưûcưúÄØĂ7NˆH—›››ü†©•••««ëưû÷ØÛÛŸ>}úĐ¡Cwï̃ ¸uë–v WWWù—®ïèè¨5ơḅ–––‹/7nœ³³³››[½zơÚ´iÓ¾}ûä7v£££»¤>)ƒZï">9rä_ưåâârøđáfÍiÚ;–7o^Íâ Aƒ̃¼y3bĈ;v <8µ̃¼½½ß¼y3>é;ë3Öe G"(ƒ2qˆ‹@„3œ_ăµü#¸x÷ÙđßËôéè×..R‹J…÷ïa‘ưvEæ·ß¤ÂqÓ&9VóæÈ—Otz³°°ˆ~ûöm·nƯöîƯ[³fÍV­ZuêÔ©nƯºƠªU“¯i'›‹UŸơơ7bĈîƯ»ïÙ³çèÑ£{÷îơññquuơóósrr’¯fkk«u˜Í›7:ÔÚÚzơêƠƒ ²ưĐ)R¤ˆÎÊ­ZµpëÖ­Ôz{óæÍÚµk»u릭3ÜeR¶₫íAd`Ÿà“HD>Ă3'8i¦ÔÊ…\ƠQư".Î1ƯÊ”I2¤@®\¸rU«Î,3Ú·—̃œ³j†  àádsü)ÅíÛ·ß¿¯½Ú{çÎ&MœèܹóG·ơ×_}öÙgÿûßÿV­Zecc#ÿèÁƒ{ö́iÖ¬Yụ̀嵑‘‘J–,™Z‡Û¶m{₫ü¹ÎEÄŒuE™Ä‘HWH@B‚>ŧ̣öK¸¤‚Ê?ăgÑ9¦›Z‚¥W÷¹»cưz|ö™è´2lÏ©₫̣K¤4Ï=[´hÑĉ5‹³gÏŒŒ́Úµ«f2jy¡³cÇèèèÔ®đ¥wư4øûûׯ_ÿ›o¾™={633³&M@v/[+“·ªƠjơĉ‹/¾aÆäsXZZZ?¾fÍÿüófÓ óæÍ³°°ĐŒ"OÑï¿ÿnkk«y‚3“]Q&±p$JYi”VC} ×4Óôhư‚_~Á/˱|8†‹Î1}>Å?à›oû÷ÇÍ›đöV†ÙÚJó›ß¼‰E'D$)\¸đ´iÓNŸ>]¥J•3gÎ:t¨nƯºưû÷ µ²²2dH¿~ư-zæ̀™#G(PàäÉ“ûöíkÛ¶­N?M›6M×úi¨Q£FÅç̀™T±bEÿ}ûö988ôéÓGgÍL̃ª¾sçÎƯ»wË—/ïéé©óQ·nƯ:v́8sæ̀I“&¹¸¸´mÛÖÎÎîÀW®\ùá‡*T¨b‡±±±~~~Í›7×™̃¼`Á‚éí @ô°n”c‡è+Y&gùCưGÓq«ƒEïYºí̃dÚµ–If§}¹{WÚ ++a»ar²Ñt•Ư„/^ HĂ'E₫ä&”ˆA₫±V¶û¡ế́\µjUÍ{™swww;;»£GNDWŸ>}N<’öjøo,Ûưgi(œÇ‘H_30C u't’7̃ÆmT30CtvéPºt’*+$²AœÙÊ/¿Hq›lü¾"¢́‚…#Qú́Æn5Ô…PH̃83UPe¯ḲÚñƠ+,(:¡ ±ăhx9ö¹%˺Ƕ¾Æ×s0G§q#6öC?Ñ;­/ùƒ‚̉”=YÍ`'…O:Ÿq¤ˆÏ8êW‰2åGü¨†ZgÆGxd£×̀Èk­đpÈ̃U–MÈGú;&:""SÆÂ‘ÈxGä-ñˆWA5 ÓD§¦yí‘ƯjÇsç¤8éüÀDDdX,‰ £)ª¡¡̣ÆÙ˜­‚ê ̃ˆÎîătjÇO>₫tr‘ÉbáHdH«°Jç%×,a9“E§öq̣Úñùs$}Á¬²ưñ‡çÏNă“ˆˆ²D†§†zÉ[¼á­‚*£ư1sYíøú5jÖ:w–âØXÑÙ™,DYb ƨ¡6KúOLỤ!ØJ#¯/^„‡‡è„ôÔª•s"¢¬Á‘( Å#~ ¶È[¾Æ×Ê¿ô(¯7mÊ&Ó#®['ÅΆˆÈ4±p$ÊZ½ĐK µ¬ä*¨¶a›èỔ"¯§MĂöí¢ú¨Â…¥ø̃=ÑÙ™&DÆ…¨UX%oé…^UQUt^i‘×ÿû®_ĐGú(ÅœĐ‘ˆ( °p$2’¡ª3àú®© zç¢SK•üÊ]•*x÷NtBiăƯj"¢,ÆÂ‘ȨÔPëŒùŸŒÇxÑy¥̀Åư%-æÉ#:¡´98Hñƒ¢³!ÊAÜƯƯU*•J¥êÚµ«è\}ùå—”/.:“ÂÂ‘ÈØ&a’Î¥ÇX Ø3:`₫|iQ¥Đ4?èÑC QR¾|ù73F§½Q£F3gÎÔi|ơêƠ°aĂJ”(ammƯ¨Q£³gϦÑó;wºuëV¼xñ¢E‹ö́ÙóôéÓútơùçŸoܸ±N:¢Œ©aáH$†êh!oQAuWDç•‚qăPª”,O%׿₫*ż[MdDNNNưúơkܸ±¼ñÊ•+§N̉Y322²F¿₫úkÆ |ÿ₫ư6mÚ\¹’̣O¿'N¸»»Ÿ>}ºG}úô9{ölË–-9̣Ñ®jƠªƠ¯_¿Ṛ^d,‰„9„C:o¸®†j:/-Tˆà`äÍ+-¶l):¡ÔX[KñăÇ¢³¡œ.>>>̃XïÀ|÷î]BB‚è=NwđàÁ3f´nƯ:yV . ôññÙ´iÓ’%KNœ8¡R©Æ—¼µZ=xđ`[[Ûk×®-Z´h₫üù7nÜ(T¨Đ„ ̉Û G"‘4o¸–ß§ö2o[Ë_Èrø0-ÊxWY«_?)₫óOÑÙPNä́́́ååµlÙ2;;»Ü¹sWªTịäÉïdƒË-ZT¹re+++‡ÚµkoÚ´Iç»/^¬R¥J•*UôYôèÑ&L°±±É›7oíÚµÿ₫û︸¸¯¿₫º|ụ̀666M›6½}û¶f娨ØÙ³g—/_>_¾|%K–ôôô|œ5_EDD´nƯzæ̀™Ï=K₫é–-[ .Ü¿Íbé̉¥{ôèáçç÷èÑ#5ƒƒƒ́ää¤i±³³ọ̣́º|ụ̀ơë×ÓƠ G"ñ0å-*¨‚,:/]̣ zÆÅƯ»¢JïV“lß¾ư«¯¾jԨѤI“ (àííƯ²eKµZ `ÆŒcÇ-P À¤I“¾ụ̈Ëׯ_{xxü%†̉ºuëׯ_kÏûèú7nüí·ß¾ùæ›™3gơèÑ£qăÆG:tègŸ}æçç×·o_Íß~ûmñâÅÇëîî¾nƯº.]ºdÅî;99©ƠjµZ}7Ù‰ÈÈÈ{÷î5mÚT%{ê¥Y³f ÉŸt P°`Ayc‘"Eܸq#]]‘¡XˆN€ˆÀ̃Ă0¬4Jk[J£ô$LRÚ+ õDʼnqụ̀IJI¥È•K_¼ e¡Ïñù:¬˜€Î(7¹ÿ₫ûï‡~øúë¯5‹'Nœ7õÖ­[{÷î½aƲeË8pÀÂÂBó‘££ă₫ưû;~˜ˆÔ××wæ̀™S§N533đÑơ£¢¢®]»V®\9'NŒ¾páB®\¹\¿~ưäÉ“¯_¿633Ûºuë€~ưđÇ•§§çîƯ»=zTX>~{̣ä‰Z­Ö^AÔĐ”†É/OjvêôéỌ́17GđèÑ£tuE†Â+DJá gßC̃đ6‡¹è¼’psĂ¼ỷ¢BÊ|₫¹gƒ—̃ rtt”?i7}útkkëmÛ¶8₫üåË—5U €ˆˆ111Ú• .¬­ơY¿V­Z @Ó¦MôéÓ'ׇ¿ 7o®Yß̀̀L¥R:uêÁ‡Éª~ùå—gÏ%¯ăââv§.“GF“¹¼ÑÖÖV»krNNNƯ»wß±c‡··÷³gÏ>}:õ¼•+WˆŒŒLWWd(¼âH¤,j¨‡b¨|4‹ HPA•Æ… ă?{÷âèÑÄżyñæèœt¬]+Ư°₫üsố):!ÊqÜÜÜrçέ]´²²ruu½ÿ>{{ûÓ§O:tèîƯ»·nƯ‹‹“×ƠƠU[5ê³¾£££6ÖÔ‹É[XZZ.^¼xܸqÎÎÎnnnơêƠkÓ¦MûöíåyjDGG§q [¹ Ü^¿~-oŒŒŒà Ÿơƒ•+W¾|ùṛäÉ“'OÖiӦ͘1ĂÎÎ.½]‘A°p$RœƠX=C«£º¶EƠiœ®‹º¢SKtäˆt­ñí[|ö6lSj¢£Eg@YÅ–6°É|?ÆaaaưöíÛnƯºíƯ»·fÍ­ZµêÔ©SƯºu«U«&_ÓÎÎNë³¾₫FŒѽ{÷={ö=ztï̃½>>>®®®~~~:w{mmm3Y¦ÁÉÉÉ̀̀LçVrxx8€¢E‹&_¿@‡:{ö́µkלœœ4hpüøq%J”HoWd,‰”¨ªéŒ¶®‡z^đZˆ…¢SK¤VKµăÆ: ˆÎInØ0¬úđrđáá!:!2¼X±+Dg‘²Û·o¿ÿ^{µ/66öÎ;M49ỵä̃½{/^}ºJ•*gΜ9tèPƯºuû÷ïjee5dÈ~ưú-Zồ™3G)P ÀÉ“'÷íÛ×¶m[~6m®ơÓP£F+Ι3'((¨bÅ₫₫₫ûöísppèÓ§ÎYz«ÀÀ×®]Û¯_¿#FØÙÙ­[·.&&&ùk 5fÍƠ¶mÛÚµkwíÚơưû÷Û¶m³´´\ºtiº"ƒàG"¥Ñÿá?y‹ ªÇPÄkQ¾ưEH‹íÛ‹NHNvk:’‘Ơ®]ûĐ¡C/_¾\²dIHHÈøñă=jffV¢D‰½{÷+V́§Ÿ~Z´h‘¥¥åơë×üñÇÈÈÈ%K–$ï'½ë§!wîÜûöí0`ÀéÓ§gÍúر–-[:uÊøçlllüüüzơêµcÇyóæ•)SÆÏÏ/µ—J·jƠjÿ₫ư%J”øơ×_÷îƯÛ­[·Û·oksNWWdª,ư«"gruuơ÷÷%lw.t̃(³ ›ú¢¯è¤€¤“̣́̃Nôú–1N6³‚ñ䉘£“Ư(đK¶û¡ế́\µjƠ]»v‰NÄxÜƯƯí́́jg[PŒ>}úœÓ¦%©'O˜ >æHDdH,‰²½åX₫3~Ö.ÎǼè 0Ÿ„)ööÆÛ·ṣç—â „¦BD”í±p$2đ¼„KÚÅ¿ñwQ˜Ï_Iq̃¼+&:""Á‘ÈDTCµH×úÂ&pP½º´ØºµĐC#¿[ưăBS!"ỄX8™TɇZ‹JæâE)>xgÏ;.H1s$"Ê Ñ ‘©¡–׋ɫI£ùï?ưpĂ¼n]è¢(“²WW×̀wBD™Ç‘È©¡.â¡Ơ,ª‹§'~ù%qÑÂqq‚HçÎØ½;1ö÷«l%gN³,§ÀYÙ)Çâ­j"Ó‚h ]TA‰Hă§ñ³4ÚññؼYĐáà¤ó†a˜Ñ¶^° ºu“ëƠ3îηo/Å wÛDD¦€…#QN$¯Wcu”1Ú¦}}¥ø̀lÜ(úX‘̃X8åP̣Úñ>î/Œ¶é€)₫́3ăîvÇR|ơªq·MD”í±p$ʹäµăÏøùK|iœí–)[[iqđ`#î³üơÂ…FÜ0‘)`áH”£ÉkÇUX5#³Ư—/¥xíZ#î°‹‹oØ`Ä ™‚œR8nß¾½gÏîîîơëן2eÊ‹/̉^ÿƯ»w?ÿüs·nƯÜƯƯ›5k6zôèùƯ5""¯—cù(ŒÊDgéàí®U*ÑGˆˆô# ÇE‹M:ơ₫ưû5kÖ´¶¶öơơưâ‹/bå/²H*>>~À€óçÏñâEÆ ‹-zàÀÎ;_¸pAô®e yíø~̣‚—6Ú³çkùâ¶mÆÚ[ùcÏŸk«DD¦Àô G''§ưû÷ûøø8p ÿ₫ׯ_Ÿ?~j_ÙºuëåË—Û¶m{èĐ¡¥K—nذá×_0•¿‘é’׋±xÆc£̉6Ñ«—±vƠKV/Zd¬­™Ó/·mÛ–0f̀˜‚ jZ&Olkk»oß¾„„„¿rụ̀e °°°Đ´Ô­[·|ụ̀ÿ₫ûïs^Ÿ Ó%¯báŒ1ÂFåơbË–FÙϦM¥˜…#Qz˜~áxáÂ33³&Mh[̀ÍÍ5j¡)“+\¸0y¨V«_¾|iff¦-%‰L’¼v\‚%ßỬ̃â–-R|ø0^½2îGGw{DDÙ›‰jµ:00ĐÁÁÁÁÁÃ^¶lY!!!)~«C‡yóæư₫ûïÏœ96mÚ´ĐĐĐ={ÚØØˆ̃'¢¬%¯¿Å·+°"«·xø°ÛÙe'+W6ÊfˆˆL‰_?‹‰‰‰·Kö»ÈÖÖI¯)ʹººnذaàÀÔ6zxxL™2EÏíºººê´́ß¿_ôÁÈÑBCCE§!¨´siM<#âŸÆwˆî`đ­hOJé̉°±)™øẃ”)χ ÉÚ Ö&&¾¤;|Îœ×Æ{¾2à?âI®M›6¢SP /5C§­¬¬tÚ­­­¼Jå®Xddäœ9s¢££ƯÜÜ*Uªq̣äÉ?₫ø£N:-ơ{Ëßß_ô®“.gggÑ)d'j¨UHœ#gTÁQåP®% ÿ¢ö¤¼z%ÍÈóă?üàá>ơ2a>68Nœµ›ËnøExRÄJ₫k=ù¢ÂÄoUÛÙÙ©Tª˜˜ö¨¨(|¸î˜Üĉ/]º4ỵä;wΜ9sÙ²e{÷îµ²²̣̣̣ ½ODF̣ ̉_V­Đê2.g¢³›0Az'ùöm#nŒˆ({3ñÂÑÂÂÂÖÖ6ù•ÅÈÈHÚqÖrOŸ>=zôh™2e>ÿüsmc‘"E†₫₫ưû]»v‰̃'"#±M0‚µ‹ƠQưdƯææÎ•â7ñ®ô’ÊßDD”/899EDDh*E­àà`ÍGÉ׈ˆPªT)ö̉¥Kxö́™è"2R(uå‹Ï‘…3RùùIqY¼ọÙÊâ™Ó/›7oâÄ m‹Z­öóó³··wwwO¾~©R¥̀ÍÍỘ¹‰?<ßP¦LÑ;DdTƠQưh?Á'Y·­F`n.-ñœ•;6v¬/\˜•[""2¦_8ö́ÙÓ̀̀lÙ²eçøøø„‡‡wï̃=W®\–èèèàà`Ͱ5KKËF=xđ`é̉¥ÚÂV¬X‘;wî¦̣©ƒ‰r†Vh5Cµ‹ÚA3Y!.NûöÍʽʟ_9é‘~L|T5€"EL˜0ÁÛÛ»S§N 6|đàÁÙ³gƯÜ܆ ¢]ÇÏÏÏËËËÅÅeÏ=fÏƯ£G+V́Ư»·B… —.]JHH˜:uê§Ÿ~*z‡ˆX…UpüßkUPɧ{4¬Ö­qàĂ%ÎÁƒ±fè'"¢Lÿ#€AƒÍŸ?ßÙÙyï̃½ÏŸ?÷đđX¿~½]ê ;::îƯ»wèĐ¡VVVÇ mܸñ¶mÛúơë'zWˆ„™Ù}ĐG»˜u×å—ÿÖ®ÍÊ]4H9…‘T:ỌQ湺ºrG¥ æ,hQuÎáœv13×Ó8)óçK³ó”(Y4˜ûæMTª”U«²f3Ù ÿ±(OåØßơ ½âøöíÛÀÀÀ³gφ„„ÄÇÇ‹N‡ˆÅÙ‚æ±*„BY±•ñă¥øáCÜ¿Ÿ5;S±¢¯^5Û "2){Æñĉ+V¬¸råöRh®\¹5k6jÔ(h&R‚'x¢½OưO £đ#<2øV®\vÚƒ2eÀ[#DDJ ¬+S¦Lñôô¼|ù²üúû÷ï8бcÇ-[¶ˆNˆ€¤w¨ăñ 0ø&ªV…ƒ́½ƒYuA°ys)~ó&k¶ADd:T8úøøøúúÊ[̣çϯúđ₫Ú„„„Y³f?^tD$­×cư",2ø&""¤xذ¬Ù ù4à‹ ¿ DD&F)…ă»wï|||4±³³ó²eË®^½zñâÅ«W¯®\¹RóÖ–øøø7ΔˆÉkDZ{G ¾‰ÿưO₫²&Đ¾½³p$"ú¥OŸ>}ưú5€|ụ̀­_¿¾eË––––̣æÍÛ¬Y³ơë×[[[¸té’èL‰Héª`34{‰—†íëV)^¿>‹w†/%"ú¥ÅÓL¬èææV°`AO (P©R%̣‘ˆÂÿàí¢=́ ¾‰3¤¸N,غ#"̉›R G 6ôîƯ;̃¿ÿ₫}µjƠ&%Ñ Í`vÑàƒOŸ.ÅçÎe¼ŸTÉsüư÷,Ø‘éPPá8ỵä%JDDDŒ5êÑ#iv§OŸ;öéÓ§E1b„è4‰H×XŒơ€‡vÑàµăæÍRlođkÇKñÂ…?8DD¦DAo1bDTTÔÙ³g˜››—-[ÖÑÑ1""" àưû÷jÖ¬ikk«ó­åË—‹N\WM^Éø̃#¨„J7qS»øÑ—ʤ뤨dµèưû(]Ú ©Ë{ẀDQøExR(Ç₫®WĐà‡ÖÆñññwîÜÑYáÂ… ¢s$¢TƯÀ ùµÆ–hy‡ Ơùå˨V-1₫ôSVwDDb(èV5eẉ«Œ‡qxfªgí[d4öí3h̃#GJqV½ßˆÈ(èăpù“FD”=©¡Ö^wœéШ ¤çèhXY%ÆíÚô¢ăàÁX¶,1^³?ü`¬£ED”Í(¨p=z´èˆÈ"ñ >ÑÄMÑ4qæ0Ï|·ụ̀ÁƠÚg/Ƙ1ʸjU)fáHD”:̃ª&"s€Ă.́̉.ZîÔ»w¥X>‹!=}e†ˆ(Û|ű{÷î ,¸råJMüQ:ï³&"ê‚.c1v!g·QAơÑAÖzêÜ»w'ÆƯ»Ă`?́́đ̣¥±Qv#¸p¼yó&€¢E‹jc"2 °àN\@âdv°3È ÿøCè“á̃† Ă—_&Æ·n4Ñ7o!""ESPáøàÁæææ̃̃̃Í›7Ï—/ŸèŒˆÈđäµc_ô­ú%P"Ă½mÜĸdIæHD”Œ‚ Ç/¿ü²té̉!!!̣‡‰È$]Á‡xíbs4ÏpW:Iñ‹ˆˆÈDZE‹J1 G"¢d?ă8bÄù¢££cPPĐ÷ß¿eË–’%K™¥P×._¾\lÎDd^,íœ8ù¬Æê¡±®A³f‰q¡B™¾a­¡˜©Êˆˆ”Cpáx8•w>Ü¿ÿ₫ưûbs#¢¬&(3 Ăz¡—́2ĐOÓ¦R‡—/a—‘neËẫ=цˆH¡t«ˆr đ6¶‡}†û‘ÿ©™’åăcüü""|Åqøđá¢‰Ô ͆bèj¬Ö,føm„ÍeI¾|‰÷ï‘+W†4“&%ÆkÖ qcÑGˆˆHA£G}ˆH°UXµ Û^à…f±5ZÀ ô³{7:wNŒK—FHH†²qt”â À±zDD2¼UMDâ=Çsm|×bm:‘¯ ½KDD¦Hq…cPPĐÆĂĂĂ<₫|̣äÉÍ›7ïÚµë+øk"&¿C=ƒ3vĂú÷ߥ¸\¹Œ¦R©’èƒAD¤PÊ*ÿư÷:|÷Ưw/^¼đƠW_íÚµ+44ôöíÛK–,Í׉Ê F ÑÇ€ˆH‰T8Z[[ àçç§¹mƯ¸qcsss¯^½ààà :M"Êrnp‡qÚEík ơ÷ư÷Rܶmú3?æø×_éÿ>‘iRPáX¼xq§NZ¹råÏoõ¼9€‡=z€“““è4‰Èæc¾ü „%P"]_Ÿ2E÷ïOÿæ9>†ˆ(% *;uêàÍ›7‹/;wîF½xñ¢M›6™6l(:M"2ù¬à!Ùƒ=éúú×_Kq¯^éܶü}…»w‹>DDJ¡ Â±gÏå-VVVñññ9ẓæÍÛG>K™º÷x¯;¢cº¾ûĂR̀±ÑDD¡ ÂÑÂÂbÓ¦MǯV­››ÛĐ¡C§Èî69::₫öÛo &,æc¾v1½; Å“'§sÛnn¢÷ˆHqTÊË»wïîß¿ïêêjf¦ 27 ®®®₫ge‰àà`gggÑYPúŸg8ÿ‹5q[´Ư‹½úoE%+5Ó÷Óî»ïđí·‰ñµkHz?Ä„ñ‹ñ¤(Pư]¯ RlÉ!!!̣öܹs—/_>»TDdpÁÖÆû°/]…£|GŸôlµwo)̃²Eô1 "RUc¾¾¾+V¬X±bÅóçÏ3ß™’XÄjăöh¯ÿưü¤xèĐôl̉ÅE·n}ˆˆAA…c÷îƯ5ÁÇEçBDÊ’yçb®v1];+&ŇehóAA¢‘"(¨p9rd×®]¬ZµêéÓ§¢Ó!"e™€ ̣Ùơ¿îxë–·j%z7ˆˆ²3 Ñ HF P¡B­Zµ*_¾¼½½½J¥{]aụ̀å¢3%"1àöZă^́é31ó£ß²±I²ˆ2eôÛ^çΜđˆHNA…ăáǵqlĺåË—EgDDh+XiâY˜¥OáàêUT­W¬ˆ7oôÛX¯^Rá¸s'ºu½÷DD‚)èV5ÑGåC¾₫è¯]ÔóaÇ*U¤øí[$$è·1¬&"JJAW‡.:"Ê~Ăo»±û^icđ|üủ»v¡k×ÄØÍ wîè±%ù£2Û·‹̃o""ñT8=Zt D”=¼ÄKíµÆµX;]áöWºt‘â»wEïQö¤Đ[Ơ₫₫₫زeKTTT\\Ü«W¯DgDDÊr7µq9”Óç+ Hq»vúm¦hQÑ;JD¤ +}}}›6mÚ©S§Q£FMŸ>ưùóçQQQM4Yºt©̣ßHDFă·Ïđ™vÑưÊØ±R¼oŸ~›‘?æÈ)f‰(ÇSVá8gΜ)S¦„……é´ÇÄÄ,_¾|æL½†OQ±ëµq"æãG¿2r¤ËëÈTơê%ÅCD9‚ Ç[·n­[·N›››kÛµS9ñ¼ùÂ… ¢Ó$"QCº1?º₫O?Iñ¢Ezl fM)fáHD9‚ ÇU«V©Ơj33³iÓ¦]ºtIÛnkk»té̉¼yóøí·ßD§IDʲ̉xg}fç©[WÓW ^¹"z_‰ˆSPáxçÎíÚµóđđ°´´”ÔºuëÆ¸ËÁD”Tô¨ éº`4H{ưÓ§¥¸OÑÙe+ *#""8;;§ø©‹‹ €đđpÑi‘âœÇym| §ăpÚë[È&"»ÿc½7n,zÿˆˆ”BA…£««+€ŸbT«ƠçÏŸPºtiÑi‘½À mÜ-Ó^ùâE)®Qăc]ËV9"zG‰ˆDRPáX©R%gÏ5jÔÉ“'5!!!Ç9r¤¦p¬P¡‚è4‰H‰́`ç/í¢%,ÓXY₫—/?Ö5_‰’u'Å.ÔÄ=ĐC>Ñ£•¬°Lëg¡§'Ö¬IŒ_¾„­­Ñ–ñđ‹ñ¤(Pư]¯¬+Zñññ>¼uëÖÇăăăE§CDÙI´ñ́¸…[©­Yµªï̃ẓñ1[·̃?""a,2ß…a.Z´ÈÏÏïưû÷–\¹r5kÖ̀ËË‹o‘îàNy”×ÄQQ₫́£ÜÅ‹̉œ]º¤~ѱE )̃²_|!zÿˆˆÄPÖÇ-[¶têÔéđáĂÚªÀû÷ï8Đ¾}{___Ñ QöPåz¡—vÑ.)®fnd1,L®½sDDÂ(¨p¼páÂwß}'¿1?~m?}úôË—/‹N“ˆ²‡-¦Î DàŃLq5ùåó;Qr *7nÜ dÉ’K—.½zơêÅ‹¯]»¶|ùrÍMê÷ï߯_¿>coß¾½gÏîîîơëן2eÊ‹/>ú•7nŒ9²iÓ¦5kÖôđđ8wîœè#DDé“€mÜƯS\§n])Në¦̣Ç!‰ˆr*—.]`iiùÛo¿µnƯÚ̉̉@̃¼y[´h±aĂ+++åo ÓÛ¢E‹¦Nzÿ₫ư5kZ[[ûúú~ñű±±i|åÈ‘#}úô9räHÁ‚ƯƯƯ¯\¹̉¿ÿ#|ÛQ¶¢‚j&h­‘̣, ]ºH±‡G*}ơ’n|ẳ%Ñ{FD$†‚ Ǽyó¨X±báÂ…u>*P @åÊ•˜ë<‘¤''§ưû÷ûøø8p ÿ₫ׯ_Ÿ?~j_yơêƠ¤I“,,,6lذuëVŸÍ›7çÎ{Ú´i éÙ8 6sµq4¢W`Ẹuví’âM›R鈫‰ˆU8º»» z÷îÎGqqqAAAÈĐ»ª·mÛ–0f̀˜‚ jZ&Olkk»oß¾Ôª@__ßÈÈÈaÆU¯^]ÓR¹rå¶mÛ†‡‡ß¸qCôq"¢ô‘©)®Ó²¥oØ̉¥JI1_|8Åö¸¸¸;wîè4FFF¦¶~jbbbâăăí́́tÚ5êóçÏ“åƯ»w¯_¿.S¦̀Œ36õ¬m/^¼øâÅ‹+V¬¨Ïv]]]uZöïߟơ‡“R*:̉eä“r÷J;—Öij1{Pđ ¶lÉÛ»wâÖµk¿ÿçƯô ¶mkµoŸ&6₫3₫cQ áÚ´i#:¥PÜ›c K3tZ3"[Nó ́W¯^%ÿÊëׯ>{ö̀ÛÛ»I“&õ¼Ù±cÇ̣åËG½gÏ}®;æ̀÷W*ß<¤@F>)¿ă÷¾è«‰K;—ÖyŒ³³4&88W ¹ „…£óùóIÆY›₫cQ ±’ÿZO~…(‡\8>ÉÉÉ)ů,X0W®\*U’¡—;Ôa:D”}ư‰?µqnäÖù´Z5)̃»7ơ^’ÍFD”(«p<₫|ÿ₫ưëÔ©S!uéí³yóæñññ'NœĐ¶¨Ơj???{{{Í̀‘É5mÚ422̣̃½{̣FÍÜ=åÊ•}ˆ(S:¢c)”̉.Ă0ù§'OJqûöɾüáQ"¢œIA…£¦jM0eOÁÆD¯Æêw.ê ~Ó}K@ç΢s'"IA…ăO?ư¤V«3ß"EL˜0!((¨S§NÓ§O8pà¢E‹ÜÜ܆ ¢]ÇÏϯM›6Æ%^x(_¾üرc¯]»Ö¦M›áÇ8°wï̃ï̃½›9sæ'Ÿ|"ú8‘ü…¿´qä‘´s§7hôk:I1çØ"¢œGAÓñhǺ÷èÑ£}ûöy wKhĐ A øă?öîƯ[¸pa1cÆhfäIÍĐ¡Cׯ_úôi{{ûæÍ›ơƠW...¢Ft(…Rÿâ_ÍâP ]Ơ¸kWiµ3g’~M~Åq÷npj7"ÊaTYq‘/c6mæäät́Ø133] M/WWWÎă¨4ÁÁÁœMi”pRä¯|‹·Ú±2Æaub‰Ï?ÇÚµ̣ï|øJá ›VPÂy!<) ”c×+¨>Ó¼ÚÚÚ:[WD”¤vĂz•lzÇ_MåˉNŸˆÈØT¢ 8ĐÂÂâ₫ưûëׯWÎuP"2aĐÁ̉…œr¦M’á¤DD zƱjƠª“&Mú₫ûï¿ÿ₫ûŸ~ú©`Á‚:3)j́Ù³Gt¦Dd:‚¤½aíÿ8ÄYÀÀåË(_>q-d—›7Ç?ÿˆÎˆH ÷îƯ[¹r¥&ŒŒÔ™²›ˆ(‹LÅÔÙ˜­‰s!—æỌ̈9[?–­Ư¹³T8^¸€5E§ODd< ºU½jƠ*í¼‰DDFó¾+é¤_ăkMđí·̉:cÇ~ˆtVå$ UƯ¨Q£'O¨S§N›6mR›§«|ª Eʱ#­”ŒcHi'E>ÂZsѲ!Ô¤–ÚÖqă†èÄ Liç…À“¢H9öw½‚nU›››°µµ]³f……‚#¢œ`5VÅPM¬‚JS;º¸ q…îKß¼):k""£RĐ­êêƠ«(\¸0«F"2¾/đ…|q18|XjiÑBtDD¢)¨p5j”½½ư½{÷üüüDçBD9‘ö5/x(QBúT°WµªèL‰ˆÄPе½ùóç*TèÅ‹_|ñEÅœœRœgụ̀å¢3%"“5 ³¾Eâ kXG!jÎLœøé°aXµ èÜW¯&6¡tiÑY‰‚Ǹººê³̣ŸEͱ̀*-W Åù(™ßñ{ôÑ"så ªUK\^¸^^¢S6$Å—œŒ'EŕïzƯª&"Rù ë¾è‹¤·¦ưüwwiùÏ?EçKDd< ºU=|øpÑ)ÀŒXħb¢èơĂÿ9:&~Ô¼9ââd«;&:Y""ăQPá8zôhÑ)À2,Óa»ûÉ) ¾f1>^trDDâ(ôVµ¿¿ÿ¶lÙ÷êƠ+ÑQỊ̂Ú·S£üô“ôÑgŸÅ‹‹NˆHž¾¾M›6íÔ©Ó¨Q£¦OŸ₫üù󨨨&M,]ºT9ăxˆÈäB¡–h©]<<²‹6̃¸1é‹ù—-åÊ*ç̀™3eÊ”°°0ö˜˜˜åË—Ïœ9St‚D”ƒÄAm¼»k·x­]œñJ6’ăcˆ(ÇPPáxëÖ­uëÖibÍë5´³9ñ¼ùÂ… ¢Ó$¢ähăs‡l´ñ̀ ²¹wï&‘‘(¨p\µj•Z­633›6mÚ¥K—´í¶¶¶K—.Í›7/€ß~ûMtD”ƒ´B«‚((-ÏœÂJ,‰(ÇPPáxçÎíÚµóđđ°´´”ÔºuëÆ¸{÷®è4‰(gy‚'̉·³´áP¬NŒ’LÏCDdÊT8FDDHmr|ááá¢Ó$¢gæI 1ù4ÿëƒ/DçEDdl *5¯Lñ)FµZ}₫üy¥ùNX"2ºñ/-XÆ¢»¯&¼ª¢S#"2*•*Upö́ÙQ£FDD™fm¨¨¿Ñ¾%¡Ư^í(™ ½ÅÛ<È#:?""Ă\8º¸¸ˆ>DD™Ö¹36mjÉ‹³§bêlM˜y9­#™ ̃ª&"Ê´Î5ÿÛ¾0í;¼&Ù¢ó#"2 DD™ö¡p܉-ϵNĂ4Ñù G"¢LË;…Æ)?hC[ØN‘ˆÈX8̉: LŒ~üZÛ‰È?ñ§èÔˆˆ2‹…#‘! ÀỏB®÷Ú°3:‹Nˆ(³X8Biºo›QœE“G½µí ÑPt–DD™"¸pŒ‹‹,ú˜¥_gé‚bØ®sÚøX‘ÍÚø$Nƒ?âˆ(\8Ö«W¯jƠª7nđäÉ“6mÚ´iĂ—tQ6Ô©“6´:¸K₫É%\̉Æ¥QZt¢DD'xđ·oß8tèP©R¥^¿N|Çë™3g̉øJƯºuÅæLD”‚"E¤x÷îŸ3dHẩ=«¹mw»…[ÅJ¨t7D§KD”‚ ÇO>ùäéÓ§/^¼xñ¢¶qàÀi|Åßß_lÎDDq÷®§'´…ăP㦠‰ï!¼‰›¢ó#"Ê Á·ª7n,úe‰fͤxçN Ă0í¢¶ˆ$"Ê^“&MêÓ§O‰%̣åËgii©ì—&ÑGŒˆ(5jÈ—₫ùG»wÇJ¬̀é'Ø÷ø^tºDDé&øVu₫üùg̀˜¡‰ĂÂÂ6m àÊ•+¢ Qúuî íS7÷î¡lYÏ£­½Ö8S¿Á7¢3&"JÍă˜7õ-Z´hÑBt"DD"›‘»wøưw©¡];X€Ú̃°&¢lGA…£ƒƒẶåË—/_®YLHHxö́Y||¼è¼ˆˆôS©’ï̃  O©aß>‹±̣oü‚_D'MD” *5¢££,XбcǪU«6hĐ J•*:t˜;wnTT”èÔˆˆôvê”æ;v”Ú6l5ÔÚ–!’®^‰ˆÄRVáxáÂ…V­ZùøøÜ»wO3Åăû÷ïÖ¬YÓ¦M›K—.ez DDFơçŸRÜ¿b0´…QXtDDúRPá5a„đđđ?}ö́Ùøñă£££E§ID”:gç´?ÿæb®¶å1ïÁÑyéEA…£Ï£GØÛÛ;vçΧNÚµk×øñăí́́„……ưüóÏ¢Ó$"J||LD„æwï–Ú´Ăÿ̃à¶±#:~¼g""PPáxưúu–––ëׯ:t¨›››££c… † ²qăFÍ,œ©‡ˆ-ÙÀj$y‹5O ̣ ÏgøLÛ^UE§NDôq *ïƯ» V­Ze“M~æââR¯^=đ}ƒD¤pMH±́Jcï̃RóªU‰Áz¬×6^õă8""eSPᨑÚü; ̀ÍÍE'HD¤Ù¸˜Í›¥æ/¿”âgx¦ƒ¯`%"¥SPáèêê àÂ… 7nÜĐùèÖ­[gΜàââ":M"¢̀ K áØ̉ƠÈ*¨":5"¢´(¨ptwwđöíÛ.Y²ä̉¥K>¼té̉’%K đæÍí:DDÊec“bóéÓRܰ¡o†t5̣:®ûÁOô¥J¥V«3ß‹AÄÆÆvêÔéáÇ©­P¼xñ¿₫úK3JFÉ\]]ù,¦̉;l22“=)ưû'Îô éX•́ƒ̣OÂ^¤ ̣Dzɗ́Œ'Eŕïz]q´´´\¸paÑ¢ESü´H‘" .T~ƠHD9]J«5¾ưVGŒbG8öôvB̃°&"ÅRPá R¥J{÷î5jTåÊ•óçÏ ₫ü•+W₫ꫯöíÛW¹rå ÷¼}ûö={º»»×¯_Ê”)/^¼Đÿ»aaaƠ«WŸ0a‚₫_!¢œK^8Êß̀œ)Å+V$ù̉ïø]ó†5)–…ètåÍ›wĈ#FŒemmù>-Z´jƠ*++«5k>xđÀ××7 `ưúơú\¿T«Ơ“&M⛲‰H_²Ÿ«»wcÍù‡µjáüùÄøÏ?“LñpG8jâ&h"ö†5Q”uÅQ‡AªF''§ưû÷ûøø8p ÿ₫ׯ_Ÿ?¾>__·nƯyíy"¢tùđ̣­“'¥X~iÀ'øD~Ăº22~…ˆ(‹(ºp4ˆmÛ¶%$$Œ3¦`Á‚–É“'ÛÚÚîÛ·O37d-ZT®\9Ñ;AD&"W®$‹ï̃%Y”ß°¾ÇpLt¾DDI˜~áxáÂ33³&²×9˜››7jÔ(""ậåËi|1..nâĉööö“'O½D”­¤9ă¬ü¹Gù¼<áׯMÑTô%aâ…£Z­ tppppp·k̃j’Æwúé§;wîüøă6©̀ÊFD”2ùđ餫t́(ÅÉ„ùŸxÂS»XÅEï ‘Dqƒc +&&&>>̃ÎÎN§ƯÖÖÀóçÏSûâƠ«W₫ùgzơêƯºu+½ÛƠ¼Gnÿ₫ư¢F*:̉eÂ'EU§N©qÔ5Ï’ÍááñÉÆ‰‘ởË+É<S0åç_B—>[Ú1ª#ŒÅ„ÏKöÅ“"\›6mD§ &^8ÆÆÆ°²²̉i× »yơêUjß8qbñâÅÇ—±íæ̀IAÓç*PN8)Ö{öX'”À† ظ11₫é'»¥KítVPC­BâtᣠŒU`”1sÎ ç%ÛáI+ù¯ơäWˆr…̃ªö÷÷?pàÀ–-[¢¢¢âââR«đ>ÊÎÎN¥RÅÄÄè´k¦×Ñ\wLÎÛÛ;44tîܹœoœˆ2+•·s•.-Ạ̊·jMĂ4mlaêäQv¡¸ÂÑ××·iÓ¦:u5jÔôéÓŸ?Ơ¤I“¥K—fà툶¶¶ÉëÎÈÈHÚqÖrçÏŸß¼yóĐ¡C«Táˈ(£ Jûsù¼<ɇȘ…YÚ8ñ °@ô.)¬pœ3gΔ)SÂÂÂtÚcbb–/_>S₫Ö½999EDDh*E­àà`ÍGÉ×°bŠ׺uëàÏ?ÿtuuíĐ¡ƒèƒDDÙAï̃RüßÉ?/\XS›L>øxŒ½KDDJ*oƯºµnƯ:Mlnn®mW©ôÙ¼yó… ̉ÛmóæÍăăăOœ8¡mQ«Ơ~~~öööîîîÉ×/Y²dû¤4h H‘"íÛ·oÔ¨‘èăDDÙ¼pܲ%ÅUÖ®•âZµRîf¤WjŸz$"EA…ăªU«Ôjµ™™Ù´iÓ.]º¤m·µµ]ºtĩ¼yüöÛoéí¶gÏfffË–-Ó¾6ĐÇÇ'<<¼{÷î¹>LŬ¶Ö Aƒ…I;@5.\8qâDÑljˆ²ƒÚµ¥8•ÂñóÏ¥8µ?¿Ä—Ö̃¡Ơ­Eïåh *ïܹ ]»v:£RZ·nƯ¸qcwï̃Mo·E™0aBPPP§N¦OŸ>pàÀE‹¹¹¹ 2D»ŸŸ_›6m† &ú‘)ºx1µO ’bùär¯ñZÄÁ÷x/zˆ(çRPáÔgpqq®>5 4₫|ggç½{÷>₫ÜĂĂcưúơÉ'w$"2²5k¤ø»ïR]íü¢s#·è¬‰(çRĐ®®®W®\Iñ)FµZ}₫üy¥å3X¤GÇ;vLuƯvíÚµk×.µOƯÜÜ8/#¥[ƒIÆN§¢R%ܸ‘ïÙƒà ÆàåX~W4‹mĐf?øN"@AW+Uªà́Ù³£F:ùá§mHHÈñăÇG©)+T¨ :M""ưÈÇÇ;–ÚẒûØ©ÿy‹Ë¸¬àÀYœ½{D”)¨p:t¨££#€ |€ÍđáĂE§ID¤yá¸ukjkåNzçùÉ“Tû …ỗ¹º¨+z÷ˆ('RPáèèè¸`Á‡?µ±±ñöö.R¤ˆè4‰ˆôóÉ'RœÊÀj Ùta¨Q#ƠƠ¢¨'<µ‹P@ôQ£ Â@:u:4lØ077·|ụ̀°²²ªP¡‚§§ç?ÿüÓ¬Y3Ñ eÈË—i|Ø ‡†¦ƠÍÏøY‡#|9–‹̃1"ÊY48FĂÚÚÚËËËËË @TT”µµu¦»$"Ä̉±±ú¬¸p!ÆMŒ»uĂΩ®©†Z;øHŒ¢w’ˆre]qỘ÷÷?pàÀ={¢¢¢âââ’¿lˆ(?æøá)̣̣’â]»>̉ë*¬̉Æ| “â G__ߦM›vêÔiÔ¨QÓ§O₫üyTTT“&M–.]ªV«3ß?‘ñôê%Åi>æ O)3'­5‡bh!̉.ºÂUô~QN¡¬ÂqΜ9S¦L Ói‰‰Y¾|ù̀™3E'HD”­eoüXáøûïRüơ×éøiă{¸€Ñ»JD9‚‚ Ç[·n­[·N›››kÛUªÄ1›7o¾Úû\‰ˆîŸ>ºJ™2éXưwH•fY”½{D”#(¨p\µj•Z­633›6mÚ¥K—´í¶¶¶K—.Í›7/€ß~ûMtDDYE>x‹Y¹úôE_í¢œD§OD¦OA…ă;w´k×ÎĂĂẲ̉R₫QëÖ­7n àîƯ»¢Ó$"JJ•ô_×Ö6ÉâăÇY6iă§xº Eï-™8œSüÔÅÅ@xx¸è4‰ˆ̉C>°úÊ•®¾{·תơñîƠF Ă8Ñ{KD&NA…£««+€ŸbT«ƠwU—.]ZtDDé¡ß‹µ:u’â½¶°̉°ÎÎCDYJA…c¥J•œ={vÔ¨Q'OÔ4†„„?~|äȑ±B… ¢Ó$"JùŸ»X­±zµ7nüñơ{¡—;ܵ‹MĐDô>‘ÉR)grÄđđđÎ;§q3ÚÆÆf÷îƯÊ]µ«««¿¿¿è,(‰àààÔ‚ QrĐIQÉ®ê÷#7ưßHr­q/ö¶EÛŒ%›ƒÎKöÁ“¢@9öw½‚®8:::.X°ÀÁÁ!ÅOmll¼½½•_5ẽ¤IRä›éÚE>́HDYAY…#kkk//¯;w^¹rå̉¥K—/_̃µkׄ lllD§FD”!̣nß®ç—₫÷?)ÖóµY30C¾ø>½çDdjT8.ù äĂHBkkkÑIe¼Ôo| ’À1CßMÉgçÙˆçpNôΑIQPáèëë»bÅ+V<₫\t.DDYcçNư×­YSׯ×÷[¡ƠÆuPGô‘IQPáØ½{wMđđáCѹ‰w₫¼ ï·¢è$Hƒkø°#‚ Ç‘#GvíÚÀªU«>}*:""Ă)Q"cßst”â'ôưÖ̀±‚•v±?ú‹̃"2¢Œ5 @¡B…[µjU¾|y{{{•J÷oååË—‹Î”ˆ(z÷ÆÜ¹‰qPô~ Ö­[prJŒ5̉wNGQˆ̉^kÜ€ _᫨©ï—‰ˆR¡ ÂñđáĂÚ866ọ̈åË¢3""2yá¸u+¾₫ZÏï,˜d14Åé»Í‡xX‰W:k¡–|Ü QÆ(èV5‘Ér—^ ¨ÿÀj³g¥¸bÅt|±8OÄDí"v$¢̀SĐÇáÇ‹Nˆ(ë]¿®Ơk×–âW¯̉·)oxÿ„Ÿb«Yü ŸmÀÑûODÙ˜‚ ÇÑ£G‹NˆH‰ÆŒÁâʼnñ§Ÿâ₫ưt|71Úk±q5ESÑ;DDÙoUŇÇ &&]_]´Hƒ‚̉½åç&Çm¾»•ˆ2NAW—,Y¢Ïj tuu­X±bîܹE§LD¤·Áƒá뛯]‹‘#Óơíuë0p`b\¹rúnwÛĂ~ŒĂ8Í¢ *”!¢ŒQ©ơŸƯ!‹¹ººê¿²‹‹ËÂ… Ë–-+:ë”wÄßß_t”Dpp°³³³è,(‰œxR´ó‹U­+W2üm ọ́hUDÅ[¸¥‰k¢æyœOqµœx^'Eŕïú́z«: à³Ï>‹Qú]½/-[&Åuë¦ûë7qS_À…•X)ú(Qö£ Âñ‹/¾hÛ¶­&₫ä“O:wîû́æÍ›zö́yäÈ‘¹sçzyy}ÿư÷ôôôpăÆ;z{{|øđÚµk>>>ưúơ‹PµjU3gÎ\°`€âÅ‹‹ÎˆÈØÆ“â~ư2ØI8µ1ß%CDzRPá8qâD{{{¯_¿^¹re¿~ưZ¶lù¿ÿưoÁ‚ÏŸ?`aaÑ¿W>̀ÖµkWÑY¥‡voOd¬ùó¥ø÷ß3˜È'ødVhµ¯%$"Jƒ‚ Ç’%K®\¹²`Á‚)~+W®3fh®JjT¯^½]»v¢³&"JLÑ6L+V̀`'_âË&h¢],„Bb )Ÿ‚ Gîîî‡₫ú믫V­jkk O<Ÿ~úiŸ>}<سgOÍj•*U9räÚµkùÖA"Êf4âL+e³wߺ•ñtâ¨6~‚'£1ZäÁ!"ÅSĐ+“‹²²²R©²Ù ”û"%ă »(ç”L¾:đ&Æ`ƯºLd$»O½ưÑö…{ˆ=B¤#ç₫cQ°û»^YWµüưư8°gÏèè踸¸W¯^‰ÎˆˆÈ@,, ̉M@€g̣-ZđH÷,ÜSÈQ!¢lAq…£¯¯oÓ¦M;uê4jÔ¨éÓ§?₫<**ªI“&K—.ỤÅQ""}És|ø03=–ƯX«„…Ph –h9P†ˆR£¬ÂqΜ9S¦L Ói‰‰Y¾|ùLùôeDDÙ”ÆÇX¼X}}3•Ô(Œª‡zÚE{Ø 96D¤p *oƯºµîĂC:æææÚví3›7o¾pá‚è4‰ˆ2G6;D& GS§JqëÖ™êêNiă—xÙ"’ˆL—‚ ÇU«V©Ơj33³iÓ¦]ºtIÛnkk»téRÍÛ«Ë䃭`å¿Æh¬Y,€̣ËD”Ó(ë£VDd²\]¥Ø«5.^”âT&7K·Fhô¤yÆ9È('SĐÇØØØK—.]¿~ưÙ³gk•+W®V­•A'Ë%"R–ÈHCơT½z’Å2ûB©˜z'"ñƠ4*¨xƯ‘(gRDáøîƯ»Í›7¯ZµêùóçÉ?µ´´́̉¥ËèÑ£íí9-™Â…ñè‘Á{‚önM›6P¨À;€–°|ƒ7Åhp'sœˆH9Äߪ¾zơjË–-øá‡«F±±±›7on×®ƯƠ«WE'KDd8̣ñ1—/ªW++”-+-.]j°|c«OáÔ×ø:k)àÂñùóçC† yüø±¶%W®\E©P¡B‘"EråÊ%_ó‹/¾xñâ…Ø„‰ˆ F^8`Àưư¥xôhC¦,¿C=söa_V"R$Á…ㆠ"?<ÜÓ²eË 6ܸqăèÑ£»ví:zôèÍ›7ÿư÷ÖĐyơêƠúơëÅ&LDd0̣1Ï‘G«cG)6́›b£Û¡Ư#₫n;)–àÂQûjÁîƯ»/[¶¬V­Z*U’ñzƠ«W_ºtéÿ₫÷?ơ‰ˆ( ₫)Å+W²gKXÂ)íbđ½ D9ˆàÂñáĂ‡à«¯¾JcµÑîµơ%\rƒÛ-ÜʺƯ!"±Q8†‡‡8PtDD"xyaÔ¨ÄxëVôêeØî4€¹9´ùl̃Œ>} ¼j¨µµămÜ^„E^đÊ\—D¤P¼UMD$”|N‰,x̀@\œ÷í›%;!Ÿ|,ÆîÆî,Ù ‰ÆÂ‘ˆH1ÎË¢Û´‘bù k (R}Ú]nàFí  $øVơ={D""Ñ̀̀¥[Ø·Ú·+¬]‹5k ¿ s˜ûĂß®Åʨ…(+Xeé~‘‘ .]\\D""Ѽ¼°`Ab|ö,êÔÉ̀Ÿ/M ^¢>¼~ÁÊ¢́>́k‹¶EkXËoa‘ à­j""ÑÆ•â… ³h#ăÆIqH³d+mĐf9–k918‘‰É)…ăöíÛ{ö́éîî^¿~ư)S¦¼xñ"íơccc×­[סC‡ªU«6lØpđàÁ§N̉oSDDéTDöºçíÛ³n;×®IqÖƯïáă U©¬‰LI(-Z4uêÔû÷ï׬YÓÚÚÚ××÷‹/¾Hcbȸ¸¸₫øăOŸ>­[·n™2eÎ;7hĐ åË—§g³DDÊR¹2>ùDZ\¹2«64󻢫v‘µ#‘É0ưÂÑßßßÇÇÇÉÉiÿ₫ư>>>èß¿ÿơë×çÏŸŸÚW¶mÛvơêƠêƠ«ûùù­\¹̣×_Ưµk—ỰåËïܹ#z‡ˆÈớ)ÅaaY·đp)>< wh'vVAí"kG"Ó`ú…ă¶mÛÆŒS°`AMËäÉ“mmm÷íÛ—Ê0Æưû÷øæ›o´/Ñvqq6lX||•âÍ›¡Ç«µ F^;î®Èúéȉ(CX8)L<¢¶|è˧é1yíø₫©…Z¢¥…#‘Â|ÿ½ỵ̈‹1·Ü¢J–|¯]fÜɹåµă\pE}0‘’±p$"R˜qă¤ø›oŒ¼ñ£GCµñêƠÆ̃uyíx÷ £°±3 ¢4±p$"R0ùƒ‡Æâë+Å*UÆûÉyíøåc®‰H8DDÊ#ŸG1"ÂÈïÖ ̣—­Nœh́½—×H:_‰Å‘ˆHyä9Njüí?y"ÅÚ¹Á‰µ#‘2±p$"R&M¤xƠ*!)ü*›‡Ûø7¬¨¡¶”kG"`áHDD)80ɼ@C‡ Èá^UB%í"kG"áX8)̉¨QR|đ ̃¼‘b1‡á:®w@í¢ ª„ˆI…ˆX8)ỐÙR,â1G”b!7¬ü…¿Fb¤v±JxĂ[Ô!ÊáX8)R₫üR|Ⴈ,&OFé̉̉bï̃b̉ø ?̓4Hg2&‡ïD¢œŒ…#‘R+&:¸_·nÅƯ»b̉ñÛ°M»ø-¾í®‚ QÎĂ‘ˆH©ä“̣ÈïƯÍ›R\¾¼°4z¢çœÑ.₫?J¡”ÀĂB”±p$"Rª₫ư¥XÜcÜÜĐ½»´X¶¬°Lê ÎHcvà‡Z G"¢́ !Áöẃâ€l̃,,“<ÈĂéÁ‰DaáHD¤`;K±¿¿Ø\Ô²j­o_±¹¤đj™ûƯŒD9 G""“?æøÍ7¢³I’¨Ùy´ÔPFaí¢#å£gˆ(+°p$"R077)öơ ¦L……´èå%8Ÿ0„µG{íb/ô ¯¸!Ê1X8Q:¼/Å‹ ›GköLĂ4í¢|Ê ŒàœˆL G""e›5Kÿ]t6€bfçÑ…YÇpL»x÷9\†(‹°p$"R¶ỉå4%<æÀÍ _}%- Ø@c4æPk"#`áHD”}üû¯è -]èÓƯ3Ñ%Á‘ˆHñvî”âEg#yôH4Í×;±“·­‰ ……#‘âƠ¬)ÅGˆÎFR¨f̀•đ°£Fva—¼E•Îl"ÊDDÙ»»ÎF2}: K“p£xqÑ }Đ]t*E3˜q†p¢LbáHD”¬['ÅJº[ ,LCC±MIµ™js˜k{¡—üe3D”^,‰ˆ²ƒÊ•¥X!ăPd̃½“â^½đúµè„dâ×½µ‹ñ˜<e G"¢l¢N)¾uKt6IäÊ…¤EÑ %µ›}‘ä…*¨ă¸è¼ˆ²DDÙį¿J±ÂîVhƠ £GK‹Ê(£Ñ Ưâ'oiŒÆưĐOt^DÙ G"¢l¢\9)¾xQt6)X¼e˦œ¯˜Ă\ u1H“b₫ßyÛ(]X8eKñåË¢³I¿’ØËKtBÉ„ ä;|'oQAµëEçE”=°p$"Ê>”}·ZC-›gñb:$:¡d¦bêS<•· À€vh':/¢l€…#Qöá́,Å7nˆÎ&U¯^Iq«V¢³IIPCm+mË>́ămk¢báHD”­´l)ÅgΈÎ&e66زEZTÚ@­(D}‰/å-*¨b¡è¼ˆ”‹…#Q¶"Ÿ üóÏEg“ª^½Đ¿¿´¨ØÚqV<ÆcyË8Œs„£è¼ˆ…#Q¶R¤ˆˇ¢(Ïo¿¡Q#iQ±µ£œÔPW@mK"TPÅQÑ©) G"¢́¦C)>vLt6iñóCÁ‚̉b±bï*«Ư­Ø(oi†fƠPMt^DÊ‘ˆ(»É&w«5<‘âÿ₫C‹¢J]?ôSC-o¹‚+*¨.C‰3 Á‘ˆ(»ùä)₫÷_ÑÙ|œ|‚₫Áˆ¢J;[¨?G’r¼:ª7ESÑy) G"¢l¨{w)>xPt6'¯W¬ÀO?‰N(Mk±6̣–c8¦‚Ê~¢S#Œ…#Q6$¿[Ư¾½èlô"¯GÂéÓ¢J“ÔPwEWyc4©ƒ:¢S#‰…#Q6dm-Åqq¢³ÑWd¤ׯ¯ôÚÀŃ B¼åΩ ÚDßY}"IDATƯ¢S#ƒ…#QöôÍ7R¢sJDœÁƲ([3Ô‘̉±p$"Êæ-’â=Eg“nNNøçiqËT¬(:§ô¨ƒ:j¨Çb¬¼ñ© jÖ¢³#20DDÙܘ1R¼c‡èl2¢Y3¼/-̃º•JtNé´ ÔPGqyăATA5“EgGd0,‰ˆ²¿nƯ¤xÉÑÙd„…E’wÙ¯vđ÷aŸN£7¼UP-A¶̣øï¿P©à—ưgE¼…[j¨‘B!ÜJ;—₫_ˆÎ‘`áHDd‚äw¨ï̃Å;¢2$µZ÷Bj“&Ùû©G­ ©¡NñƯÖ?ăgT¼I±p$"2E·nIq… ïG‘æ̀ѽô¨yêqüxÑ™ÂøQ ơ~́OñSÍ»g:£³è4)‡báHDd*T€««´hB;j©Ơøüó$- @¥ÂÁƒ¢33„Öh­†ú ̃äẼäŸ₫‰?5 'ÁÏ,) G""u÷®›Êđjk×âÉƯÆÖ­³ñkftäAXÄ¥6Åă\̀ƠT ±Pt²”#°p$"2]sæHñ'ŸˆÎ&K,µS§ê¶«TIf̀îFa”æd34Kq…q§© `èdÉ”±p$"2]̣;ÔÏŸcÿ₫Œw¥lß}µµj%iŒ‚J…‚ñâ…èü $̣üƒÔPÂ(s˜§¸ÎxŒ×T_âË÷x/:e25,‰ˆLüVnÛ¶øóOÑ e¡sçđúµnă³gpp€J…Û·Eçg8K°$qj¨cqjë¬ÂªÜÈ­‚ªª„I<øI À‘ˆÈ¤,˜¤v́Ü;vˆÎ) Y[C­†·w ¹¹A¥Â×_‹NÑ Fc´j5Ô_#Ơ»‚+­ÑZs²ú @tÖ”±pLƠöíÛ{ö́éîî^¿~ư)S¦¼0™[D”ÓèܬíÙ¿ÿ.:§¬5q"ÔjlÚ”ÂGsæ@¥‚‹ ®]¥Aư€4dÚÏ8₫ßË¢¬¦ˆ́ƒ>§qZtâ”ͰpLÙ¢E‹¦Nzÿ₫ư5kZ[[ûúú~ñű±±¢ó""Ê;;DË^|ܯÖ­S–ëÛj5Iá£À@T­ • ÿûŸè, m,Æj*ÈƯØ]%ÓXs ¶ÔG}MYú¢o$"E§OJÇÂ1₫₫₫>>>NNNû÷ï÷ññ9pà@ÿ₫ư¯_¿>₫|Ñ©eT¾|x/*ñùçXµJtNÆĐ´)ÔêTpܾ*T*”+‡Í›EçjPĐé_ü«†:‘c16í•ïàÎfl¶…­¦,„Bă0î.‰̃ R)ضm[BB˜1c ,¨i™̃½½™S •Nà„¦ˆ|„G_ăkkXëóÅhDïÄΡZ •T̉±Q© ªŒÊåPîGü¸ ›NâdLÿïœ̀Bt£V«äíeË–R£F Ñ9eZÂËUC™2΢S32€fl̀H,Û‡¶A(ÆÊqqع;wâÛoEå›E§¥đđCâRËCè· }G®ôÍ₫x7LÁQGG Ñ ÂÂQWLLL||¼N»­­-€çÏŸëÓ‰«ü±€ư¦;ïn¶*:̉Å“"ṼmÛ¿₫:W¸Ä˜¶e©½1i¾A>ÑI r¨%µÄÀu‰‹¥₫Åê¡ÈưM‰ÎŒ„…£.ÍĐi+++vkkk¯^½̉§ÿœú—ˆ‚9;ç+)Ù OHÎÎèÙΟÇ!¸~]tBâM‚÷$xx€’'ÑàOtú̃ ¯è¼ù·ZĐm¬qßMĂK;T¿Î™±pÔegg§R©bbbtÚ£¢¢đáº#‘é¨U+qJĂk×àé÷ø±…Ẻ_ OŸâĂHAIh(Ó«1&ù’^Ă{ñööï0266IZ¢¢`mñ#"t^ä]̣íÛ’yNơĂ)@zg£ÏĂ6Eß…Å;ư_è¿8'MpëKq‹G:ư=s,d.o‰‡™9tÇV†Æ*fñ8Ă 03KÚç㸅,e¸Ă·ê\yTInR‡ÇÛ;'Ăøj¡Đ¶¥Öa¼Sx\‰Đ¸’¡ñÅĂâJ†¾Íca•`£Î«¶IÈWø©ùKƯ7ˆÇ{lZHŸÆxû׿/’|=!ß³˜¼ï°ÀsógIKKÈgöÎBŸï@)ä@,uYXXØÚÚ&¿²  `̣ŸDD¦¡J\¸̀+Á)ú"ƠOéƯ˜Áï§ă¤èŸŒZéưƯb@1 êGú³K©±”̃z^½Ñ¿C+è%Ùw]]]sæcU''§ˆˆM¥¨¬ùHtvDDDDb°pLAóæÍăăăOœ8¡mQ«Ơ~~~öööîî#"""ƒ…c zö́iff¶lÙ2Ís|||ÂĂĂ»wï+W.ÑÙ‰ÁgSP¤H‘ &x{{wêÔ©aÆ<8{ö¬››Û!CD§FDDD$ Ç” 4¨@üñÇ̃½{ .́áá1f̀kk½¦×'"""2I,SƠ±cÇ;΂ˆˆˆH)øŒ#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#åmÚ´éâIQ&âI!å`áHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzQ©ƠjÑ9˜WWWÑ)QỌ̈÷÷‚,‰ˆˆˆH/¼UMDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáHDDDDzaáh0Û·oïÙ³§»»{ưúơ§L™̣âÅ Ñå,±±±ëÖ­ëĐ¡CƠªU6l8xđàS§N%_§I”°°°êƠ«O˜0!ùG<)ÆwăÆ‘#G6mÚ´fÍçÎK¾Ï‹1½{÷îçŸîÖ­›»»{³fÍF|5# ruu½víZŸês Lû4™Ï˜1Ct¦`Ñ¢EsçΪY³flĺ™3gΟ?ß±cÇ\¹r‰N-Gˆ‹‹ëß¿ÿ;âăăkƠªeccs₫üù]»v™™™ƠªUK»O“(jµzĈÁÁÁ®®®­Zµ’Ä“b|Gñôô *]ºt©R¥ÎŸ?ïëëëææǽ́¬]‡çŘâăăû÷ïïëë›+W®5kæÊ•ëøñă[·n­U«VÑ¢Eµ«ñ¤Ç̉¥KoܸѳgÏB… é|¤Ï)0ưÓ¤¦L»{÷n¹rå6løäÉMË́ٳ˖-;kÖ,Ñ©å›6m*[¶lŸ>}bbb4-÷îƯ«U«Vụ̀åoß¾­iáihíÚµeË–-[¶́øñăåí<)Æ÷̣åË5jT©RåâÅ‹–k×®U¬X±^½zñññ#Óü=zôû÷ï5-§OŸ._¾|«V­´ëđ¤dµW¯^]¸páÛo¿Ơü°ºzơªÎ úœ‚œpx«Ú¶mÛ–0f̀˜‚ jZ&Olkk»oß¾„„ÑÙåû÷ïđÍ7ßXZZjZ\\\† ¯½aÍÓ$J@@À¢E‹Ê•+—ü#ăóơơŒŒ6lXơêƠ5-•+WnÛ¶mxxø74-,Ÿ îéÓ§ 6´´´üôÓO“ÚµkWM̀Ó$Đ­[·ºuëÖ©S§yóæÉÛyRŒoơêƠ .´µµ­Q£FLL̀… T*Ơ¼yóÚ¶m«]‡çŘÂĂĂ{ôèñèÑ£R¥JU¨P!""ẩ¥K S§NíׯŸv5ă˜:uêöíÛ·mÛ–üm}NÉŸ&ó3fˆÎÁ¸»»—*UêÉ“''O´°°hÛ¶­··ẉ)+øûûûúúÆÅÅ=MI¹rå´£dxzö́ÙÖ­[]]][µj%oçI1¾5j)R$((èæÍ›oß¾­S§ÎÂ… k×®-_‡çṚ̌åË÷¿ÿưÀăǯ^½ú₫ưû5j̀;W3hI‹'Å89rûöí={*THç#}NÉŸ&^q$""""½pp é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#é……#¥Û»wï6õ>^ BG[[›ÛỠ̃̃Z̃´iÓ|¿<´8À ˜ÍæmÛ¶]»v¡Ñ ơḈ̃½»§§‡Ë£/^,•J¥Ré’%Kæûµb±ø¹ç£å––·«çΣ©T9߀‡G˜¢¢¢;wîĐrjjjMMMWW×O?ưTXX¸xñbBÈÈÈÈîƯ»¹<*99¹¹¹¹¹¹¹¢¢âî;öûï¿Ûíöyù&sÖ4K%;wÎétº^jmmu«à €«ööv½^O˯¿₫úáÇW¬X!üñ-[¶;vŒ^2›Í}}}´́:…Îáp”––®]»¶´´”L1Çq||¼²²R£Ñ¬Y³fåÊ•IIIï¼ó[ Óơ™‹åí·ßƯ°aC\\܉'fñ^®´Z­GIMM~ñÅ?ùä“ñññY4=ƠÜÁ¼¼<×™ˆG•Ëå,ÏÎΖËå###“ö“V Fv~ddä矦åÍ›7³óÿüóÏ?ü™™©T*###•JeffæéÓ§]ßhú¯1MÏ‹ÅRXX˜Ÿ››ÛƯƯ}—ipß̣ïÀ£²²’Äbñ›o¾évuưúơëÖ­$„\¾|9((ȭ¾}ûNŸ>=Íóív{FFÆÅ‹Ù“Éd2™¾ÿ₫ûưû÷¿ụ̈Ënơm6›F£¹zơ*=¼uëÖÑ£Gûúú><»´Z­ééé½½½ô°§§§§§ç̉¥K4̉ơhÓ\øúú* :Á±¥¥… I ̣”Éd¬~^^^]];èèèĐëơZ­ötÉ`0́Ư»×b±ĐĂ;wîô÷÷766fgg¿÷̃{û0_q®:;;iaăÆ>>>+œ8q¢ººººº:!!Áí’Ñhœ>j$„TTTШqÑ¢E6lÈ̀̀Œ"„8ÎC‡]¹rÅ­¾Á`¸zơªD"Y½z5ëOUU·©̃̃̃€€€¨¨¨… ̉“gΜéêệPÓ;v́hll …ô°¨¨¨±±qÑ¢ESƠOLL¤×EHl‚£ë8u]]y‘+›Í¶gÏ5*ÜÜܤ¤$>Ÿït:u:]UUƠƯ7÷d€“ññq–X’Éd3½ưúơëË—/ß¹sg``àc=6iÍܹ́“e4_}ơƠ¶¶6‡ĂÑ̃̃́v‹R©Ôjµ̃̃̃ƒƒƒYYYf³™R^^₫üóÏÏî5?øàƒmÛ¶B®\¹’’’̣÷ßBººº&®8¹'Mûúúúúụ́xóé§Ÿ̉ưƒX 3::úàÁƒ„ăÇÏåFK07qNl6+Ïb´P(ÔétÉÉÉQQQSÅ4J#„ÔÔÔTUUÑ8µ¸¸¸¶¶¶¶¶–%Û@pàÀoooÚ¥½{÷̉ó.\`‘5B‚ƒƒW­ZEË®«È=Ô4G~~~111„§ÓICĂ¾¾¾₫₫~BȲeËÂĂĂYÍÍ›7—”””””deeÑ36›m´ù×_Ư}gXlºuëVv255•NĘfw!x@!ăœĐEÓÔ4ûTO%,,́_ĂÍ5kÖĐ|˜ÙlÎÏÏçñxááák×®U©TO?ưôÄú¡¡¡O<ñ„ëí´àt:ûûû—/_>ÓNºeûÄb1{ §›æ.11‘n]~ö́Ù””6Níº,†uÉjµ¶¶¶Æ_ưµ««ëöíÛ÷°'4ÉJÙ±cǤúúúär¹ç>̀=d€“ øùùṆ̃Ä uëÖ­›7õ¼ysâº`vï4víÚ•‘‘AÓx„§ÓÙƯƯ]QQ‘–––‘‘11Zơ÷÷w= …>ú(-³QơaCÆ“z´iîÔj5MéÑ|¶§£ÛFJNN‰D́̉/¿ü2ñ—ô†††\GGGÙxºT*ơ觘Ǧ% C·Z­çÏŸ§ñ¹åö***t:ĂáÉdß}÷]gg§R©¼WƯxä‘GXúäÉ““IJJ̣è§€¹‡À¸bSÙ¾₫úk·«z½%Ûè<¼±Ûí‹Åb±ØíöM›6•”” NÇ©ÙV…ŒÉd¢»ÿPííítLyÁ‚ưÜ›vû]i·ˆsvXr±¤¤„N©t§&„|ơƠW´pàÀF#—ËÁơë×¹·̣¯=_¶l-8@b±X$‰D¢i–‡À #p¥T*ăââhùĐ¡Ceee7nÜ „ŒƠÔÔ°¥»aaa3}xooï₫‡î(âââ¶lÙB+¸& ©±±±ƒBnܸñá‡̉ó*•Êơ‡=á_›f3 /^¼È¶Cohhèèè˜₫±\ZW«Ơ|>Ÿré̉%zÆ-p¼}û6&fñ_ww7—]x¸÷œư1|óÍ7lh}}}LLLll¬R©¼·S*à~€Å10ï¿ÿ~ZZÚèè¨ÓéÔjµZ­ÖÏÏÏjµ:ZaáÂ…Z­vq›\.÷÷÷·X,‡C£Ñ(•J±X|íÚµææfZA­VO¼«¡¡A¥R=ơÔS]]]t°˜ÏçïÚµk>ÅôM³¸GGGSRR†‡‡Ùj7"‘ˆÎ,//7™L¯¼̣—×tÿ9ûûû¯ZµErÁÁÁlFÊÇÇÇÇLJ>sß¾}µµµ<¯µµuúߌ™iÏßxăS§NY­Öü1+++&&Æd2±9—Û·og«‹à¡Œ#̀@hh¨N§s]=<<̀¢F©TúñÇÏ"ƯHáóùeeetpÓb±|ûí·Ÿ}öY]]‰‰yíµ×ÜnY½zu@@ÀàààùóçièFwÉñè¢fMGDD¼đ ´<22̉ÙÙi6›e2Ë̉¹=.\¸P\\̀%ïèº9ÑÄqj·~ưzÖzsssSSÓ̉¥KcccéI*÷‹D¢¢¢" îèè8~üx}}=ƯñG£Ñäææzú_æG˜™gy¦¡¡!???&&F"‘x{{?ùä“*•*??ÿ̀™3ëÖ­›ơ“W®\ÙØØ˜““¹dÉ///‘Hố³Ï~ñÅlµ5#‹+++·nƯäïïŸđù矧§§ÏÁGà̉tqqñ={BCC…BaxxxVVÖ©S§&]]ŸŸŸœœ,‘H„BaHH—…D t´LXOÍJáóù+V¬ÈÎή®®§WkkkÙ0ôDÜ{®R©jjj̉̉̉"""„B¡L&S«Ơ_~ùeAA—·€oâ₫d÷³̣̣̉̉̉rBH|||YYÙÿIÓ³0>>®×ëÉ£ü³€9'///„Œpoa¨8Aàœ pN°88AÆ8Aàœ pN8'€“ÿeÈ2³‹IEND®B`‚fuzzy-logic-toolkit-0.6.0/docs/bounded_difference.html000066400000000000000000000112651463010412100230670ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: bounded_difference

Function Reference: bounded_difference

Function File: retval = bounded_difference (x)
Function File: retval = bounded_difference (x, y)

Return the bounded difference of the input. The bounded difference of two real scalars x and y is: max (0, x + y - 1)

For one vector argument, apply the bounded difference to all of the elements of the vector. (The bounded difference is associative.) For one two-dimensional matrix argument, return a vector of the bounded difference of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise bounded difference.

See also: algebraic_product, algebraic_sum, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/bounded_sum.html000066400000000000000000000111641463010412100215770ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: bounded_sum

Function Reference: bounded_sum

Function File: retval = bounded_sum (x)
Function File: retval = bounded_sum (x, y)

Return the bounded sum of the input. The bounded sum of two real scalars x and y is: min (1, x + y)

For one vector argument, apply the bounded sum to all of elements of the vector. (The bounded sum is associative.) For one two-dimensional matrix argument, return a vector of the bounded sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise bounded sum.

See also: algebraic_product, algebraic_sum, bounded_difference, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/cubic_approx_demo.html000066400000000000000000000104311463010412100227510ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: cubic_approx_demo

Function Reference: cubic_approx_demo

Script File: cubic_approx_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a non-linear function using a Sugeno-type FIS with linear output functions.

The demo:

  • reads an FIS structure from a file
  • plots the input membership functions
  • plots the (linear) output functions
  • plots the FIS output as a function of the input

See also: heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/defuzz.html000066400000000000000000000121621463010412100206010ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: defuzz

Function Reference: defuzz

Function File: crisp_x = defuzz (x, y, defuzz_method)
Function File: crisp_x = defuzz ([x1 x2 ... xn], [y1 y2 ... yn], defuzz_method)

For a given domain, set of fuzzy function values, and defuzzification method, return the defuzzified (crisp) value of the fuzzy function.

The arguments x and y must be either two real numbers or two equal-length, non-empty vectors of reals, with the elements of x strictly increasing. defuzz_method must be a (case-sensitive) string corresponding to a defuzzification method. Defuzz handles both built-in and custom defuzzification methods.

The built-in defuzzification methods are:

centroid

Return the x-value of the centroid.

bisector

Return the x-value of the vertical bisector of the area.

mom

Return the mean x-value of the points with maximum y-values.

som

Return the smallest (absolute) x-value of the points with maximum y-values.

lom

Return the largest (absolute) x-value of the points with maximum y-values.

wtaver

Return the weighted average of the x-values, with the y-values used as weights.

wtsum

Return the weighted sum of the x-values, with the y-values used as weights.

fuzzy-logic-toolkit-0.6.0/docs/drastic_product.html000066400000000000000000000115151463010412100224640ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: drastic_product

Function Reference: drastic_product

Function File: retval = drastic_product (x)
Function File: retval = drastic_product (x, y)

Return the drastic product of the input. The drastic product of two real scalars x and y is:

<
table> 
 
 min (x, y)     if max (x, y) == 1
 0              otherwise
 
 

For one vector argument, apply the drastic product to all of the elements of the vector. (The drastic product is associative.) For one two-dimensional matrix argument, return a vector of the drastic product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise drastic product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/drastic_sum.html000066400000000000000000000114551463010412100216130ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: drastic_sum

Function Reference: drastic_sum

Function File: retval = drastic_sum (x)
Function File: retval = drastic_sum (x, y)

Return the drastic sum of the input. The drastic sum of two real scalars x and y is:

<
table> 
 
 max (x, y)     if min (x, y) == 0
 1              otherwise
 
 

For one vector argument, apply the drastic sum to all of the elements of the vector. (The drastic sum is associative.) For one two-dimensional matrix argument, return a vector of the drastic sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise drastic sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, einstein_product, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/dsigmf.html000066400000000000000000000156761463010412100205600ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: dsigmf

Function Reference: dsigmf

Function File: y = dsigmf (x, params)
Function File: y = dsigmf ([x1 x2 ... xn], [a1 c1 a2 c2])

For a given domain x and parameters params (or [a1 c1 a2 c2]), return the corresponding y values for the difference between two sigmoidal membership functions.

The argument x must be a real number or a non-empty list of strictly increasing real numbers, and a1, c1, a2, and c2 must be real numbers. This membership function satisfies the equation:

 
 f(x) = 1/(1 + exp(-a1*(x - c1))) - 1/(1 + exp(-a2*(x - c2)))
 

and in addition, is bounded above and below by 1 and 0 (regardless of the value given by the formula above).

If the parameters a1 and a2 are positive and c1 and c2 are far enough apart with c1 < c2, then:

  • (a1)/4 ~ the rising slope at c1
  • c1 ~ the left inflection point
  • (-a2)/4 ~ the falling slope at c2
  • c2 ~ the right inflection point

and at each inflection point, the value of the function is about 0.5:

  • f(c1) ~ f(c2) ~ 0.5.

Here, the symbol ~ means "approximately equal".

To run the demonstration code, type "demo dsigmf" (without the quotation marks) at the Octave prompt.

See also: gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:100;
 params = [0.5 20 0.3 60];
 y1 = dsigmf(x, params);
 params = [0.3 20 0.2 60];
 y2 = dsigmf(x, params);
 params = [0.2 20 0.1 60];
 y3 = dsigmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'dsigmf demo');
 plot(x, y1, 'r;params = [0.5 20 0.3 60];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [0.3 20 0.2 60];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [0.2 20 0.1 60];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.0/docs/einstein_product.html000066400000000000000000000112631463010412100226510ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: einstein_product

Function Reference: einstein_product

Function File: retval = einstein_product (x)
Function File: retval = einstein_product (x, y)

Return the Einstein product of the input. The Einstein product of two real scalars x and y is: (x * y) / (2 - (x + y - x * y))

For one vector argument, apply the Einstein product to all of the elements of the vector. (The Einstein product is associative.) For one two-dimensional matrix argument, return a vector of the Einstein product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise Einstein product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_sum, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/einstein_sum.html000066400000000000000000000112101463010412100217650ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: einstein_sum

Function Reference: einstein_sum

Function File: retval = einstein_sum (x)
Function File: retval = einstein_sum (x, y)

Return the Einstein sum of the input. The Einstein sum of two real scalars x and y is: (x + y) / (1 + x * y)

For one vector argument, apply the Einstein sum to all of the elements of the vector. (The Einstein sum is associative.) For one two-dimensional matrix argument, return a vector of the Einstein sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise Einstein sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, hamacher_product, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/evalfis.html000066400000000000000000000317151463010412100207300ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: evalfis

Function Reference: evalfis

Function File: output = evalfis (user_input, fis)
Function File: output = evalfis (user_input, fis, num_points)
Function File: [output, rule_input, rule_output, fuzzy_output] = evalfis (user_input, fis)
Function File: [output, rule_input, rule_output, fuzzy_output] = evalfis (user_input, fis, num_points)

Return the crisp output(s) of an FIS for each row in a matrix of crisp input values. Also, for the last row of user_input, return the intermediate results:

rule_input

a matrix of the degree to which each FIS rule matches each FIS input variable

rule_output

a matrix of the fuzzy output for each (rule, FIS output) pair

fuzzy_output

a matrix of the aggregated output for each FIS output variable

The optional argument num_points specifies the number of points over which to evaluate the fuzzy values. The default value of num_points is 101.

Argument user_input:

user_input is a matrix of crisp input values. Each row represents one set of crisp FIS input values. For an FIS that has N inputs, an input matrix of z sets of input values will have the form:

 
 
 [input_11 input_12 ... input_1N]  <-- 1st row is 1st set of inputs
 [input_21 input_22 ... input_2N]  <-- 2nd row is 2nd set of inputs
 [             ...              ]                 ...
 [input_z1 input_z2 ... input_zN]  <-- zth row is zth set of inputs
 
 

Return value output:

output is a matrix of crisp output values. Each row represents the set of crisp FIS output values for the corresponding row of user_input. For an FIS that has M outputs, an output matrix corresponding to the preceding input matrix will have the form:

 
 
 [output_11 output_12 ... output_1M]  <-- 1st row is 1st set of outputs
 [output_21 output_22 ... output_2M]  <-- 2nd row is 2nd set of outputs
 [               ...               ]                 ...
 [output_z1 output_z2 ... output_zM]  <-- zth row is zth set of outputs
 
 

The intermediate result rule_input:

The matching degree for each (rule, input value) pair is specified by the rule_input matrix. For an FIS that has Q rules and N input variables, the matrix will have the form:

 
 
          in_1  in_2 ...  in_N
 rule_1 [mu_11 mu_12 ... mu_1N]
 rule_2 [mu_21 mu_22 ... mu_2N]
        [            ...      ]
 rule_Q [mu_Q1 mu_Q2 ... mu_QN]
 
 

Evaluation of hedges and "not":

Each element of each FIS rule antecedent and consequent indicates the corresponding membership function, hedge, and whether or not "not" should be applied to the result. The index of the membership function to be used is given by the positive whole number portion of the antecedent/consequent vector entry, the hedge is given by the fractional portion (if any), and "not" is indicated by a minus sign. A "0" as the integer portion in any position in the rule indicates that the corresponding FIS input or output variable is omitted from the rule.

For custom hedges and the four built-in hedges "somewhat," "very," "extremely," and "very very," the membership function value (without the hedge or "not") is raised to the power corresponding to the hedge. All hedges are rounded to 2 digits.

For example, if "mu(x)" denotes the matching degree of the input to the corresponding membership function without a hedge or "not," then the final matching degree recorded in rule_input will be computed by applying the hedge and "not" in two steps. First, the hedge is applied:

 
 
 (fraction == .05) <=>  somewhat x       <=>  mu(x)^0.5  <=>  sqrt(mu(x))
 (fraction == .20) <=>  very x           <=>  mu(x)^2    <=>  sqr(mu(x))
 (fraction == .30) <=>  extremely x      <=>  mu(x)^3    <=>  cube(mu(x))
 (fraction == .40) <=>  very very x      <=>  mu(x)^4
 (fraction == .dd) <=>  <custom hedge> x <=>  mu(x)^(dd/10)
 
 

After applying the appropriate hedge, "not" is calculated by:

 
 minus sign present           <=> not x         <=> 1 - mu(x)
 minus sign and hedge present <=> not <hedge> x <=> 1 - mu(x)^(dd/10)
 

Hedges and "not" in the consequent are handled similarly.

The intermediate result rule_output:

For either a Mamdani-type FIS (that is, an FIS that does not have constant or linear output membership functions) or a Sugeno-type FIS (that is, an FIS that has only constant and linear output membership functions), rule_output specifies the fuzzy output for each (rule, FIS output) pair. The format of rule_output depends on the FIS type.

For a Mamdani-type FIS, rule_output is a num_points x (Q * M) matrix, where Q is the number of rules and M is the number of FIS output variables. Each column of this matrix gives the y-values of the fuzzy output for a single (rule, FIS output) pair.

 
 
                  Q cols            Q cols              Q cols 
             ---------------   ---------------     ---------------
             out_1 ... out_1   out_2 ... out_2 ... out_M ... out_M
          1 [                                                     ]
          2 [                                                     ]
        ... [                                                     ]
 num_points [                                                     ]
 
 

For a Sugeno-type FIS, rule_output is a 2 x (Q * M) matrix. Each column of this matrix gives the (location, height) pair of the singleton output for a single (rule, FIS output) pair.

 
 
                Q cols            Q cols                  Q cols 
           ---------------   ---------------         ---------------
           out_1 ... out_1   out_2 ... out_2   ...   out_M ... out_M
 location [                                                         ]
   height [                                                         ]
 
 

The intermediate result fuzzy_output:

The format of fuzzy_output depends on the FIS type (’mamdani’ or ’sugeno’).

For either a Mamdani-type FIS or a Sugeno-type FIS, fuzzy_output specifies the aggregated fuzzy output for each FIS output.

For a Mamdani-type FIS, the aggregated fuzzy_output is a num_points x M matrix. Each column of this matrix gives the y-values of the fuzzy output for a single FIS output, aggregated over all rules.

 
 
             out_1  out_2  ...  out_M
          1 [                        ]
          2 [                        ]
        ... [                        ]
 num_points [                        ]
 
 

For a Sugeno-type FIS, the aggregated output for each FIS output is a 2 x L matrix, where L is the number of distinct singleton locations in the rule_output for that FIS output:

 
 
           singleton_1  singleton_2 ... singleton_L
 location [                                        ]
   height [                                        ]
 
 

Then fuzzy_output is a vector of M structures, each of which has an index and one of these matrices.

Examples:

Five examples of using evalfis are shown in:

  • heart_disease_demo_2.m
  • investment_portfolio_demo.m
  • linear_tip_demo.m
  • mamdani_tip_demo.m
  • sugeno_tip_demo.m

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/evalmf.html000066400000000000000000000162171463010412100205510ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: evalmf

Function Reference: evalmf

Function File: y = evalmf (x, param, mf_type)
Function File: y = evalmf (x, param, mf_type, hedge)
Function File: y = evalmf (x, param, mf_type, hedge, not_flag)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type, hedge)
Function File: y = evalmf ([x1 x2 ... xn], [param1 ... ], mf_type, hedge, not_flag)

For a given domain, set of parameters, membership function type, and optional hedge and not_flag, return the corresponding y-values for the membership function.

The argument x must be a real number or a non-empty list of strictly increasing real numbers, param must be a valid parameter or a vector of valid parameters for mf_type, and mf_type must be a string corresponding to a membership function type. Evalmf handles both built-in and custom membership functions.

For custom hedges and the four built-in hedges "somewhat", "very", "extremely", and "very very", raise the membership function values to the power corresponding to the hedge.

 
 
 (fraction == .05) <=>  somewhat x       <=>  mu(x)^0.5  <=>  sqrt(mu(x))
 (fraction == .20) <=>  very x           <=>  mu(x)^2    <=>  sqr(mu(x))
 (fraction == .30) <=>  extremely x      <=>  mu(x)^3    <=>  cube(mu(x))
 (fraction == .40) <=>  very very x      <=>  mu(x)^4
 (fraction == .dd) <=>  <custom hedge> x <=>  mu(x)^(dd/10)
 
 

The not_flag negates the membership function using:

 
 mu(not(x)) = 1 - mu(x)
 

To run the demonstration code, type "demo evalmf" (without the quotation marks) at the Octave prompt.

Example: 1

 

 x = 0:100;
 params = [25 50 75];
 mf_type = 'trimf';
 y = evalmf(x, params, mf_type);
 figure('NumberTitle', 'off', 'Name', "evalmf(0:100, [25 50 75], 'trimf')");
 plot(x, y, 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.0/docs/fcm.html000066400000000000000000000434771463010412100200540ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: fcm

Function Reference: fcm

Function File: cluster_centers = fcm (input_data, num_clusters)
Function File: cluster_centers = fcm (input_data, num_clusters, options)
Function File: cluster_centers = fcm (input_data, num_clusters, [m, max_iterations, epsilon, display_intermediate_results])
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters, options)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = fcm (input_data, num_clusters, [m, max_iterations, epsilon, display_intermediate_results])

Using the Fuzzy C-Means algorithm, calculate and return the soft partition of a set of unlabeled data points.

Also, if display_intermediate_results is true, display intermediate results after each iteration. Note that because the initial cluster prototypes are randomly selected locations in the ranges determined by the input data, the results of this function are nondeterministic.

The required arguments to fcm are:

  • input_data - a matrix of input data points; each row corresponds to one point
  • num_clusters - the number of clusters to form

The optional arguments to fcm are:

  • m - the parameter (exponent) in the objective function; default = 2.0
  • max_iterations - the maximum number of iterations before stopping; default = 100
  • epsilon - the stopping criteria; default = 1e-5
  • display_intermediate_results - if 1, display results after each iteration, and if 0, do not; default = 1

The default values are used if any of the optional arguments are missing or evaluate to NaN.

The return values are:

  • cluster_centers - a matrix of the cluster centers; each row corresponds to one point
  • soft_partition - a constrained soft partition matrix
  • obj_fcn_history - the values of the objective function after each iteration

Three important matrices used in the calculation are X (the input points to be clustered), V (the cluster centers), and Mu (the membership of each data point in each cluster). Each row of X and V denotes a single point, and Mu(i, j) denotes the membership degree of input point X(j, :) in the cluster having center V(i, :).

X is identical to the required argument input_data; V is identical to the output cluster_centers; and Mu is identical to the output soft_partition.

If n denotes the number of input points and k denotes the number of clusters to be formed, then X, V, and Mu have the dimensions:

 
 
                               1    2   ...  #features
                          1 [                           ]
    X  =  input_data  =   2 [                           ]
                        ... [                           ]
                          n [                           ]
 
 
 
 
                                    1    2   ...  #features
                               1 [                           ]
    V  =  cluster_centers  =   2 [                           ]
                             ... [                           ]
                               k [                           ]
 
 
 
 
                                    1    2   ...   n
                               1 [                    ]
    Mu  =  soft_partition  =   2 [                    ]
                             ... [                    ]
                               k [                    ]
 
 

See also: gustafson_kessel, partition_coeff, partition_entropy, xie_beni_index

Example: 1

 

 ## This demo:
 ##    - classifies a small set of unlabeled data points using
 ##      the Fuzzy C-Means algorithm into two fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data is taken from Chapter 13, Example 17 in
 ##       Fuzzy Logic: Intelligence, Control and Information, by
 ##       J. Yen and R. Langari, Prentice Hall, 1999, page 381
 ##       (International Edition). 

 ## Use fcm to classify the input_data.
 input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4];
 number_of_clusters = 2;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   fcm (input_data, number_of_clusters)
 
 ## Plot the data points as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 1');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor

 ## Plot the cluster centers as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor

 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

Iteration count = 1,  Objective fcn = 89.397281
Iteration count = 2,  Objective fcn = 59.312438
Iteration count = 3,  Objective fcn = 30.115461
Iteration count = 4,  Objective fcn = 28.766914
Iteration count = 5,  Objective fcn = 28.757517
Iteration count = 6,  Objective fcn = 28.757461
Iteration count = 7,  Objective fcn = 28.757460
Iteration count = 8,  Objective fcn = 28.757460
Iteration count = 9,  Objective fcn = 28.757460
cluster_centers =

    4.2023   11.2805
   12.2859    5.3691

soft_partition =

   0.965400   0.939806   0.888773   0.020467   0.033486   0.031290
   0.034600   0.060194   0.111227   0.979533   0.966514   0.968710

obj_fcn_history =

   89.397   59.312   30.115   28.767   28.758   28.757   28.757   28.757   28.757

hold is now off for current axes
Partition Coefficient: 0.909483
Partition Entropy (with a = 2): 0.267539
Xie-Beni Index: 0.095582

                    
plotted figure

Example: 2

 

 ## This demo:
 ##    - classifies three-dimensional unlabeled data points using
 ##      the Fuzzy C-Means algorithm into three fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data was selected to form three areas of
 ##       different shapes.
 
 ## Use fcm to classify the input_data.
 input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7;
               3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11;
               3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9;
               6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12;
               11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15;
               14 6 14; 14 8 13];
 number_of_clusters = 3;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   fcm (input_data, number_of_clusters, [NaN NaN NaN 0])
 
 ## Plot the data points in two dimensions (using features 1 & 2)
 ## as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 2) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Plot the data points in two dimensions
 ## (using features 1 & 3) as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 3) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 3), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 3');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

cluster_centers =

   11.0424    9.5332   13.3569
    2.0937   11.9016    6.0942
    3.1989    3.6232    9.5521

soft_partition =

 Columns 1 through 6:

   1.7523e-02   7.3841e-03   1.8740e-02   1.2705e-02   1.9250e-04   1.4638e-02
   9.4461e-01   9.7904e-01   9.5109e-01   9.6197e-01   9.9948e-01   9.6487e-01
   3.7871e-02   1.3572e-02   3.0172e-02   2.5327e-02   3.2448e-04   2.0488e-02

 Columns 7 through 12:

   1.3086e-02   1.3915e-02   2.3066e-02   5.5911e-02   3.1032e-02   3.9162e-02
   9.6332e-01   9.6457e-01   9.4834e-01   7.6424e-02   5.6743e-02   4.6202e-02
   2.3598e-02   2.1516e-02   2.8592e-02   8.6766e-01   9.1223e-01   9.1464e-01

 Columns 13 through 18:

   4.1879e-02   5.2361e-03   4.0373e-02   1.0700e-02   7.3581e-02   7.2479e-02
   5.1153e-02   6.5170e-03   5.0542e-02   1.4244e-02   1.5867e-01   1.0410e-01
   9.0697e-01   9.8825e-01   9.0909e-01   9.7506e-01   7.6774e-01   8.2343e-01

 Columns 19 through 24:

   1.5029e-01   1.8715e-01   8.6967e-01   8.3432e-01   7.8958e-01   9.7102e-01
   2.2741e-01   1.4085e-01   6.2864e-02   9.0815e-02   1.1768e-01   1.2265e-02
   6.2230e-01   6.7200e-01   6.7469e-02   7.4870e-02   9.2741e-02   1.6712e-02

 Columns 25 through 30:

   7.9477e-01   9.9052e-01   9.1541e-01   7.9248e-01   8.8149e-01   9.5269e-01
   1.2048e-01   4.3134e-03   4.4784e-02   7.1964e-02   4.3901e-02   1.9996e-02
   8.4745e-02   5.1715e-03   3.9804e-02   1.3556e-01   7.4614e-02   2.7318e-02

 Columns 31 and 32:

   8.0460e-01   8.8430e-01
   7.2840e-02   4.8500e-02
   1.2256e-01   6.7204e-02

obj_fcn_history =

 Columns 1 through 9:

   478.00   367.56   314.02   241.80   186.69   181.30   180.71   180.62   180.61

 Columns 10 through 18:

   180.61   180.61   180.61   180.61   180.61   180.61   180.61   180.61   180.61

hold is now off for current axes
hold is now off for current axes
Partition Coefficient: 0.813224
Partition Entropy (with a = 2): 0.541401
Xie-Beni Index: 0.207218

                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.0/docs/gauss2mf.html000066400000000000000000000164361463010412100210310ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gauss2mf

Function Reference: gauss2mf

Function File: y = gauss2mf (x, params)
Function File: y = gauss2mf ([x1 x2 ... xn], [sig1 c1 sig2 c2])

For a given domain x and parameters params (or [sig1 c1 sig2 c2]), return the corresponding y values for the two-sided Gaussian composite membership function. This membership function is a smooth curve calculated from two Gaussian membership functions as follows:

Given parameters sig1, c1, sig2, and c2, that define two Gaussian membership functions, let:

 
 
 f1(x) = exp((-(x - c1)^2)/(2 * sig1^2))     if x <= c1
         1                                   otherwise

 f2(x) = 1                                   if x <= c2
         exp((-(x - c2)^2)/(2 * sig2^2))     otherwise
 
 

Then gauss2mf is given by:

 
 f(x) = f1(x) * f2(x)
 

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and sig1, c1, sig2, and c2 must be real numbers. Gauss2mf always returns a continuously differentiable curve with values in the range [0, 1].

If c1 < c2, gauss2mf is a normal membership function (has a maximum value of 1), with the rising curve identical to that of f1(x) and a falling curve identical to that of f2(x), above. If c1 >= c2, gauss2mf returns a subnormal membership function (has a maximum value less than 1).

To run the demonstration code, type "demo gauss2mf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = -10:0.2:10;
 params = [3 0 1.5 2];
 y1 = gauss2mf(x, params);
 params = [1.5 0 3 2];
 y2 = gauss2mf(x, params);
 params = [1.5 2 3 0];
 y3 = gauss2mf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gauss2mf demo');
 plot(x, y1, 'r;params = [3 0 1.5 2];', 'LineWidth', 2);
 hold on ;
 plot(x, y2, 'b;params = [1.5 0 3 2];', 'LineWidth', 2);
 hold on ;
 plot(x, y3, 'g;params = [1.5 2 3 0];', 'LineWidth', 2);
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;
 hold;

hold is now off for current axes
                    
plotted figure

fuzzy-logic-toolkit-0.6.0/docs/gaussmf.html000066400000000000000000000155361463010412100207470ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gaussmf

Function Reference: gaussmf

Function File: y = gaussmf (x, params)
Function File: y = gaussmf ([x1 x2 ... xn], [sig c])

For a given domain x and parameters params (or [sig c]), return the corresponding y values for the Gaussian membership function. This membership function is shaped like the Gaussian (normal) distribution, but scaled to have a maximum value of 1. By contrast, the area under the Gaussian distribution curve is 1.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and sig and c must be real numbers. This membership function satisfies the equation:

 
 f(x) = exp((-(x - c)^2)/(2 * sig^2))
 

which always returns values in the range [0, 1].

Just as for the Gaussian (normal) distribution, the parameters sig and c represent:

  • sig^2 == the variance (a measure of the width of the curve)
  • c == the center (the mean; the x value of the peak)

For larger values of sig, the curve is flatter, and for smaller values of sig, the curve is narrower. The y value at the center is always 1:

  • f(c) == 1

To run the demonstration code, type "demo gaussmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = -5:0.1:5;
 params = [0.5 0];
 y1 = gaussmf(x, params);
 params = [1 0];
 y2 = gaussmf(x, params);
 params = [2 0];
 y3 = gaussmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gaussmf demo');
 plot(x, y1, 'r;params = [0.5 0];', 'LineWidth', 2);
 hold on ;
 plot(x, y2, 'b;params = [1 0];', 'LineWidth', 2);
 hold on ;
 plot(x, y3, 'g;params = [2 0];', 'LineWidth', 2);
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value');
 ylabel('Degree of Membership');
 grid;
 hold;

hold is now off for current axes
                    
plotted figure

fuzzy-logic-toolkit-0.6.0/docs/gbellmf.html000066400000000000000000000162611463010412100207060ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gbellmf

Function Reference: gbellmf

Function File: y = gbellmf (x, params)
Function File: y = gbellmf ([x1 x2 ... xn], [a b c])

For a given domain x and parameters params (or [a b c]), return the corresponding y values for the generalized bell-shaped membership function.

The argument x must be a real number or a non-empty vector of strictly increasing real numbers, a, b, and c must be real numbers, a must be non-zero, and b must be an integer. This membership function satisfies the equation:

 
 f(x) = 1/(1 + (abs((x - c)/a))^(2 * b))
 

which always returns values in the range [0, 1].

The parameters a, b, and c give:

 
 
 a == controls the width of the curve at f(x) = 0.5;
      f(c-a) = f(c+a) = 0.5
 b == controls the slope of the curve at x = c-a and x = c+a;
      f'(c-a) = b/2a and f'(c+a) = -b/2a
 c == the center of the curve
 
 

This membership function has a value of 0.5 at the two points c - a and c + a, and the width of the curve at f(x) == 0.5 is 2 * |a|:

 
 
 f(c - a) == f(c + a) == 0.5
 2 * |a| == the width of the curve at f(x) == 0.5
 
 

The generalized bell-shaped membership function is continuously differentiable and is symmetric about the line x = c.

To run the demonstration code, type "demo gbellmf" (without the quotation marks) at the Octave prompt.

See also: dsigmf, gauss2mf, gaussmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf

Example: 1

 

 x = 0:255;
 params = [20 4 100];
 y1 = gbellmf(x, params);
 params = [30 3 100];
 y2 = gbellmf(x, params);
 params = [40 2 100];
 y3 = gbellmf(x, params);
 figure('NumberTitle', 'off', 'Name', 'gbellmf demo');
 plot(x, y1, 'r;params = [20 4 100];', 'LineWidth', 2)
 hold on;
 plot(x, y2, 'b;params = [30 3 100];', 'LineWidth', 2)
 hold on;
 plot(x, y3, 'g;params = [40 2 100];', 'LineWidth', 2)
 ylim([-0.1 1.1]);
 xlabel('Crisp Input Value', 'FontWeight', 'bold');
 ylabel('Degree of Membership', 'FontWeight', 'bold');
 grid;

                    
plotted figure

fuzzy-logic-toolkit-0.6.0/docs/gensurf.html000066400000000000000000000136711463010412100207510ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gensurf

Function Reference: gensurf

Function File: gensurf (fis)
Function File: gensurf (fis, input_axes)
Function File: gensurf (fis, input_axes, output_axes)
Function File: gensurf (fis, input_axes, output_axes, grids)
Function File: gensurf (fis, input_axes, output_axes, grids, ref_input)
Function File: gensurf (fis, input_axes, output_axes, grids, ref_input, num_points)
Function File: [x, y, z] = gensurf (...)

Generate and plot a surface (or 2-dimensional curve) showing one FIS output as a function of two (or one) of the FIS inputs. The reference input is used for all FIS inputs that are not in the input_axes vector.

Grids, which specifies the number of grids to show on the input axes, may be a scalar or a vector of length 2. If a scalar, then both axes will use the same number of grids. If a vector of length 2, then the grids on the two axes are controlled separately.

Num_points specifies the number of points to use when evaluating the FIS.

The final form "[x, y, z] = gensurf(...)" suppresses plotting.

Default values for arguments not supplied are:

  • input_axes == [1 2]
  • output_axis == 1
  • grids == [15 15]
  • ref_input == []
  • num_points == 101

Six demo scripts that use gensurf are:

  • cubic_approx_demo.m
  • heart_disease_demo_1.m
  • heart_disease_demo_2.m
  • investment_portfolio_demo.m
  • linear_tip_demo.m
  • mamdani_tip_demo.m
  • sugeno_tip_demo.m

Current limitation: The form of gensurf that suppresses plotting (the final form above) is not yet implemented.

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo, plotmf

fuzzy-logic-toolkit-0.6.0/docs/getfis.html000066400000000000000000000165311463010412100205570ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: getfis

Function Reference: getfis

Function File: retval = getfis (fis)
Function File: retval = getfis (fis, property)
Function File: retval = getfis (fis, in_or_out, var_index)
Function File: retval = getfis (fis, in_or_out, var_index, var_property)
Function File: retval = getfis (fis, in_or_out, var_index, mf, mf_index)
Function File: retval = getfis (fis, in_or_out, var_index, mf, mf_index, mf_property)

Return or print the property (field) values of an FIS structure specified by the arguments. There are six forms of getfis:

# Arguments

Action Taken

1

Print (some) properties of an FIS structure on standard output. Return the empty set.

2

Return a specified property of the FIS structure. The properties that may be specified are: name, type, version, numinputs, numoutputs, numinputmfs, numoutputmfs, numrules, andmethod, ormethod, impmethod, addmethod, defuzzmethod, inlabels, outlabels, inrange, outrange, inmfs, outmfs, inmflabels, outmflabels, inmftypes, outmftypes, inmfparams, outmfparams, and rulelist.

3

Print the properties of a specified input or output variable of the FIS structure. Return the empty set.

4

Return a specified property of an input or output variable. The properties that may be specified are: name, range, nummfs, and mflabels.

5

Print the properties of a specified membership function of the FIS structure. Return the empty set.

6

Return a specified property of a membership function. The properties that may be specified are: name, type, and params.

The types of the arguments are expected to be:

fis

an FIS structure

property

a string; one of: ’name’, ’type’, ’version’, ’numinputs’, ’numoutputs’, ’numinputmfs’, ’numoutputmfs’, ’numrules’, ’andmethod’, ’ormethod’, ’impmethod’, ’addmethod’, ’defuzzmethod’ ’inlabels’, ’outlabels’, ’inrange’, ’outrange’, ’inmfs’, ’outmfs’, ’inmflabels’, ’outmflabels’, ’inmftypes’, ’outmftypes’, ’inmfparams’, ’outmfparams’, and ’rulelist’ (case-insensitive)

in_or_out

either ’input’ or ’output’ (case-insensitive)

var_index

a valid integer index of an input or output FIS variable

var_property

a string; one of: ’name’, ’range’, ’nummfs’, and ’mflabels’

mf

the string ’mf’

mf_index

a valid integer index of a membership function

mf_property

a string; one of ’name’, ’type’, or ’params’

Note that all of the strings representing properties above are case insensitive.

See also: setfis, showfis

fuzzy-logic-toolkit-0.6.0/docs/gustafson_kessel.html000066400000000000000000000473421463010412100226610ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: gustafson_kessel

Function Reference: gustafson_kessel

Function File: cluster_centers = gustafson_kessel (input_data, num_clusters)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume, options)
Function File: cluster_centers = gustafson_kessel (input_data, num_clusters, cluster_volume, [m, max_iterations, epsilon, display_intermediate_results])
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume, options)
Function File: [cluster_centers, soft_partition, obj_fcn_history] = gustafson_kessel (input_data, num_clusters, cluster_volume, [m, max_iterations, epsilon, display_intermediate_results])

Using the Gustafson-Kessel algorithm, calculate and return the soft partition of a set of unlabeled data points.

Also, if display_intermediate_results is true, display intermediate results after each iteration. Note that because the initial cluster prototypes are randomly selected locations in the ranges determined by the input data, the results of this function are nondeterministic.

The required arguments to gustafson_kessel are:

  • input_data - a matrix of input data points; each row corresponds to one point
  • num_clusters - the number of clusters to form

The third (optional) argument to gustafson_kessel is a vector of cluster volumes. If omitted, a vector of 1’s will be used as the default.

The fourth (optional) argument to gustafson_kessel is a vector consisting of:

  • m - the parameter (exponent) in the objective function; default = 2.0
  • max_iterations - the maximum number of iterations before stopping; default = 100
  • epsilon - the stopping criteria; default = 1e-5
  • display_intermediate_results - if 1, display results after each iteration, and if 0, do not; default = 1

The default values are used if any of the four elements of the vector are missing or evaluate to NaN.

The return values are:

  • cluster_centers - a matrix of the cluster centers; each row corresponds to one point
  • soft_partition - a constrained soft partition matrix
  • obj_fcn_history - the values of the objective function after each iteration

Three important matrices used in the calculation are X (the input points to be clustered), V (the cluster centers), and Mu (the membership of each data point in each cluster). Each row of X and V denotes a single point, and Mu(i, j) denotes the membership degree of input point X(j, :) in the cluster having center V(i, :).

X is identical to the required argument input_data; V is identical to the output cluster_centers; and Mu is identical to the output soft_partition.

If n denotes the number of input points and k denotes the number of clusters to be formed, then X, V, and Mu have the dimensions:

 
 
                               1    2   ...  #features
                          1 [                           ]
    X  =  input_data  =   2 [                           ]
                        ... [                           ]
                          n [                           ]
 
 
 
 
                                    1    2   ...  #features
                               1 [                           ]
    V  =  cluster_centers  =   2 [                           ]
                             ... [                           ]
                               k [                           ]
 
 
 
 
                                    1    2   ...   n
                               1 [                    ]
    Mu  =  soft_partition  =   2 [                    ]
                             ... [                    ]
                               k [                    ]
 
 

See also: fcm, partition_coeff, partition_entropy, xie_beni_index

Example: 1

 

 ## This demo:
 ##    - classifies a small set of unlabeled data points using
 ##      the Gustafson-Kessel algorithm into two fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data is taken from Chapter 13, Example 17 in
 ##       Fuzzy Logic: Intelligence, Control and Information, by
 ##       J. Yen and R. Langari, Prentice Hall, 1999, page 381
 ##       (International Edition). 
 
 ## Use gustafson_kessel to classify the input_data.
 input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4];
 number_of_clusters = 2;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   gustafson_kessel (input_data, number_of_clusters)
 
 ## Plot the data points as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 1');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

Iteration count = 1,  Objective fcn = 46.455340
Iteration count = 2,  Objective fcn = 35.052233
Iteration count = 3,  Objective fcn = 26.746849
Iteration count = 4,  Objective fcn = 25.769084
Iteration count = 5,  Objective fcn = 25.677565
Iteration count = 6,  Objective fcn = 25.655207
Iteration count = 7,  Objective fcn = 25.648140
Iteration count = 8,  Objective fcn = 25.645814
Iteration count = 9,  Objective fcn = 25.645038
Iteration count = 10,  Objective fcn = 25.644777
Iteration count = 11,  Objective fcn = 25.644689
Iteration count = 12,  Objective fcn = 25.644659
Iteration count = 13,  Objective fcn = 25.644649
Iteration count = 14,  Objective fcn = 25.644646
Iteration count = 15,  Objective fcn = 25.644645
Iteration count = 16,  Objective fcn = 25.644644
Iteration count = 17,  Objective fcn = 25.644644
Iteration count = 18,  Objective fcn = 25.644644
Iteration count = 19,  Objective fcn = 25.644644
Iteration count = 20,  Objective fcn = 25.644644
Iteration count = 21,  Objective fcn = 25.644644
Iteration count = 22,  Objective fcn = 25.644644
cluster_centers =

   12.2661    5.3877
    4.2228   11.3276

soft_partition =

   0.065974   0.109477   0.129494   0.976471   0.971912   0.987408
   0.934026   0.890523   0.870506   0.023529   0.028088   0.012592

obj_fcn_history =

 Columns 1 through 9:

   46.455   35.052   26.747   25.769   25.678   25.655   25.648   25.646   25.645

 Columns 10 through 18:

   25.645   25.645   25.645   25.645   25.645   25.645   25.645   25.645   25.645

 Columns 19 through 22:

   25.645   25.645   25.645   25.645

hold is now off for current axes
Partition Coefficient: 0.888484
Partition Entropy (with a = 2): 0.308027
Xie-Beni Index: 0.107028

                    
plotted figure

Example: 2

 

 ## This demo:
 ##    - classifies three-dimensional unlabeled data points using
 ##      the Gustafson-Kessel algorithm into three fuzzy clusters
 ##    - plots the input points together with the cluster centers
 ##    - evaluates the quality of the resulting clusters using
 ##      three validity measures: the partition coefficient, the
 ##      partition entropy, and the Xie-Beni validity index
 ##
 ## Note: The input_data was selected to form three areas of
 ##       different shapes.
 
 ## Use gustafson_kessel to classify the input_data.
 input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7;
               3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11;
               3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9;
               6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12;
               11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15;
               14 6 14; 14 8 13];
 number_of_clusters = 3;
 [cluster_centers, soft_partition, obj_fcn_history] = ...
   gustafson_kessel (input_data, number_of_clusters, [1 1 1], ...
                     [NaN NaN NaN 0])
 
 ## Plot the data points in two dimensions (using features 1 & 2)
 ## as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 2) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 2), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 2');
 grid
  
 ## Plot the data points in two dimensions
 ## (using features 1 & 3) as small blue x's.
 figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2');
 for i = 1 : rows (input_data)
   plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ...
         'marker', 'x', 'color', 'b');
   hold on;
 endfor
 
 ## Plot the cluster centers in two dimensions
 ## (using features 1 & 3) as larger red *'s.
 for i = 1 : number_of_clusters
   plot (cluster_centers(i, 1), cluster_centers(i, 3), ...
         'LineWidth', 4, 'marker', '*', 'color', 'r');
   hold on;
 endfor
 
 ## Make the figure look a little better:
 ##    - scale and label the axes
 ##    - show gridlines
 xlim ([0 15]);
 ylim ([0 15]);
 xlabel ('Feature 1');
 ylabel ('Feature 3');
 grid
 hold
 
 ## Calculate and print the three validity measures.
 printf ("Partition Coefficient: %f\n", ...
         partition_coeff (soft_partition));
 printf ("Partition Entropy (with a = 2): %f\n", ...
         partition_entropy (soft_partition, 2));
 printf ("Xie-Beni Index: %f\n\n", ...
         xie_beni_index (input_data, cluster_centers, ...
         soft_partition));

cluster_centers =

    3.2679    3.7416    9.5189
    2.0744   11.9210    6.0810
   11.1675    9.5123   13.4360

soft_partition =

 Columns 1 through 6:

   1.9129e-02   9.7022e-03   1.0643e-02   2.4975e-02   8.9273e-05   1.9737e-02
   9.6971e-01   9.8313e-01   9.8010e-01   9.6123e-01   9.9985e-01   9.6174e-01
   1.1157e-02   7.1681e-03   9.2569e-03   1.3793e-02   6.1636e-05   1.8522e-02

 Columns 7 through 12:

   2.1778e-02   4.1337e-02   2.3680e-02   9.6778e-01   9.1988e-01   9.5714e-01
   9.6753e-01   9.3340e-01   9.5532e-01   2.2954e-02   6.1140e-02   2.9744e-02
   1.0694e-02   2.5264e-02   2.0998e-02   9.2635e-03   1.8979e-02   1.3117e-02

 Columns 13 through 18:

   9.2049e-01   9.9099e-01   8.8919e-01   9.8157e-01   8.2057e-01   8.7617e-01
   5.6772e-02   6.5221e-03   7.9763e-02   1.3944e-02   1.4998e-01   9.6877e-02
   2.2734e-02   2.4882e-03   3.1044e-02   4.4868e-03   2.9448e-02   2.6948e-02

 Columns 19 through 24:

   8.2343e-01   8.1787e-01   1.3809e-01   4.4812e-02   5.9662e-02   4.7384e-02
   1.4313e-01   1.2767e-01   1.3231e-01   5.3109e-02   7.6959e-02   5.2618e-02
   3.3445e-02   5.4462e-02   7.2960e-01   9.0208e-01   8.6338e-01   9.0000e-01

 Columns 25 through 30:

   1.0958e-01   8.6143e-03   5.4236e-02   8.1535e-02   4.1312e-02   3.1916e-02
   1.0865e-01   1.0973e-02   5.8411e-02   1.0065e-01   6.3519e-02   4.6918e-02
   7.8177e-01   9.8041e-01   8.8735e-01   8.1781e-01   8.9517e-01   9.2117e-01

 Columns 31 and 32:

   2.5981e-02   5.2999e-02
   4.2584e-02   7.2535e-02
   9.3144e-01   8.7447e-01

obj_fcn_history =

 Columns 1 through 9:

   245.70   211.02   182.51   166.13   159.33   153.85   147.65   140.88   135.03

 Columns 10 through 18:

   130.65   126.93   123.81   121.78   120.76   120.32   120.14   120.07   120.05

 Columns 19 through 27:

   120.04   120.03   120.03   120.03   120.03   120.03   120.03   120.03   120.03

 Columns 28 through 33:

   120.03   120.03   120.03   120.03   120.03   120.03

hold is now off for current axes
Partition Coefficient: 0.841843
Partition Entropy (with a = 2): 0.472419
Xie-Beni Index: 0.192632

                    
plotted figure

plotted figure

fuzzy-logic-toolkit-0.6.0/docs/hamacher_product.html000066400000000000000000000112551463010412100226040ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: hamacher_product

Function Reference: hamacher_product

Function File: retval = hamacher_product (x)
Function File: retval = hamacher_product (x, y)

Return the Hamacher product of the input. The Hamacher product of two real scalars x and y is: (x * y) / (x + y - x * y)

For one vector argument, apply the Hamacher product to all of the elements of the vector. (The Hamacher product is associative.) For one two-dimensional matrix argument, return a vector of the Hamacher product of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise Hamacher product.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_sum

fuzzy-logic-toolkit-0.6.0/docs/hamacher_sum.html000066400000000000000000000112251463010412100217250ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: hamacher_sum

Function Reference: hamacher_sum

Function File: retval = hamacher_sum (x)
Function File: retval = hamacher_sum (x, y)

Return the Hamacher sum of the input. The Hamacher sum of two real scalars x and y is: (x + y - 2 * x * y) / (1 - x * y)

For one vector argument, apply the Hamacher sum to all of the elements of the vector. (The Hamacher sum is associative.) For one two-dimensional matrix argument, return a vector of the Hamacher sum of each column.

For two vectors or matrices of identical dimensions, or for one scalar and one vector or matrix argument, return the pair-wise Hamacher sum.

See also: algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product

fuzzy-logic-toolkit-0.6.0/docs/heart_disease_demo_1.html000066400000000000000000000106441463010412100233210ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: heart_disease_demo_1

Function Reference: heart_disease_demo_1

Script File: heart_disease_demo_1

Demonstrate the use of newfis, addvar, addmf, and addrule to build and evaluate an FIS. Also demonstrate the use of the algebraic product and sum as the T-norm/S-norm pair, and demonstrate the use of hedges in the FIS rules.

The demo:

  • builds an FIS
  • plots the input membership functions
  • plots the constant output functions
  • displays the FIS rules in verbose format in the Octave window
  • plots the FIS output as a function of the inputs

See also: cubic_approx_demo, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/heart_disease_demo_2.html000066400000000000000000000104701463010412100233170ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: heart_disease_demo_2

Function Reference: heart_disease_demo_2

Script File: heart_disease_demo_2

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS stored in a file.

The demo:

  • reads the FIS structure from a file
  • plots the input membership functions
  • plots the (constant) output functions
  • plots the FIS output as a function of the inputs
  • evaluates the Sugeno-type FIS for four inputs

See also: cubic_approx_demo, heart_disease_demo_1, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/index.html000066400000000000000000000554151463010412100204110ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit
fuzzy-logic-toolkit

fuzzy-logic-toolkit

0.6.0 2024-06-05

A mostly MATLAB-compatible fuzzy logic toolkit for Octave.

Select Category:

Evaluation

defuzz For a given domain, set of fuzzy function values, and defuzzification method, return the defuzzified (crisp) value of the fuzzy function.
evalfis Return the crisp output(s) of an FIS for each row in a matrix of crisp input values.
evalmf For a given domain, set of parameters, membership function type, and optional hedge and not_flag, return the corresponding y-values for the membership function.

Plotting

gensurf Generate and plot a surface (or 2-dimensional curve) showing one FIS output as a function of two (or one) of the FIS inputs.
plotmf Plot the membership functions defined for the specified FIS input or output variable on a single set of axes.

File Input/Output of Fuzzy Inference Systems

readfis Read the information in an FIS file, and using this information, create and return an FIS structure.
writefis Save the specified FIS currently in the Octave workspace to a file named by the user.

Command-Line Creation and Modification of Fuzzy Inference Systems

addmf Add a membership function to an existing FIS structure and return the updated FIS.
addrule Add a list of rules to an existing FIS structure and return the updated FIS.
addvar Add an input or output variable to an existing FIS structure and return the updated FIS.
newfis Create and return a new FIS structure using the argument values provided.
rmmf Remove a membership function from an existing FIS structure and return the updated FIS.
rmvar Remove an input or output variable from an existing FIS structure and return the updated FIS.
setfis Set a property (field) value of an FIS structure and return the updated FIS.

Text Representation of Fuzzy Inference Systems

getfis Return or print the property (field) values of an FIS structure specified by the arguments.
showfis Print all of the property (field) values of the FIS structure and its substructures.
showrule Show the rules for an FIS structure in verbose, symbolic, or indexed format.

Membership Functions

dsigmf For a given domain X and parameters PARAMS (or [A1 C1 A2 C2]), return the corresponding Y values for the difference between two sigmoidal membership functions.
gauss2mf For a given domain X and parameters PARAMS (or [SIG1 C1 SIG2 C2]), return the corresponding Y values for the two-sided Gaussian composite membership function.
gaussmf For a given domain X and parameters PARAMS (or [SIG C]), return the corresponding Y values for the Gaussian membership function.
gbellmf For a given domain X and parameters PARAMS (or [A B C]), return the corresponding Y values for the generalized bell-shaped membership function.
pimf For a given domain X and parameters PARAMS (or [A B C D]), return the corresponding Y values for the pi-shaped membership function.
psigmf For a given domain X and parameters PARAMS (or [A1 C1 A2 C2]), return the corresponding Y values for the product of two sigmoidal membership functions.
sigmf For a given domain X and parameters PARAMS (or [A C]), return the corresponding Y values for the sigmoidal membership function.
smf For a given domain X and parameters PARAMS (or [A B]), return the corresponding Y values for the S-shaped membership function.
trapmf For a given domain X and parameters PARAMS (or [A B C D]), return the corresponding Y values for the trapezoidal membership function.
trimf For a given domain X and parameters PARAMS (or [A B C]), return the corresponding Y values for the triangular membership function.
zmf For a given domain X and parameters PARAMS (or [A B]), return the corresponding Y values for the Z-shaped membership function.

T-Norms and S-Norms (in addition to max/min)

algebraic_product Return the algebraic product of the input.
algebraic_sum Return the algebraic sum of the input.
bounded_difference Return the bounded difference of the input.
bounded_sum Return the bounded sum of the input.
drastic_product Return the drastic product of the input.
drastic_sum Return the drastic sum of the input.
einstein_product Return the Einstein product of the input.
einstein_sum Return the Einstein sum of the input.
hamacher_product Return the Hamacher product of the input.
hamacher_sum Return the Hamacher sum of the input.

Complete Fuzzy Inference System Demos

cubic_approx_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a non-linear function using a Sugeno-type FIS with linear output functions.
heart_disease_demo_1 Demonstrate the use of newfis, addvar, addmf, and addrule to build and evaluate an FIS.
heart_disease_demo_2 Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS stored in a file.
investment_portfolio_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.
linear_tip_demo Demonstrate the use of linear output membership functions to simulate constant membership functions.
mamdani_tip_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.
sugeno_tip_demo Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS with multiple outputs stored in a text file.

Fuzzy Clustering Functions

fcm Using the Fuzzy C-Means algorithm, calculate and return the soft partition of a set of unlabeled data points.
gustafson_kessel Using the Gustafson-Kessel algorithm, calculate and return the soft partition of a set of unlabeled data points.
partition_coeff Return the partition coefficient for a given soft partition.
partition_entropy Return the partition entropy for a given soft partition.
xie_beni_index Return the Xie-Beni validity index for a given soft partition.
fuzzy-logic-toolkit-0.6.0/docs/investment_portfolio_demo.html000066400000000000000000000112611463010412100245660ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: investment_portfolio_demo

Function Reference: investment_portfolio_demo

Script File: investment_portfolio_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file. Also demonstrate the use of hedges and weights in the FIS rules, the use of the Einstein product and sum as the T-norm/S-norm pair, and the non-standard use of the Einstein sum as the aggregation method.

The demo:

  • reads the FIS structure from a file
  • plots the input and output membership functions
  • plots the FIS output as a function of the inputs
  • plots the output of the 4 individual rules for (Age, Risk-Tolerance) = (40, 7)
  • plots the aggregated fuzzy output and the crisp output for (Age, Risk-Tolerance) = (40, 7)
  • shows the rules in verbose format in the Octave window

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/linear_tip_demo.html000066400000000000000000000103661463010412100224300ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: linear_tip_demo

Function Reference: linear_tip_demo

Script File: linear_tip_demo

Demonstrate the use of linear output membership functions to simulate constant membership functions.

The demo:

  • reads the FIS structure from a file
  • plots the input membership functions
  • plots the FIS output as a function of the inputs
  • evaluates the Sugeno-type FIS for six inputs

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, mamdani_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/mamdani_tip_demo.html000066400000000000000000000107601463010412100225620ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: mamdani_tip_demo

Function Reference: mamdani_tip_demo

Script File: mamdani_tip_demo

Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Mamdani-type FIS stored in a file.

The demo:

  • reads the FIS structure from a file
  • plots the input and output membership functions
  • plots each of the two FIS outputs as a function of the inputs
  • plots the output of the 4 individual rules for (Food-Quality, Service) = (4, 6)
  • plots the aggregated fuzzy output and the crisp output for (Food-Quality, Service) = (4, 6)
  • displays the FIS rules in symbolic format in the Octave window

See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, sugeno_tip_demo

fuzzy-logic-toolkit-0.6.0/docs/newfis.html000066400000000000000000000131061463010412100205640ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: newfis

Function Reference: newfis

Function File: a = newfis (fis_name)
Function File: a = newfis (fis_name, fis_type)
Function File: a = newfis (fis_name, fis_type, and_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method, defuzz_method)
Function File: a = newfis (fis_name, fis_type, and_method, or_method, imp_method, agg_method, defuzz_method, fis_version)

Create and return a new FIS structure using the argument values provided. Only the first argument is required. If fewer than eight arguments are given, then some or all of the following default arguments will be used:

<
ul>
  • fis_type = ’mamdani’
  • and_method = ’min’
  • or_method = ’max’
  • imp_method = ’min’
  • agg_method = ’max’
  • defuzz_method = ’centroid’
  • fis_version = 1.0
  • See also: addmf, addrule, addvar, setfis

    fuzzy-logic-toolkit-0.6.0/docs/partition_coeff.html000066400000000000000000000106361463010412100224510ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: partition_coeff

    Function Reference: partition_coeff

    Function File: vpc = partition_coeff (soft_partition)

    Return the partition coefficient for a given soft partition.

    The argument to partition_coeff is:

    • soft_partition - the membership degree of each input data point in each cluster

    The return value is:

    • vpc - the partition coefficient for the given soft partition

    For demos of this function, please type:

     
     demo 'fcm'
     demo 'gustafson_kessel'
     

    For more information about the soft_partition matrix, please see the documentation for function fcm.

    See also: fcm, gustafson_kessel, partition_entropy, xie_beni_index

    fuzzy-logic-toolkit-0.6.0/docs/partition_entropy.html000066400000000000000000000110151463010412100230570ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: partition_entropy

    Function Reference: partition_entropy

    Function File: vpe = partition_entropy (soft_partition, a)

    Return the partition entropy for a given soft partition.

    The arguments to partition_entropy are:

    • soft_partition - the membership degree of each input data point in each cluster
    • a - the log base to use in the calculation; must be a real number a > 1

    The return value is:

    • vpe - the partition entropy for the given soft partition

    For demos of this function, please type:

     
     demo 'fcm'
     demo 'gustafson_kessel'
     

    For more information about the soft_partition matrix, please see the documentation for function fcm.

    See also: fcm, gustafson_kessel, partition_coeff, xie_beni_index

    fuzzy-logic-toolkit-0.6.0/docs/pimf.html000066400000000000000000000153271463010412100202330ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: pimf

    Function Reference: pimf

    Function File: y = pimf (x, params)
    Function File: y = pimf ([x1 x2 ... xn], [a b c d])

    For a given domain x and parameters params (or [a b c d]), return the corresponding y values for the pi-shaped membership function.

    The argument x must be a real number or a non-empty vector of real numbers, and a, b, c, and d must be real numbers, with a < b <= c < d. This membership function satisfies:

     
     
             0                             if x <= a
             2 * ((x - a)/(b - a))^2       if a < x <= (a + b)/2
             1 - 2 * ((x - b)/(b - a))^2   if (a + b)/2 < x < b
     f(x) =  1                             if b <= x <= c
             1 - 2 * ((x - c)/(d - c))^2   if c < x <= (c + d)/2
             2 * ((x - d)/(d - c))^2       if (c + d)/2 < x < d
             0                             if x >= d
     
     

    which always returns values in the range [0, 1].

    To run the demonstration code, type "demo pimf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, psigmf, sigmf, smf, trapmf, trimf, zmf

    Example: 1

     
    
     x = 0:255;
     params = [70 80 100 140];
     y1 = pimf(x, params);
     params = [50 75 105 175];
     y2 = pimf(x, params);
     params = [30 70 110 200];
     y3 = pimf(x, params);
     figure('NumberTitle', 'off', 'Name', 'pimf demo');
     plot(x, y1, 'r;params = [70 80 100 140];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [50 75 105 175];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [30 70 110 200];', 'LineWidth', 2)
     ylim([-0.1 1.1]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/plotmf.html000066400000000000000000000132261463010412100205750ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: plotmf

    Function Reference: plotmf

    Function File: plotmf (fis, in_or_out, var_index)
    Function File: plotmf (fis, in_or_out, var_index, y_lower_limit)
    Function File: plotmf (fis, in_or_out, var_index, y_lower_limit, y_upper_limit)

    Plot the membership functions defined for the specified FIS input or output variable on a single set of axes. Fuzzy output membership functions are represented by the [0, 1]-valued fuzzy functions, and constant output membership functions are represented by unit-valued singleton spikes. Linear output membership functions, however, are represented by two-dimensional lines y = ax + c, regardless of how many dimensions the linear function is defined to have. In effect, all of the other dimensions of the linear function are set to 0.

    If both constant and linear membership functions are used for a single FIS output, then two sets of axes are used: one for the constant membership functions, and another for the linear membership functions. To plot both constant and linear membership functions together, or to plot constant membership functions as horizontal lines instead of unit-valued spikes, represent the constant membership functions using ’linear’ functions, with 0 for all except the last parameter, and with the desired constant value as the last parameter.

    The types of the arguments are expected to be:

    • fis - an FIS structure
    • in_or_out - either ’input’ or ’output’ (case-insensitive)
    • var_index - an FIS input or output variable index
    • y_lower_limit - a real scalar (default value = -0.1)
    • y_upper_limit - a real scalar (default value = 1.1)

    Six examples that use plotmf are:

    • cubic_approx_demo.m
    • heart_disease_demo_1.m
    • heart_disease_demo_2.m
    • investment_portfolio_demo.m
    • linear_tip_demo.m
    • mamdani_tip_demo.m
    • sugeno_tip_demo.m

    See also: gensurf

    fuzzy-logic-toolkit-0.6.0/docs/psigmf.html000066400000000000000000000156021463010412100205610ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: psigmf

    Function Reference: psigmf

    Function File: y = psigmf (x, params)
    Function File: y = psigmf ([x1 x2 ... xn], [a1 c1 a2 c2])

    For a given domain x and parameters params (or [a1 c1 a2 c2]), return the corresponding y values for the product of two sigmoidal membership functions.

    The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a1, c1, a2, and c2 must be real numbers. This membership function satisfies the equation:

     
     f(x) = (1/(1 + exp(-a1*(x - c1)))) * (1/(1 + exp(-a2*(x - c2))))
     

    The function is bounded above by 1 and below by 0.

    If a1 is positive, a2 is negative, and c1 and c2 are far enough apart with c1 < c2, then:

    • (a1)/4 ~ the rising slope at c1
    • c1 ~ the left inflection point
    • (a2)/4 ~ the falling slope at c2
    • c2 ~ the right inflection point

    and at each inflection point, the value of the function is about 0.5:

    • f(c1) ~ f(c2) ~ 0.5.

    (Here, the symbol ~ means "approximately equal".)

    To run the demonstration code, type "demo psigmf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, sigmf, smf, trapmf, trimf, zmf

    Example: 1

     
    
     x = 0:100;
     params = [0.5 20 -0.3 60];
     y1 = psigmf(x, params);
     params = [0.3 20 -0.2 60];
     y2 = psigmf(x, params);
     params = [0.2 20 -0.1 60];
     y3 = psigmf(x, params);
     figure('NumberTitle', 'off', 'Name', 'psigmf demo');
     plot(x, y1, 'r;params = [0.5 20 -0.3 60];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [0.3 20 -0.2 60];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [0.2 20 -0.1 60];', 'LineWidth', 2)
     ylim([-0.1 1.1]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/readfis.html000066400000000000000000000111511463010412100207040ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: readfis

    Function Reference: readfis

    Function File: fis = readfis ()
    Function File: fis = readfis (filename)

    Read the information in an FIS file, and using this information, create and return an FIS structure. If called without any arguments or with an empty string as an argument, present the user with a file dialog GUI. If called with a filename that does not end with ’.fis’, append ’.fis’ to the filename. The filename is expected to be a string.

    Six examples of the input file format:

    • cubic_approximator.fis
    • heart_disease_risk.fis
    • investment_portfolio.fis
    • linear_tip_calculator.fis
    • mamdani_tip_calculator.fis
    • sugeno_tip_calculator.fis

    Six example scripts that use readfis:

    • cubic_approx_demo.m
    • heart_disease_demo_2.m
    • investment_portfolio_demo.m
    • linear_tip_demo.m
    • mamdani_tip_demo.m
    • sugeno_tip_demo.m

    See also: writefis

    fuzzy-logic-toolkit-0.6.0/docs/rmmf.html000066400000000000000000000105251463010412100202340ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: rmmf

    Function Reference: rmmf

    Function File: fis = rmmf (fis, in_or_out, var_index, mf, mf_index)

    Remove a membership function from an existing FIS structure and return the updated FIS.

    The types of the arguments are expected to be:

    • fis - an FIS structure
    • in_or_out - either ’input’ or ’output’ (case-insensitive)
    • var_index - an FIS input or output variable index
    • mf - the string ’mf’
    • mf_index - a string

    Note that rmmf will allow the user to delete membership functions that are currently in use by rules in the FIS.

    See also: addmf, rmvar

    fuzzy-logic-toolkit-0.6.0/docs/rmvar.html000066400000000000000000000103361463010412100204220ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: rmvar

    Function Reference: rmvar

    Function File: fis = rmvar (fis, in_or_out, var_index)

    Remove an input or output variable from an existing FIS structure and return the updated FIS.

    The types of the arguments are expected to be:

    • fis - an FIS structure
    • in_or_out - either ’input’ or ’output’ (case-insensitive)
    • var_index - an FIS input or output variable index

    Note that rmvar will allow the user to delete an input or output variable that is currently in use by rules in the FIS.

    See also: addvar, rmmf

    fuzzy-logic-toolkit-0.6.0/docs/setfis.html000066400000000000000000000146761463010412100206030ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: setfis

    Function Reference: setfis

    Function File: fis = setfis (fis, property, property_value)
    Function File: fis = setfis (fis, in_or_out, var_index, var_property, var_property_value)
    Function File: fis = setfis (fis, in_or_out, var_index, mf, mf_index, mf_property, mf_property_value)

    Set a property (field) value of an FIS structure and return the updated FIS. There are three forms of setfis:

    # Arguments

    Action Taken

    3

    Set a property of the FIS structure. The properties that may be set are: name, type, andmethod, ormethod, impmethod, addmethod, defuzzmethod, and version.

    5

    Set a property of an input or output variable of the FIS structure. The properties that may be set are: name and range.

    7

    Set a property of a membership function. The properties that may be set are: name, type, and params.

    The types of the arguments are expected to be:

    fis

    an FIS structure

    property

    a string; one of ’name’, ’type’, ’andmethod’, ’ormethod’, ’impmethod’, ’addmethod’, ’defuzzmethod’, and ’version’ (case-insensitive)

    property_value

    a number (if property is ’version’); a string (otherwise)

    in_or_out

    either ’input’ or ’output’ (case-insensitive)

    var_index

    a valid integer index of an input or output FIS variable

    var_property

    a string; either ’name’ or ’range’

    var_property_value

    a string (if var_property is ’name’) or a vector range (if var_property is ’range’)

    mf

    the string ’mf’

    mf_index

    a valid integer index of a membership function

    mf_property

    a string; one of ’name’, ’type’, or ’params’

    mf_property_value

    a string (if mf_property is ’name’ or ’type’); an array (if mf_property is ’params’)

    Note that all of the strings representing properties above are case insensitive.

    See also: newfis, getfis, showfis

    fuzzy-logic-toolkit-0.6.0/docs/showfis.html000066400000000000000000000073321463010412100207570ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: showfis

    Function Reference: showfis

    Function File: showfis (fis)

    Print all of the property (field) values of the FIS structure and its substructures.

    See also: getfis, showrule

    fuzzy-logic-toolkit-0.6.0/docs/showrule.html000066400000000000000000000263071463010412100211500ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: showrule

    Function Reference: showrule

    Function File: showrule (fis)
    Function File: showrule (fis, index_list)
    Function File: showrule (fis, index_list, format)
    Function File: showrule (fis, index_list, 'verbose', language)
    Function File: showrule (fis, index_list, 'verbose', 'custom', {"and" "or" "If" "then" "is" "isn't" "somewhat" "very" "extremely" "very very"})

    Show the rules for an FIS structure in verbose, symbolic, or indexed format. Built in languages for the ’verbose’ format are: English, Chinese (or Mandarin, Pinyin), Russian (or Pycckii, Russkij), French (or Francais), Spanish (or Espanol), and German (or Deutsch). The names of the languages are case-insensitive, Chinese is written in Pinyin, and Russian is transliterated.

    To use a custom language, enter ’verbose’ and ’custom’ for the third and fourth parameters, respectively, and a cell array of ten strings (to specify the custom language) corresponding to the English {"and" "or" "If" "then" "is" "isn’t" "somewhat" "very" "extremely" "very very"} for the fifth parameter.

    To run the demonstration code, type "demo showrule" (without the quotation marks) at the Octave prompt.

    See also: addrule, getfis, showfis

    Example: 1

     
    
     fis = readfis ('sugeno_tip_calculator.fis');
     puts ("Output of: showrule(fis)\n");
     showrule (fis)
     puts ("\n");
    
    Output of: showrule(fis)
    1. If (Food-Quality is extremely Bad) and (Service is extremely Bad), then (Cheap-Tip is extremely Low) and (Average-Tip is very Low) and (Generous-Tip is Low) (1)
    2. If (Food-Quality is Good) and (Service is extremely Bad), then (Cheap-Tip is Low) and (Average-Tip is Low) and (Generous-Tip is Medium) (1)
    3. If (Food-Quality is very Good) and (Service is very Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
    4. If (Food-Quality is Bad) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Low) and (Generous-Tip is Medium) (1)
    5. If (Food-Quality is Good) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
    6. If (Food-Quality is extremely Good) and (Service is Bad), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is very High) (1)
    7. If (Food-Quality is Bad) and (Service is Good), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
    8. If (Food-Quality is Good) and (Service is Good), then (Cheap-Tip is Medium) and (Average-Tip is Medium) and (Generous-Tip is very High) (1)
    9. If (Food-Quality is very Bad) and (Service is very Good), then (Cheap-Tip is Low) and (Average-Tip is Medium) and (Generous-Tip is High) (1)
    10. If (Food-Quality is very very Good) and (Service is very very Good), then (Cheap-Tip is High) and (Average-Tip is very High) and (Generous-Tip is extremely High) (1)
    
                        

    Example: 2

     
    
     fis = readfis ('sugeno_tip_calculator.fis');
     puts ("Output of: showrule(fis, [2 4], 'symbolic')\n");
     showrule (fis, [2 4], 'symbolic')
     puts ("\n");
    
    Output of: showrule(fis, [2 4], 'symbolic')
    2.  (Food-Quality == Good) && (Service == Bad^3.0) => (Cheap-Tip == Low) && (Average-Tip == Low) && (Generous-Tip == Medium) (1)
    4.  (Food-Quality == Bad) && (Service == Bad) => (Cheap-Tip == Low) && (Average-Tip == Low) && (Generous-Tip == Medium) (1)
    
                        

    Example: 3

     
    
     fis = readfis ('sugeno_tip_calculator.fis');
     puts ("Output of: showrule(fis, 1:4, 'indexed')\n");
     showrule (fis, 1:4, 'indexed')
     puts ("\n");
    
    Output of: showrule(fis, 1:4, 'indexed')
    1.30 1.30, 1.30 1.20 1 (1) : 1
    2 1.30, 1 1 2 (1) : 1
    2.20 1.20, 1 2 3 (1) : 1
    1 1, 1 1 2 (1) : 1
    
                        

    Example: 4

     
    
     fis = readfis ('sugeno_tip_calculator.fis');
     puts ("Output of: showrule(fis, 1, 'verbose', 'francais')\n");
     showrule (fis, 1, 'verbose', 'francais')
     puts ("\n");
    
    Output of: showrule(fis, 1, 'verbose', 'francais')
    1. Si (Food-Quality est extremement Bad) et (Service est extremement Bad), alors (Cheap-Tip est extremement Low) et (Average-Tip est tres Low) et (Generous-Tip est Low) (1)
    
                        
    fuzzy-logic-toolkit-0.6.0/docs/sigmf.html000066400000000000000000000145721463010412100204060ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: sigmf

    Function Reference: sigmf

    Function File: y = sigmf (x, params)
    Function File: y = sigmf ([x1 x2 ... xn], [a c])

    For a given domain x and parameters params (or [a c]), return the corresponding y values for the sigmoidal membership function.

    The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and c must be real numbers. This membership function satisfies the equation:

    • f(x) = 1/(1 + exp(-a*(x - c)))

    which always returns values in the range [0, 1].

    The parameters a and c specify:

    • a == the slope at c
    • c == the inflection point

    and at the inflection point, the value of the function is 0.5:

    • f(c) == 0.5.

    To run the demonstration code, type "demo sigmf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, smf, trapmf, trimf, zmf

    Example: 1

     
    
     x = 0:100;
     params = [0.3 40];
     y1 = sigmf(x, params);
     params = [0.2 40];
     y2 = sigmf(x, params);
     params = [0.1 40];
     y3 = sigmf(x, params);
     figure('NumberTitle', 'off', 'Name', 'sigmf demo');
     plot(x, y1, 'r;params = [0.3 40];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [0.2 40];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [0.1 40];', 'LineWidth', 2)
     ylim([-0.1 1.2]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/smf.html000066400000000000000000000146611463010412100200650ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: smf

    Function Reference: smf

    Function File: y = smf (x, params)
    Function File: y = smf ([x1 x2 ... xn], [a b])

    For a given domain x and parameters params (or [a b]), return the corresponding y values for the S-shaped membership function.

    The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and b must be real numbers, with a < b. This membership function satisfies:

     
     
             0                                if x <= a
     f(x) =  2 * ((x - a)/(b - a))^2          if a < x <= (a + b)/2
             1 - 2 * ((x - b)/(b - a))^2      if (a + b)/2 < x < b
             1                                if x >= b
     
     

    which always returns values in the range [0, 1].

    To run the demonstration code, type "demo smf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, trapmf, trimf, zmf

    Example: 1

     
    
     x = 0:100;
     params = [40 60];
     y1 = smf(x, params);
     params = [25 75];
     y2 = smf(x, params);
     params = [10 90];
     y3 = smf(x, params);
     figure('NumberTitle', 'off', 'Name', 'smf demo');
     plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2)
     ylim([-0.1 1.2]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/sugeno_tip_demo.html000066400000000000000000000110301463010412100224430ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: sugeno_tip_demo

    Function Reference: sugeno_tip_demo

    Script File: sugeno_tip_demo

    Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a Sugeno-type FIS with multiple outputs stored in a text file. Also demonstrate the use of hedges in the FIS rules and the Einstein product and sum as the T-norm/S-norm pair.

    The demo:

    • reads the FIS structure from a file
    • plots the input membership functions
    • plots the (constant) output functions
    • plots each of the three FIS outputs as a function of the inputs
    • displays the FIS rules in verbose format in the Octave window
    • evaluates the Sugeno-type FIS for six inputs

    See also: cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo

    fuzzy-logic-toolkit-0.6.0/docs/trapmf.html000066400000000000000000000153161463010412100205670ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: trapmf

    Function Reference: trapmf

    Function File: y = trapmf (x, params)
    Function File: y = trapmf ([x1 x2 ... xn], [a b c d])

    For a given domain x and parameters params (or [a b c d]), return the corresponding y values for the trapezoidal membership function. The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and parameters a, b, c, and d must satisfy the inequalities: a < b <= c < d. None of the parameters a, b, c, d are required to be in the domain x. The minimum and maximum values of the trapezoid are assumed to be 0 and 1.

    The parameters [a b c d] correspond to the x values of the corners of the trapezoid:

     
     
            1-|      --------
              |     /        \
              |    /          \
              |   /            \
            0-----------------------
                 a   b      c   d
     
     

    To run the demonstration code, type "demo trapmf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trimf, zmf

    Example: 1

     
    
     x = 0:100;
     params = [-1 0 20 40];
     y1 = trapmf(x, params);
     params = [20 40 60 80];
     y2 = trapmf(x, params);
     params = [60 80 100 101];
     y3 = trapmf(x, params);
     figure('NumberTitle', 'off', 'Name', 'trapmf demo');
     plot(x, y1, 'r;params = [-1 0 20 40];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [20 40 60 80];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [60 80 100 101];', 'LineWidth', 2)
     ylim([-0.1 1.2]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/trimf.html000066400000000000000000000151651463010412100204210ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: trimf

    Function Reference: trimf

    Function File: y = trimf (x, params)
    Function File: y = trimf ([x1 x2 ... xn], [a b c])

    For a given domain x and parameters params (or [a b c]), return the corresponding y values for the triangular membership function.

    The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and parameters a, b, and c must be real numbers that satisfy a < b < c. None of the parameters a, b, and c are required to be in the domain x. The minimum and maximum values of the triangle are assumed to be 0 and 1.

    The parameters [a b c] correspond to the x values of the vertices of the triangle:

     
     
     1-|         /\
       |        /  \
       |       /    \
       |      /      \
     0-----------------------
             a   b   c
     
     

    To run the demonstration code, type "demo trimf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf_demo, zmf

    Example: 1

     
    
     x = 0:100;
     params = [-1 0 50];
     y1 = trimf(x, params);
     params = [0 50 100];
     y2 = trimf(x, params);
     params = [50 100 101];
     y3 = trimf(x, params);
     figure('NumberTitle', 'off', 'Name', 'trimf demo');
     plot(x, y1, 'r;params = [-1 0 50];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [0 50 100];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [50 100 101];', 'LineWidth', 2)
     ylim([-0.1 1.2]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/docs/writefis.html000066400000000000000000000124741463010412100211340ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: writefis

    Function Reference: writefis

    Function File: writefis (fis)
    Function File: writefis (fis, filename)
    Function File: writefis (fis, filename, dialog)

    Save the specified FIS currently in the Octave workspace to a file named by the user. There are three forms of writefis:

    # Arguments

    Action Taken

    1

    Open a dialog GUI to help the user choose a directory and name for the output file.

    2

    Do not open a dialog GUI. Save the FIS to a file in the current directory with the specified filename. If the specified filename does not end in ’.fis’, append ’.fis’ to the filename.

    3

    Open a dialog GUI with the specified filename in the ’filename’ textbox of the GUI. If the specified filename does not end in ’.fis’, append ’.fis’ to the filename.

    The types of the arguments are expected to be:

    fis

    an FIS structure satisfying is_fis (see private/is_fis.m)

    filename

    a string; if the string does not already end with the extension ".fis", then ".fis" is added

    dialog

    the string ’dialog’ (case insensitive)

    Note: The GUI dialog requires zenity to be installed on the system.

    Known error: When using the file dialog, if the user clicks "Cancel" instead of saving the file, an error message is generated.

    See also: readfis

    fuzzy-logic-toolkit-0.6.0/docs/xie_beni_index.html000066400000000000000000000113311463010412100222400ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: xie_beni_index

    Function Reference: xie_beni_index

    Function File: vxb = xie_beni_index (input_data, cluster_centers, soft_partition)

    Return the Xie-Beni validity index for a given soft partition.

    The arguments to xie_beni_index are:

    • input_data - a matrix of input data points; each row corresponds to one point
    • cluster_centers - a matrix of cluster centers; each row corresponds to one point
    • soft_partition - the membership degree of each input data point in each cluster

    The return value is:

    • vxb - the Xie-Beni validity index for the given partition

    For demos of this function, please type:

     
     demo 'fcm'
     demo 'gustafson_kessel'
     

    For more information about the input_data, cluster_centers, and soft_partition matrices, please see the documentation for function fcm.

    See also: fcm, gustafson_kessel, partition_coeff, partition_entropy

    fuzzy-logic-toolkit-0.6.0/docs/zmf.html000066400000000000000000000153601463010412100200710ustar00rootroot00000000000000 Octave Fuzzy Logic Toolkit: zmf

    Function Reference: zmf

    Function File: y = zmf (x, params)
    Function File: y = zmf ([x1 x2 ... xn], [a b])

    For a given domain x and parameters params (or [a b]), return the corresponding y values for the Z-shaped membership function.

    The argument x must be a real number or a non-empty vector of strictly increasing real numbers, and a and b must be real numbers, with a < b. This membership function satisfies:

     
     
             1                                if x <= a
     f(x) =  1 - 2 * ((x - a)/(b - a))^2      if a < x <= (a + b)/2
             2 * ((x - b)/(b - a))^2          if (a + b)/2 < x < b
             0                                if x >= b
     
     

    which always returns values in the range [0, 1].

    The parameters a and b specify:

    • a == the rightmost point at which f(x) = 1
    • b == the leftmost point at which f(x) = 0

    At the midpoint of the segment [a, b], the function value is 0.5:

    • f((a + b)/2) = 0.5

    To run the demonstration code, type "demo zmf" (without the quotation marks) at the Octave prompt.

    See also: dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf_demo

    Example: 1

     
    
     x = 0:100;
     params = [40 60];
     y1 = zmf(x, params);
     params = [25 75];
     y2 = zmf(x, params);
     params = [10 90];
     y3 = zmf(x, params);
     figure('NumberTitle', 'off', 'Name', 'zmf demo');
     plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2)
     hold on;
     plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2)
     hold on;
     plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2)
     ylim([-0.1 1.1]);
     xlabel('Crisp Input Value', 'FontWeight', 'bold');
     ylabel('Degree of Membership', 'FontWeight', 'bold');
     grid;
    
                        
    plotted figure

    fuzzy-logic-toolkit-0.6.0/inst/000077500000000000000000000000001463010412100164275ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.0/inst/addmf.m000066400000000000000000000145401463010412100176640ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_name}, @var{mf_type}, @var{mf_params}) ## ## Add a membership function to an existing FIS ## structure and return the updated FIS. ## ## The types of the arguments are expected to be: ## @itemize @w ## @item @var{fis}: ## an FIS structure ## @item @var{in_or_out}: ## 'input' or 'output' (case-insensitive) ## @item @var{var_index}: ## valid index of an FIS input/output variable ## @item @var{mf_name}: ## a string ## @item @var{mf_type}: ## a string ## @item @var{mf_params}: ## a vector ## @end itemize ## ## If @var{mf_type} is one of the built-in membership functions, then the ## number and values of the parameters must satisfy the membership function ## requirements for the specified @var{mf_type}. ## ## Note that addmf will allow the user to add membership functions or ## membership function names for a given input or output variable that ## duplicate mfs or mf names already entered. ## ## Also, constant and linear membership functions are not restricted to FIS ## structure outputs or to Sugeno-type FIS structures, and the result of using ## them for FIS inputs or Mamdani-type FIS outputs has not yet been tested. ## ## @noindent ## To run the demonstration code, type "@t{demo addmf}" (without the quotation ## marks) at the Octave prompt. ## This demo creates two FIS input variables and associated membership functions ## and then produces two figures showing the term sets for the two FIS inputs. ## ## @seealso{rmmf, setfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addmf.m ## Note: The demo code is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Last-Modified: 2 Jun 2024 function fis = addmf (fis, in_or_out, var_index, mf_name, mf_type, ... mf_params) ## If the caller did not supply 6 argument values with the correct ## types, print an error message and halt. if (nargin != 6) error ("addmf requires 6 arguments\n"); elseif (!is_fis (fis)) error ("addmf's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("addmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("addmf's third argument must be a variable index\n"); elseif (!(is_string (mf_name) && is_string (mf_type))) error ("addmf's fourth and fifth arguments must be strings\n"); elseif (!are_mf_params (mf_type, mf_params)) error ("addmf's sixth argument must be a vector of parameters\n"); endif ## Create a new membership function struct and update the ## FIS structure. new_mf = struct ('name', mf_name, 'type', mf_type, 'params', ... mf_params); if (strcmp (tolower (in_or_out), 'input')) if (length (fis.input(var_index).mf) == 0) fis.input(var_index).mf = new_mf; else fis.input(var_index).mf = [fis.input(var_index).mf, new_mf]; endif else if (length (fis.output(var_index).mf) == 0) fis.output(var_index).mf = new_mf; else fis.output(var_index).mf = [fis.output(var_index).mf, new_mf]; endif endif endfunction %!demo %! ## Create new FIS. %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %! %! ## Add two inputs and their membership functions. %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 110]); %! a = addmf (a, 'input', 1, 'Low-Borderline', 'trapmf', ... %! [90 110 120 140]); %! a = addmf (a, 'input', 1, 'Borderline', 'trapmf', ... %! [120 140 150 170]); %! a = addmf (a, 'input', 1, 'High-Borderline', 'trapmf', ... %! [150 170 180 200]); %! a = addmf (a, 'input', 1, 'High', 'trapmf', [180 200 300 301]); %! %! a = addvar (a, 'input', 'HDL-Level', [0 100]); %! a = addmf (a, 'input', 2, 'Low-HDL', 'trapmf', [-1 0 35 45]); %! a = addmf (a, 'input', 2, 'Moderate-HDL', 'trapmf', [35 45 55 65]); %! a = addmf (a, 'input', 2, 'High-HDL', 'trapmf', [55 65 100 101]); %! %! ## Plot the input membership functions. %! plotmf (a, 'input', 1); %! plotmf (a, 'input', 2); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addmf(fis, 'input', 1, 'Excellent', 'trapmf', [5 8 10 11]); %! assert(fis.input(1).mf(3).name, 'Excellent'); ## Test input validation %!error %! addmf() %!error %! addmf(1) %!error %! addmf(1, 2) %!error %! addmf(1, 2, 3) %!error %! addmf(1, 2, 3, 4) %!error %! addmf(1, 2, 3, 4, 5) %!error %! addmf(1, 2, 3, 4, 5, 6, 7) %!error %! addmf(1, 2, 3, 4, 5, 6) %!error %! addmf(fis, 'file', 3, 4, 5, 6) %!error %! addmf(fis, 'input', 3, 4, 5, 6) %!error %! addmf(fis, 'input', 1, 4, 'string', 6) %!error %! addmf(fis, 'input', 1, 'string', 5, 6) %!error %! addmf(fis, 'input', 1, 'string', 'trapmf', []) fuzzy-logic-toolkit-0.6.0/inst/addrule.m000066400000000000000000000111161463010412100202250ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addrule (@var{fis}, @var{rule_matrix}) ## ## Add a list of rules to an existing FIS structure and return ## the updated FIS. ## ## Each row of the @var{rule_matrix} represents one rule and has the form: ## @example ## [in1_mf ... inM_mf out1_mf ... outN_mf weight connect] ## @end example ## ## @noindent ## where: ## ## @itemize @w ## @item ## in_mf == membership function index for input i ## @item ## out_mf == membership function index for output j ## @item ## weight == relative weight of the rule (0 <= weight <= 1) ## @item ## connect == antecedent connective (1 == and; 2 == or) ## @end itemize ## ## To express: ## @itemize @w ## @item ## "not" -- prepend a minus sign to the membership function index ## @item ## "somewhat" -- append ".05" to the membership function index ## @item ## "very" -- append ".20" to the membership function index ## @item ## "extremely" -- append ".30" to the membership function index ## @item ## "very very" -- append ".40" to the membership function index ## @item ## custom hedge -- append .xy, where x.y is the degree to which the membership ## value should be raised, to the membership function index ## @end itemize ## ## To omit an input or output, use 0 for the membership function index. ## The consequent connective is always "and". ## ## @noindent ## For example, to express: ## @example ## "If (input_1 is mf_2) or (input_3 is not mf_1) or (input_4 is very mf_1), ## then (output_1 is mf_2) and (output_2 is mf_1^0.3)." ## @end example ## ## @noindent ## with weight 1, the corresponding row of @var{rule_matrix} would be: ## @example ## [2 0 -1 4.2 2 1.03 1 2] ## @end example ## ## @noindent ## For a complete example that uses addrule, see heart_disease_demo_1.m. ## ## @seealso{heart_disease_demo_1, showrule} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy rule ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addrule.m ## Last-Modified: 2 Jun 2024 function fis = addrule (fis, rule_matrix) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("addrule requires 2 arguments\n"); elseif (!is_fis (fis)) error ("addrule's first argument must be an FIS structure\n"); elseif (!is_real_matrix (rule_matrix)) error ("addrule's second argument must be a matrix of real numbers\n"); endif ## For each row in the rule_matrix, create a new rule struct and ## update the FIS structure. num_inputs = columns (fis.input); num_outputs = columns (fis.output); for i = 1 : rows (rule_matrix) antecedent = rule_matrix(i, 1 : num_inputs); consequent = rule_matrix(i, ... (num_inputs+1) : (num_inputs+num_outputs)); weight = rule_matrix(i, num_inputs + num_outputs + 1); connection = rule_matrix(i, num_inputs + num_outputs + 2); new_rules(i) = struct ('antecedent', antecedent, ... 'consequent', consequent, ... 'weight', weight, ... 'connection', connection); endfor if (length (fis.rule) == 0) fis.rule = new_rules; else fis.rule = [fis.rule, new_rules]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addrule(fis, [1 2 2 1 1 1]); %! assert(fis.rule(5).antecedent, [1 2]); ## Test input validation %!error %! addrule() %!error %! addrule(1) %!error %! addrule(1, 2, 3) %!error %! addrule(1, 2) %!error %! addrule(fis, 2j) fuzzy-logic-toolkit-0.6.0/inst/addvar.m000066400000000000000000000100161463010412100200440ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} addvar (@var{fis}, @var{in_or_out}, @var{var_name}, @var{var_range}) ## ## Add an input or output variable to an existing FIS ## structure and return the updated FIS. ## ## The types of the arguments are expected to be: ## @itemize @w ## @item ## @var{fis} - an FIS structure ## @item ## @var{in_or_out} - either 'input' or 'output' (case-insensitive) ## @item ## @var{var_name} - a string ## @item ## @var{var_range} - a vector [x1 x2] of two real numbers ## @end itemize ## ## The vector components x1 and x2, which must also satisfy x1 <= x2, ## specify the lower and upper bounds of the variable's domain. ## ## @noindent ## To run the demonstration code, type "@t{demo addvar}" (without the quotation ## marks) at the Octave prompt. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy variable ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: addvar.m ## Last-Modified: 2 Jun 2024 function fis = addvar (fis, in_or_out, var_name, var_range) ## If the caller did not supply 4 argument values with the correct ## types, print an error message and halt. if (nargin != 4) error ("addvar requires 4 arguments\n"); elseif (!is_fis (fis)) error ("addvar's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("addvar's second argument must be 'input' or 'output'\n"); elseif (!is_string (var_name)) error ("addvar's third argument must be a string\n"); elseif (!are_bounds (var_range)) error ("addvar's fourth argument must specify variable bounds\n"); endif ## Create a new variable struct and update the FIS input or output ## variable list. new_variable = struct ('name', var_name, 'range', var_range, ... 'mf', []); if (strcmp (tolower (in_or_out), 'input')) if (length (fis.input) == 0) fis.input = new_variable; else fis.input = [fis.input, new_variable]; endif else if (length (fis.output) == 0) fis.output = new_variable; else fis.output = [fis.output, new_variable]; endif endif endfunction %!demo %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! getfis (a, 'input', 1); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = addvar(fis, 'input', 'Dining-Room', [1 10]); %! assert(fis.input(3).name == 'Dining-Room'); ## Test input validation %!error %! addvar() %!error %! addvar(1) %!error %! addvar(1, 2) %!error %! addvar(1, 2, 3) %!error %! addvar(1, 2, 3, 4, 5) %!error %! addvar(1, 2, 3, 4) %!error %! addvar(fis, 2, 3, 4) %!error %! addvar(fis, 'input', 3, 4) %!error %! addvar(fis, 'input', 'string', 4) fuzzy-logic-toolkit-0.6.0/inst/algebraic_product.m000066400000000000000000000065241463010412100222650ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} algebraic_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} algebraic_product (@var{x}, @var{y}) ## ## Return the algebraic product of the input. ## The algebraic product of two real scalars x and y is: x * y ## ## For one vector argument, apply the algebraic product to all of elements of ## the vector. (The algebraic product is associative.) For one two-dimensional ## matrix argument, return a vector of the algebraic product of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise product. ## ## @seealso{algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy algebraic_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: algebraic_product.m ## Last-Modified: 29 May 2024 function retval = algebraic_product (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("algebraic_product requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("arguments to algebraic_product must be real scalars or matrices\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = x .* y; elseif (nargin == 1 && ndims (x) <= 2) retval = prod (x); else error ("invalid arguments to function algebraic_product\n"); endif endfunction %!test %! x = [5 2 3 6]; %! z = algebraic_product(x); %! assert(z, 180); %!test %! x = [5 2 3 6]; %! y = [-1 0 2 3]; %! z = algebraic_product(x, y); %! assert(z, [-5 0 6 18]); ## Test input validation %!error %! algebraic_product() %!error %! algebraic_product(1, 2, 3) %!error %! algebraic_product(2j) %!error %! algebraic_product(1, 2j) %!error %! algebraic_product([1 2j]) %!error %! algebraic_product([1 2], [1 2 3]) %!error %! algebraic_product([1 2], [1 2; 3 4]) %!error %! algebraic_product(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/algebraic_sum.m000066400000000000000000000071371463010412100214120ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} algebraic_sum (@var{x, y}) ## @deftypefnx {Function File} {@var{retval} =} algebraic_sum (@var{x, y}) ## ## Return the algebraic sum of the input. ## The algebraic sum of two real scalars x and y is: x + y - x * y ## ## For one vector argument, apply the algebraic sum to all of elements of ## the vector. (The algebraic sum is associative.) For one two-dimensional ## matrix argument, return a vector of the algebraic sum of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise algebraic sum. ## ## @seealso{algebraic_product, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy algebraic_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: algebraic_sum.m ## Last-Modified: 29 May 2024 function retval = algebraic_sum (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("algebraic_sum requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("algebraic_sum requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = x + y - x .* y; elseif (nargin == 1 && isvector (x)) retval = algebraic_sum_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = algebraic_sum_of_vector (x(:, i)); endfor else error ("invalid arguments to function algebraic_sum\n"); endif endfunction function retval = algebraic_sum_of_vector (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = x + y - x * y; endfor retval = x; endfunction %!test %! x = [5 2]; %! z = algebraic_sum(x); %! assert(z, -3); %!test %! x = [5 2 3 6]; %! y = [-1 0 2 3]; %! z = algebraic_sum(x, y); %! assert(z, [9 2 -1 -9]); ## Test input validation %!error %! algebraic_sum() %!error %! algebraic_sum(1, 2, 3) %!error %! algebraic_sum(2j) %!error %! algebraic_sum(1, 2j) %!error %! algebraic_sum([1 2j]) %!error %! algebraic_sum([1 2], [1 2 3]) %!error %! algebraic_sum([1 2], [1 2; 3 4]) %!error %! algebraic_sum(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/bounded_difference.m000066400000000000000000000074431463010412100224070ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} bounded_difference (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} bounded_difference (@var{x}, @var{y}) ## ## Return the bounded difference of the input. ## The bounded difference of two real scalars x and y is: max (0, x + y - 1) ## ## For one vector argument, apply the bounded difference to all of the elements ## of the vector. (The bounded difference is associative.) For one ## two-dimensional matrix argument, return a vector of the bounded difference ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise bounded difference. ## ## @seealso{algebraic_product, algebraic_sum, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy bounded_difference ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: bounded_difference.m ## Last-Modified: 29 May 2024 function retval = bounded_difference (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("bounded_difference requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("bounded_difference requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = max (0, (x + y - 1)); elseif (nargin == 1 && isvector (x)) retval = bounded_difference_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = bounded_difference_of_vector (x(:, i)); endfor else error ("invalid arguments to function bounded_difference\n"); endif endfunction function retval = bounded_difference_of_vector (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); x = max (0, (x + y - 1)); endfor retval = x; endfunction %!test %! x = [5 2]; %! z = bounded_difference(x); %! assert(z, 6); %!test %! x = [5 2 3 -6]; %! y = [-1 0 2 3]; %! z = bounded_difference(x, y); %! assert(z, [3 1 4 0]); ## Test input validation %!error %! bounded_difference() %!error %! bounded_difference(1, 2, 3) %!error %! bounded_difference(2j) %!error %! bounded_difference(1, 2j) %!error %! bounded_difference([1 2j]) %!error %! bounded_difference([1 2], [1 2 3]) %!error %! bounded_difference([1 2], [1 2; 3 4]) %!error %! bounded_difference(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/bounded_sum.m000066400000000000000000000071041463010412100211130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} bounded_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} bounded_sum (@var{x}, @var{y}) ## ## Return the bounded sum of the input. ## The bounded sum of two real scalars x and y is: min (1, x + y) ## ## For one vector argument, apply the bounded sum to all of elements of ## the vector. (The bounded sum is associative.) For one two-dimensional ## matrix argument, return a vector of the bounded sum of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise bounded sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy bounded_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: bounded_sum.m ## Last-Modified: 29 May 2024 function retval = bounded_sum (x, y = 0) if ((nargin != 1) && (nargin != 2)) error ("bounded_sum requires 1 or 2 arguments\n"); elseif (!(isreal (x) && isreal (y))) error ("bounded_sum requires real scalar or matrix arguments\n"); elseif (nargin == 2 && ... (isscalar (x) || isscalar (y) || ... isequal (size (x), size (y)))) retval = min (1, (x + y)); elseif (nargin == 1 && isvector (x)) retval = bounded_sum_of_vector (x); elseif (nargin == 1 && ndims (x) == 2) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = bounded_sum_of_vector (x(:, i)); endfor else error ("invalid arguments to function bounded_sum\n"); endif endfunction function retval = bounded_sum_of_vector (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = min (1, (x + y)); endfor retval = x; endfunction %!test %! x = [0.5 0.2]; %! z = bounded_sum(x); %! assert(z, 0.7, 1e-5); %!test %! x = [0.5 0.2 0.3 0.6]; %! y = [1 0 0.2 0.3]; %! z = bounded_sum(x, y); %! assert(z, [1 0.2 0.5 0.9], 1e-5); ## Test input validation %!error %! bounded_sum() %!error %! bounded_sum(1, 2, 3) %!error %! bounded_sum(2j) %!error %! bounded_sum(1, 2j) %!error %! bounded_sum([1 2j]) %!error %! bounded_sum([1 2], [1 2 3]) %!error %! bounded_sum([1 2], [1 2; 3 4]) %!error %! bounded_sum(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/cubic_approx_demo.m000066400000000000000000000043361463010412100222750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} cubic_approx_demo ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to approximate a ## non-linear function using a Sugeno-type FIS with linear output functions. ## ## The demo: ## @itemize @bullet ## @item ## reads an FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (linear) output functions ## @item ## plots the FIS output as a function of the input ## @end itemize ## ## @seealso{heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: cubic_approx_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('cubic_approximator.fis'); ## Plot the input membership functions and linear output functions. plotmf (fis, 'input', 1); plotmf (fis, 'output', 1, -150, 150); ## Plot the FIS output y as a function of the input x. gensurf (fis); %!test %! fis = readfis ('cubic_approximator.fis'); %! cubes = evalfis([-2.5; -2; -1.5; -1; 0; 1; 1.5; 2; 2.5], fis, 101); %! expected_result = ... %! [-13.7500 %! -8.0000 %! -2.2500 %! -1.0000 %! 0 %! 1.0000 %! 2.2500 %! 8.0000 %! 13.7500]; %! assert(cubes, expected_result, 1e-4); fuzzy-logic-toolkit-0.6.0/inst/cubic_approximator.fis000066400000000000000000000045061463010412100230310ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: cubic_approximator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Cubic-Approximator' Type='sugeno' Version=2.0 NumInputs=1 NumOutputs=1 NumRules=11 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='wtaver' [Input1] Name='X' Range=[-5 5] NumMFs=11 MF1 = 'About-Neg-Five':'trimf', [-6 -5 -4] MF2 = 'About-Neg-Four':'trimf', [-5 -4 -3] MF3 = 'About-Neg-Three':'trimf', [-4 -3 -2] MF4 = 'About-Neg-Two':'trimf', [-3 -2 -1] MF5 = 'About-Neg-One':'trimf', [-2 -1 0] MF6 = 'About-Zero':'trimf', [-1 0 1] MF7 = 'About-One':'trimf', [0 1 2] MF8 = 'About-Two':'trimf', [1 2 3] MF9 = 'About-Three':'trimf', [2 3 4] MF10 = 'About-Four':'trimf', [3 4 5] MF11 = 'About-Five':'trimf', [4 5 6] [Output1] Name='Approx-X-Cubed' Range=[-5 5] NumMFs=11 MF1 = 'Tangent-at-Neg-Five':'linear', [75 250] MF2 = 'Tangent-at-Neg-Four':'linear', [48 128] MF3 = 'Tangent-at-Neg-Three':'linear', [27 54] MF4 = 'Tangent-at-Neg-Two':'linear', [12 16] MF5 = 'Tangent-at-Neg-One':'linear', [3 2] MF6 = 'Tangent-at-Zero':'linear', [0 0] MF7 = 'Tangent-at-One':'linear', [3 -2] MF8 = 'Tangent-at-Two':'linear', [12 -16] MF9 = 'Tangent-at-Three':'linear', [27 -54] MF10 = 'Tangent-at-Four':'linear', [48 -128] MF11 = 'Tangent-at-Five':'linear', [75 -250] [Rules] 1, 1 (1) : 1 2, 2 (1) : 1 3, 3 (1) : 1 4, 4 (1) : 1 5, 5 (1) : 1 6, 6 (1) : 1 7, 7 (1) : 1 8, 8 (1) : 1 9, 9 (1) : 1 10, 10 (1) : 1 11, 11 (1) : 1 fuzzy-logic-toolkit-0.6.0/inst/defuzz.m000066400000000000000000000250331463010412100201170ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{crisp_x} =} defuzz (@var{x}, @var{y}, @var{defuzz_method}) ## @deftypefnx {Function File} {@var{crisp_x} =} defuzz (@var{[x1 x2 ... xn]}, @var{[y1 y2 ... yn]}, @var{defuzz_method}) ## ## For a given domain, set of fuzzy function values, and defuzzification method, ## return the defuzzified (crisp) value of the fuzzy function. ## ## The arguments @var{x} and @var{y} must be either two real numbers or ## two equal-length, non-empty vectors of reals, with the elements of @var{x} ## strictly increasing. @var{defuzz_method} must be a (case-sensitive) string ## corresponding to a defuzzification method. Defuzz handles both built-in ## and custom defuzzification methods. ## ## The built-in defuzzification methods are: ## @table @samp ## @item centroid ## Return the x-value of the centroid. ## @item bisector ## Return the x-value of the vertical bisector of the area. ## @item mom ## Return the mean x-value of the points with maximum y-values. ## @item som ## Return the smallest (absolute) x-value of the points with maximum y-values. ## @item lom ## Return the largest (absolute) x-value of the points with maximum y-values. ## @item wtaver ## Return the weighted average of the x-values, with the y-values used as ## weights. ## @item wtsum ## Return the weighted sum of the x-values, with the y-values used as weights. ## @end table ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy defuzzification ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: defuzz.m ## Last-Modified: 1 Jun 2024 ##---------------------------------------------------------------------- function crisp_x = defuzz (x, y, defuzz_method) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if (nargin != 3) error ("defuzz requires 3 arguments\n"); elseif (!is_domain (x)) error ("defuzz's first argument must be a valid domain\n"); elseif (!(isvector (y) && isreal (y) && length (x) == length (y))) error ("defuzz's 1st and 2nd arguments must have the same length\n"); elseif (!is_string (defuzz_method)) error ("defuzz's third argument must be a string\n"); endif ## Calculate and return the defuzzified (crisp_x) value using the ## method specified by the argument defuzz_method. crisp_x = str2func (defuzz_method) (x, y); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = centroid (x, y) ## crisp_x = centroid ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the x-value of the centroid of the ## region described by the points (xi, yi). ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = centroid (x, y) crisp_x = trapz (x, x.*y) / trapz (x, y); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = bisector (x, y) ## crisp_x = bisector ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the x-value of a bisector of the region ## described by the points (xi, yi). ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = bisector (x, y) ## Find the bisector using a binary search. To ensure that the ## function terminates, add a counter to limit the iterations to the ## length of the vectors x and y. half_area = trapz (x, y) / 2; x_len = length (x); upper = x_len; lower = 1; count = 1; while ((lower <= upper) && (count++ < x_len)) midpoint = round ((lower + upper)/2); left_domain = [ones(1, midpoint), zeros(1, x_len-midpoint)]; left_y_vals = left_domain .* y; left_area = trapz (x, left_y_vals); error = left_area - half_area; if (error > 0) upper = midpoint; else lower = midpoint; endif endwhile crisp_x = midpoint; endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = mom (x, y) ## crisp_x = mom ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Mean of Maximum"; that is, return ## the average of the x-values corresponding to the maximum y-value ## in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = mom (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else 0 endif; y_val = @(y_val) 1 * (y_val == max_y); max_y_locations = arrayfun (y_val, y); crisp_x = sum (x .* max_y_locations) / sum (max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = som (x, y) ## crisp_x = som ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Smallest of Maximum"; that is, ## return the smallest x-value corresponding to the maximum y-value ## in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = som (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; y_val = @(y_val) one_or_NaN(y_val, max_y); max_y_locations = arrayfun (y_val, y); crisp_x = min (x .* max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: crisp_x = lom (x, y) ## crisp_x = lom ([x1 x2 ... xn], [y1 y2 ... yn]) ## ## For a given domain (x or [x1 x2 ... xn]) and corresponding y-values ## (y or [y1 y2 ... yn]), return the "Largest of Maximum"; that is, ## return the largest x-value corresponding to the maximum y-value in y. ## ## Both arguments are assumed to be reals or non-empty vectors of reals. ## In addition, x is assumed to be strictly increasing, and x and y are ## assumed to be of equal length. ##---------------------------------------------------------------------- function crisp_x = lom (x, y) max_y = max (y); #y_val = @(y_val) if (y_val == max_y) 1 else (NaN) endif; y_val = @(y_val) one_or_NaN(y_val, max_y); max_y_locations = arrayfun (y_val, y); crisp_x = max (x .* max_y_locations); endfunction ##---------------------------------------------------------------------- ## Usage: one_or_NaN (a, b) ## ## Return 1 if the arguments are equal, and otherwise return NaN. ## Called by som and lom (immediately above) to fix anonymous function ## bodies, which must be expressions, not statements. ## ## Examples: ## one_or_NaN (2, 2) ==> 1 ## one_or_NaN (2, 3) ==> NaN ##---------------------------------------------------------------------- function retval = one_or_NaN (a, b) if (a == b) retval = 1; else retval = NaN; endif endfunction ##---------------------------------------------------------------------- ## Usage: retval = wtaver (values, weights) ## ## Return the weighted average of the values. The parameters are assumed ## to be equal-length vectors of real numbers. ## ## Examples: ## wtaver ([1 2 3 4], [1 1 1 1]) ==> 2.5 ## wtaver ([1 2 3 4], [1 2 3 4]) ==> 3 ## wtaver ([1 2 3 4], [0 0 1 1]) ==> 3.5 ##---------------------------------------------------------------------- function retval = wtaver (values, weights) retval = sum (weights .* values) / sum (weights); endfunction ##---------------------------------------------------------------------- ## Usage: retval = wtsum (values, weights) ## ## Return the weighted sum of the values. The parameters are assumed to ## be equal-length vectors of real numbers. ## ## Examples: ## wtsum ([1 2 3 4], [1 1 1 1]) ==> 10 ## wtsum ([1 2 3 4], [1 2 3 4]) ==> 30 ## wtsum ([1 2 3 4], [0 0 1 1]) ==> 7 ##---------------------------------------------------------------------- function retval = wtsum (values, weights) retval = sum (weights .* values); endfunction ## Test each of the defuzzification methods %!assert(defuzz([1 2 3 4], [1 2 3 4], 'centroid'), 2.8667, 1e-4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'bisector'), 3) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'mom'), 4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'som'), 4) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'lom'), 4) %!assert(defuzz([1 2 3 4], [1 1 1 1], 'wtaver'), 2.5) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'wtaver'), 3) %!assert(defuzz([1 2 3 4], [0 0 1 1], 'wtaver'), 3.5) %!assert(defuzz([1 2 3 4], [1 1 1 1], 'wtsum'), 10) %!assert(defuzz([1 2 3 4], [1 2 3 4], 'wtsum'), 30) %!assert(defuzz([1 2 3 4], [0 0 1 1], 'wtsum'), 7) ## Test input validation %!error %! defuzz() %!error %! defuzz(1) %!error %! defuzz(1, 2) %!error %! defuzz(1, 2, 3, 4) %!error %! defuzz([1 0], 2, 3) %!error %! defuzz([0 1], 2, 3) %!error %! defuzz([0 1], [2 3], 3) fuzzy-logic-toolkit-0.6.0/inst/drastic_product.m000066400000000000000000000101671463010412100220030ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} drastic_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} drastic_product (@var{x}, @var{y}) ## ## Return the drastic product of the input. ## The drastic product of two real scalars x and y is: ## @example ## @group ## min (x, y) if max (x, y) == 1 ## 0 otherwise ## @end group ## @end example ## ## For one vector argument, apply the drastic product to all of the elements ## of the vector. (The drastic product is associative.) For one ## two-dimensional matrix argument, return a vector of the drastic product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise drastic product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_sum, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy drastic_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: drastic_product.m ## Last-Modified: 29 May 2024 function retval = drastic_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function drastic_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function drastic_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function drastic_product\n"); endif endif endfunction function retval = scalar_args (x, y) if (max (x, y) == 1) retval = min (x, y); else retval = 0; endif endfunction function retval = vector_arg (x) if (isempty (x)) retval = 1; elseif (max (x) == 1) retval = min (x); else retval = 0; endif endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [0.5 0.2]; %! z = drastic_product(x); %! assert(z, 0); %!test %! x = [0.5 0.2 0.3 1]; %! y = [1 0 0.2 0.3]; %! z = drastic_product(x, y); %! assert(z, [0.5 0 0 0.3]); ## Test input validation %!error %! drastic_product() %!error %! drastic_product(1, 2, 3) %!error %! drastic_product(2j) %!error %! drastic_product(1, 2j) %!error %! drastic_product([1 2j]) %!error %! drastic_product([1 2], [1 2 3]) %!error %! drastic_product([1 2], [1 2; 3 4]) %!error %! drastic_product(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/drastic_sum.m000066400000000000000000000077721463010412100211370ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} drastic_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} drastic_sum (@var{x}, @var{y}) ## ## Return the drastic sum of the input. ## The drastic sum of two real scalars x and y is: ## @example ## @group ## max (x, y) if min (x, y) == 0 ## 1 otherwise ## @end group ## @end example ## ## For one vector argument, apply the drastic sum to all of the elements ## of the vector. (The drastic sum is associative.) For one ## two-dimensional matrix argument, return a vector of the drastic sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise drastic sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, einstein_product, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy drastic_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: drastic_sum.m ## Last-Modified: 29 May 2024 function retval = drastic_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function drastic_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function drastic_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function drastic_sum\n"); endif endif endfunction function retval = scalar_args (x, y) if (min (x, y) == 0) retval = max (x, y); else retval = 1; endif endfunction function retval = vector_arg (x) if (isempty (x)) retval = 0; elseif (min (x) == 0) retval = max (x); else retval = 1; endif endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [0.5 0.2]; %! z = drastic_sum(x); %! assert(z, 1); %!test %! x = [0.5 0.2 0.3 1]; %! y = [1 0 0.2 0.3]; %! z = drastic_sum(x, y); %! assert(z, [1 0.2 1 1]); ## Test input validation %!error %! drastic_sum() %!error %! drastic_sum(1, 2, 3) %!error %! drastic_sum(2j) %!error %! drastic_sum(1, 2j) %!error %! drastic_sum([1 2j]) %!error %! drastic_sum([1 2], [1 2 3]) %!error %! drastic_sum([1 2], [1 2; 3 4]) %!error %! drastic_sum(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/dsigmf.m000066400000000000000000000117151463010412100200630ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} dsigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} dsigmf (@var{[x1 x2 ... xn]}, @var{[a1 c1 a2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[a1 c1 a2 c2]}), return the corresponding @var{y} values for the ## difference between two sigmoidal membership functions. ## ## The argument @var{x} must be a real number or a non-empty list of strictly ## increasing real numbers, and @var{a1}, @var{c1}, @var{a2}, and @var{c2} must ## be real numbers. This membership function satisfies the equation: ## @example ## f(x) = 1/(1 + exp(-a1*(x - c1))) - 1/(1 + exp(-a2*(x - c2))) ## @end example ## ## @noindent ## and in addition, is bounded above and below by 1 and 0 (regardless of the ## value given by the formula above). ## ## If the parameters @var{a1} and @var{a2} are positive and @var{c1} and ## @var{c2} are far enough apart with @var{c1} < @var{c2}, then: ## @itemize @w ## @item ## (a1)/4 ~ the rising slope at c1 ## @item ## c1 ~ the left inflection point ## @item ## (-a2)/4 ~ the falling slope at c2 ## @item ## c2 ~ the right inflection point ## @end itemize ## ## @noindent ## and at each inflection point, the value of the function is about 0.5: ## @itemize @w ## @item ## f(c1) ~ f(c2) ~ 0.5. ## @end itemize ## ## @noindent ## Here, the symbol ~ means "approximately equal". ## ## @noindent ## To run the demonstration code, type "@t{demo dsigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: dsigmf.m ## Last-Modified: 29 May 2024 function y = dsigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("dsigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("dsigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('dsigmf', params)) error ("dsigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a1 = params(1); c1 = params(2); a2 = params(3); c2 = params(4); y_val = @(x_val) max (0, ... min (1, 1 / (1 + exp (-a1 * (x_val - c1))) - ... 1 / (1 + exp (-a2 * (x_val - c2))))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.5 20 0.3 60]; %! y1 = dsigmf(x, params); %! params = [0.3 20 0.2 60]; %! y2 = dsigmf(x, params); %! params = [0.2 20 0.1 60]; %! y3 = dsigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'dsigmf demo'); %! plot(x, y1, 'r;params = [0.5 20 0.3 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.3 20 0.2 60];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.2 20 0.1 60];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [5 2 3 6]; %! y = [4.5383e-05 6.6925e-03 0.5000 0.9932 0.9975 0.9526 ... %! 0.5000 0.047426 2.4726e-03 1.2339e-04 6.1442e-06]; %! z = dsigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! dsigmf() %!error %! dsigmf(1) %!error %! dsigmf([1 0], 2) %!error %! dsigmf(1, 2) %!error %! dsigmf(1, 2, 3) %!error %! dsigmf(0:100, []) %!error %! dsigmf(0:100, [30]) %!error %! dsigmf(0:100, [2 3]) %!error %! dsigmf(0:100, [90 80 30]) %!error %! dsigmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.0/inst/einstein_product.m000066400000000000000000000101231463010412100221600ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} einstein_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} einstein_product (@var{x}, @var{y}) ## ## Return the Einstein product of the input. ## The Einstein product of two real scalars x and y is: ## (x * y) / (2 - (x + y - x * y)) ## ## For one vector argument, apply the Einstein product to all of the elements ## of the vector. (The Einstein product is associative.) For one ## two-dimensional matrix argument, return a vector of the Einstein product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise Einstein product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_sum, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy einstein_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: einstein_product.m ## Last-Modified: 29 May 2024 function retval = einstein_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function einstein_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function einstein_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function einstein_product\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x * y) / (2 - (x + y - x * y)); endfunction function retval = vector_arg (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); x = (x * y) / (2 - (x + y - x * y)); endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = einstein_product(x); %! assert(z, 1.6667, 1e-3); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = einstein_product(x, y); %! assert(z, [0.7134 2.0000 2.0000 1.6364], 1e-3); ## Test input validation %!error %! einstein_product() %!error %! einstein_product(2j) %!error %! einstein_product(1, 2j) %!error %! einstein_product([1 2j]) %!error %! einstein_product(1, 2, 3) %!error %! einstein_product([1 2], [1 2 3]) %!error %! einstein_product([1 2], [1 2; 3 4]) %!error %! einstein_product(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/einstein_sum.m000066400000000000000000000076571463010412100213260ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} einstein_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} einstein_sum (@var{x}, @var{y}) ## ## Return the Einstein sum of the input. ## The Einstein sum of two real scalars x and y is: (x + y) / (1 + x * y) ## ## For one vector argument, apply the Einstein sum to all of the elements ## of the vector. (The Einstein sum is associative.) For one ## two-dimensional matrix argument, return a vector of the Einstein sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise Einstein sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, hamacher_product, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy einstein_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: einstein_sum.m ## Last-Modified: 29 May 2024 function retval = einstein_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function einstein_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function einstein_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function einstein_sum\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x + y) / (1 + x * y); endfunction function retval = vector_arg (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); x = (x + y) / (1 + x * y); endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = einstein_sum(x); %! assert(z, 0.5000); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = einstein_sum(x, y); %! assert(z, [-1.000 1.000 0.7143 0.4737], 1e-4); ## Test input validation %!error %! einstein_sum() %!error %! einstein_sum(2j) %!error %! einstein_sum(1, 2j) %!error %! einstein_sum([1 2j]) %!error %! einstein_sum(1, 2, 3) %!error %! einstein_sum([1 2], [1 2 3]) %!error %! einstein_sum([1 2], [1 2; 3 4]) %!error %! einstein_sum(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/evalfis.m000066400000000000000000000257751463010412100202560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} evalfis (@var{user_input}, @var{fis}) ## @deftypefnx {Function File} {@var{output} =} evalfis (@var{user_input}, @var{fis}, @var{num_points}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis (@var{user_input}, @var{fis}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis (@var{user_input}, @var{fis}, @var{num_points}) ## ## Return the crisp output(s) of an FIS for each row in a matrix of crisp input ## values. ## Also, for the last row of @var{user_input}, return the intermediate results: ## ## @table @var ## @item rule_input ## a matrix of the degree to which ## each FIS rule matches each FIS input variable ## @item rule_output ## a matrix of the fuzzy output for each (rule, FIS output) pair ## @item fuzzy_output ## a matrix of the aggregated output for each FIS output variable ## @end table ## ## The optional argument @var{num_points} specifies the number of points over ## which to evaluate the fuzzy values. The default value of @var{num_points} is ## 101. ## ## @noindent ## Argument @var{user_input}: ## ## @var{user_input} is a matrix of crisp input values. Each row ## represents one set of crisp FIS input values. For an FIS that has N inputs, ## an input matrix of z sets of input values will have the form: ## ## @example ## @group ## [input_11 input_12 ... input_1N] <-- 1st row is 1st set of inputs ## [input_21 input_22 ... input_2N] <-- 2nd row is 2nd set of inputs ## [ ... ] ... ## [input_z1 input_z2 ... input_zN] <-- zth row is zth set of inputs ## @end group ## @end example ## ## @noindent ## Return value @var{output}: ## ## @var{output} is a matrix of crisp output values. Each row represents ## the set of crisp FIS output values for the corresponding row of ## @var{user_input}. For an FIS that has M outputs, an @var{output} matrix ## corresponding to the preceding input matrix will have the form: ## ## @example ## @group ## [output_11 output_12 ... output_1M] <-- 1st row is 1st set of outputs ## [output_21 output_22 ... output_2M] <-- 2nd row is 2nd set of outputs ## [ ... ] ... ## [output_z1 output_z2 ... output_zM] <-- zth row is zth set of outputs ## @end group ## @end example ## ## @noindent ## The intermediate result @var{rule_input}: ## ## The matching degree for each (rule, input value) pair is specified by the ## @var{rule_input} matrix. For an FIS that has Q rules and N input variables, ## the matrix will have the form: ## @example ## @group ## in_1 in_2 ... in_N ## rule_1 [mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN] ## @end group ## @end example ## ## @noindent ## Evaluation of hedges and "not": ## ## Each element of each FIS rule antecedent and consequent indicates the ## corresponding membership function, hedge, and whether or not "not" should ## be applied to the result. The index of the membership function to be used is ## given by the positive whole number portion of the antecedent/consequent ## vector entry, the hedge is given by the fractional portion (if any), and ## "not" is indicated by a minus sign. A "0" as the integer portion in any ## position in the rule indicates that the corresponding FIS input or output ## variable is omitted from the rule. ## ## For custom hedges and the four built-in hedges "somewhat," "very," ## "extremely," and "very very," the membership function value (without the ## hedge or "not") is raised to the power corresponding to the hedge. All ## hedges are rounded to 2 digits. ## ## For example, if "mu(x)" denotes the matching degree of the input to the ## corresponding membership function without a hedge or "not," then the final ## matching degree recorded in @var{rule_input} will be computed by applying ## the hedge and "not" in two steps. First, the hedge is applied: ## ## @example ## @group ## (fraction == .05) <=> somewhat x <=> mu(x)^0.5 <=> sqrt(mu(x)) ## (fraction == .20) <=> very x <=> mu(x)^2 <=> sqr(mu(x)) ## (fraction == .30) <=> extremely x <=> mu(x)^3 <=> cube(mu(x)) ## (fraction == .40) <=> very very x <=> mu(x)^4 ## (fraction == .dd) <=> x <=> mu(x)^(dd/10) ## @end group ## @end example ## ## After applying the appropriate hedge, "not" is calculated by: ## @example ## minus sign present <=> not x <=> 1 - mu(x) ## minus sign and hedge present <=> not x <=> 1 - mu(x)^(dd/10) ## @end example ## ## Hedges and "not" in the consequent are handled similarly. ## ## @noindent ## The intermediate result @var{rule_output}: ## ## For either a Mamdani-type FIS (that is, an FIS that does not have constant or ## linear output membership functions) or a Sugeno-type FIS (that is, an FIS ## that has only constant and linear output membership functions), ## @var{rule_output} specifies the fuzzy output for each (rule, FIS output) pair. ## The format of rule_output depends on the FIS type. ## ## For a Mamdani-type FIS, @var{rule_output} is a @var{num_points} x (Q * M) ## matrix, where Q is the number of rules and M is the number of FIS output ## variables. Each column of this matrix gives the y-values of the fuzzy ## output for a single (rule, FIS output) pair. ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## For a Sugeno-type FIS, @var{rule_output} is a 2 x (Q * M) matrix. ## Each column of this matrix gives the (location, height) pair of the ## singleton output for a single (rule, FIS output) pair. ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [ ] ## height [ ] ## @end group ## @end example ## ## @noindent ## The intermediate result @var{fuzzy_output}: ## ## The format of @var{fuzzy_output} depends on the FIS type ('mamdani' or ## 'sugeno'). ## ## For either a Mamdani-type FIS or a Sugeno-type FIS, @var{fuzzy_output} ## specifies the aggregated fuzzy output for each FIS output. ## ## For a Mamdani-type FIS, the aggregated @var{fuzzy_output} is a ## @var{num_points} x M matrix. Each column of this matrix gives the y-values ## of the fuzzy output for a single FIS output, aggregated over all rules. ## ## @example ## @group ## out_1 out_2 ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## For a Sugeno-type FIS, the aggregated output for each FIS output is a 2 x L ## matrix, where L is the number of distinct singleton locations in the ## @var{rule_output} for that FIS output: ## ## @example ## @group ## singleton_1 singleton_2 ... singleton_L ## location [ ] ## height [ ] ## @end group ## @end example ## ## Then @var{fuzzy_output} is a vector of M structures, each of which has an index and ## one of these matrices. ## ## @noindent ## Examples: ## ## Five examples of using evalfis are shown in: ## @itemize @bullet ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: evalfis.m ## Last-Modified: 1 Jun 2024 function [output, rule_input, rule_output, fuzzy_output] = ... evalfis (user_input, fis, num_points = 101) ## If evalfis was called with an incorrect number of arguments, or ## the arguments do not have the correct type, print an error message ## and halt. if ((nargin != 2) && (nargin != 3)) error ("evalfis requires 2 or 3 arguments\n"); elseif (!is_fis (fis)) error ("evalfis's second argument must be an FIS structure\n"); elseif (!is_input_matrix (user_input, fis)) error ("evalfis's 1st argument must be a matrix of input values\n"); elseif (!is_pos_int (num_points)) error ("evalfis's third argument must be a positive integer\n"); endif ## Call a private function to compute the output. ## (The private function is also called by gensurf.) [output, rule_input, rule_output, fuzzy_output] = ... evalfis_private (user_input, fis, num_points); endfunction %!shared fis, food_service %! fis = readfis ('sugeno_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %!test %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 10.000 12.500 %! 10.868 13.681 19.138 %! 17.500 17.500 20.000 %! 10.604 14.208 19.452 %! 10.427 13.687 19.033 %! 10.471 14.358 19.353]; %! assert(tip, expected_result, 1e-3); ## Test input validation %!error %! evalfis() %!error %! evalfis(1) %!error %! evalfis(1, 2, 3, 4) %!error %! evalfis(food_service, 2, 3) %!error %! evalfis(0, fis, 3) %!error %! evalfis(food_service, fis, -3) fuzzy-logic-toolkit-0.6.0/inst/evalmf.m000066400000000000000000000117001463010412100200560ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{x}, @var{param}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## ## For a given domain, set of parameters, membership function type, and ## optional hedge and not_flag, return the corresponding y-values for the ## membership function. ## ## The argument @var{x} must be a real number or a non-empty list of strictly ## increasing real numbers, @var{param} must be a valid parameter or a vector ## of valid parameters for @var{mf_type}, and @var{mf_type} must be a string ## corresponding to a membership function type. Evalmf handles both built-in and ## custom membership functions. ## ## For custom hedges and the four built-in hedges "somewhat", "very", ## "extremely", and "very very", raise the membership function values to ## the power corresponding to the hedge. ## ## @example ## @group ## (fraction == .05) <=> somewhat x <=> mu(x)^0.5 <=> sqrt(mu(x)) ## (fraction == .20) <=> very x <=> mu(x)^2 <=> sqr(mu(x)) ## (fraction == .30) <=> extremely x <=> mu(x)^3 <=> cube(mu(x)) ## (fraction == .40) <=> very very x <=> mu(x)^4 ## (fraction == .dd) <=> x <=> mu(x)^(dd/10) ## @end group ## @end example ## ## The @var{not_flag} negates the membership function using: ## @example ## mu(not(x)) = 1 - mu(x) ## @end example ## ## @noindent ## To run the demonstration code, type "@t{demo evalmf}" (without the quotation ## marks) at the Octave prompt. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership evaluate ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: evalmf.m ## Last-Modified: 31 May 2024 function y = evalmf (x, params, mf_type, hedge = 0, not_flag = false) ## If the caller did not supply 3 - 5 argument values with the correct ## types, print an error message and halt. if ((nargin < 3) || (nargin > 5)) error ("evalmf requires between 3 and 5 arguments\n"); elseif (!is_domain (x)) error ("evalmf's first argument must be a valid domain\n"); elseif (!is_string (mf_type)) error ("evalmf's third argument must be a string\n"); elseif (!is_real (hedge)) error ("evalmf's fourth argument must be a real number\n"); elseif (!isbool (not_flag)) error ("evalmf's fifth argument must be a Boolean\n"); endif ## Calculate and return the y values of the membership function on ## the domain x. y = evalmf_private (x, params, mf_type, hedge, not_flag); endfunction %!demo %! x = 0:100; %! params = [25 50 75]; %! mf_type = 'trimf'; %! y = evalmf(x, params, mf_type); %! figure('NumberTitle', 'off', 'Name', "evalmf(0:100, [25 50 75], 'trimf')"); %! plot(x, y, 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 50 75]; %! mf_type = 'trimf'; %! y = evalmf(x, params, mf_type); %! assert(y, [0 0 0 0.2 0.6 1 0.6 0.2 0 0 0]); ## Test input validation %!error %! evalmf() %!error %! evalmf(1) %!error %! evalmf(1, 2) %!error %! evalmf(1, 2, 3, 4, 5, 6) %!error %! evalmf([1 0], 2, 3) %!error %! evalmf([0 1], 2, 3) %!error %! evalmf([0 1], 2, 'trimf', 2j) %!error %! evalmf([0 1], 2, 'trimf', 2, 2) fuzzy-logic-toolkit-0.6.0/inst/fcm.m000066400000000000000000000344071463010412100173620ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}, @var{options}) ## @deftypefnx {Function File} {@var{cluster_centers} =} fcm (@var{input_data}, @var{num_clusters}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}, @var{options}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} fcm (@var{input_data}, @var{num_clusters}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## ## Using the Fuzzy C-Means algorithm, calculate and return the soft partition ## of a set of unlabeled data points. ## ## Also, if @var{display_intermediate_results} is true, display intermediate ## results after each iteration. Note that because the initial cluster ## prototypes are randomly selected locations in the ranges determined by the ## input data, the results of this function are nondeterministic. ## ## The required arguments to fcm are: ## @itemize @w ## @item ## @var{input_data} - a matrix of input data points; each row corresponds to one point ## @item ## @var{num_clusters} - the number of clusters to form ## @end itemize ## ## The optional arguments to fcm are: ## @itemize @w ## @item ## @var{m} - the parameter (exponent) in the objective function; default = 2.0 ## @item ## @var{max_iterations} - the maximum number of iterations before stopping; default = 100 ## @item ## @var{epsilon} - the stopping criteria; default = 1e-5 ## @item ## @var{display_intermediate_results} - if 1, display results after each iteration, and if 0, do not; default = 1 ## @end itemize ## ## The default values are used if any of the optional arguments are missing or ## evaluate to NaN. ## ## The return values are: ## @itemize @w ## @item ## @var{cluster_centers} - a matrix of the cluster centers; each row corresponds to one point ## @item ## @var{soft_partition} - a constrained soft partition matrix ## @item ## @var{obj_fcn_history} - the values of the objective function after each iteration ## @end itemize ## ## Three important matrices used in the calculation are X (the input points ## to be clustered), V (the cluster centers), and Mu (the membership of each ## data point in each cluster). Each row of X and V denotes a single point, ## and Mu(i, j) denotes the membership degree of input point X(j, :) in the ## cluster having center V(i, :). ## ## X is identical to the required argument @var{input_data}; V is identical ## to the output @var{cluster_centers}; and Mu is identical to the output ## @var{soft_partition}. ## ## If n denotes the number of input points and k denotes the number of ## clusters to be formed, then X, V, and Mu have the dimensions: ## ## @example ## @group ## 1 2 ... #features ## 1 [ ] ## X = input_data = 2 [ ] ## ... [ ] ## n [ ] ## @end group ## @end example ## ## @example ## @group ## 1 2 ... #features ## 1 [ ] ## V = cluster_centers = 2 [ ] ## ... [ ] ## k [ ] ## @end group ## @end example ## ## @example ## @group ## 1 2 ... n ## 1 [ ] ## Mu = soft_partition = 2 [ ] ## ... [ ] ## k [ ] ## @end group ## @end example ## ## @seealso{gustafson_kessel, partition_coeff, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: fcm.m ## Last-Modified: 29 May 2024 function [cluster_centers, soft_partition, obj_fcn_history] = ... fcm (input_data, num_clusters, options = [2.0, 100, 1e-5, 1]) ## If fcm was called with an incorrect number of arguments, or the ## arguments do not have the correct type, print an error message ## and halt. if ((nargin != 2) && (nargin != 3)) error ("fcm requires 2 or 3 arguments\n"); elseif (!is_real_matrix (input_data)) error ("fcm's first argument must be matrix of real numbers\n"); elseif (!(is_int (num_clusters) && (num_clusters > 1))) error ("fcm's second argument must be an integer greater than 1\n"); elseif (!(isreal (options) && isvector (options))) error ("fcm's third argument must be a vector of real numbers\n"); endif ## Assign options to the more readable variable names: m, ## max_iterations, epsilon, and display_intermediate_results. ## If options are missing or NaN (not a number), use the default ## values. default_options = [2.0, 100, 1e-5, 1]; for i = 1 : 4 if ((length (options) < i) || ... isna (options(i)) || isnan (options(i))) options(i) = default_options(i); endif endfor m = options(1); max_iterations = options(2); epsilon = options(3); display_intermediate_results = options(4); ## Call a private function to compute the output. [cluster_centers, soft_partition, obj_fcn_history] = ... fcm_private (input_data, num_clusters, m, max_iterations, epsilon, display_intermediate_results); endfunction ##---------------------------------------------------------------------- ## Note: This function (fcm_private) is an implementation of Figure 13.4 ## in Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition) and Algorithm 4.1 in Fuzzy and Neural ## Control, by Robert Babuska, November 2009, p. 63. ##---------------------------------------------------------------------- function [V, Mu, obj_fcn_history] = ... fcm_private (X, k, m, max_iterations, epsilon, ... display_intermediate_results) ## Initialize the prototypes and the calculation. V = init_cluster_prototypes (X, k); obj_fcn_history = zeros (max_iterations); convergence_criterion = epsilon + 1; iteration = 0; ## Calculate a few numbers here to reduce redundant computation. k = rows (V); n = rows (X); sqr_dist = square_distance_matrix (X, V); ## Loop until the objective function is within tolerance or the ## maximum number of iterations has been reached. while (convergence_criterion > epsilon && ... ++iteration <= max_iterations) V_previous = V; Mu = update_cluster_membership (V, X, m, k, n, sqr_dist); Mu_m = Mu .^ m; V = update_cluster_prototypes (Mu_m, X, k); sqr_dist = square_distance_matrix (X, V); obj_fcn_history(iteration) = ... compute_cluster_obj_fcn (Mu_m, sqr_dist); if (display_intermediate_results) printf ("Iteration count = %d, Objective fcn = %8.6f\n", ... iteration, obj_fcn_history(iteration)); endif convergence_criterion = ... compute_cluster_convergence (V, V_previous); endwhile ## Remove extraneous entries from the tail of the objective ## function history. if (convergence_criterion <= epsilon) obj_fcn_history = obj_fcn_history(1 : iteration); endif endfunction ##---------------------------------------------------------------------- ## FCM Demo #1 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies a small set of unlabeled data points using %! ## the Fuzzy C-Means algorithm into two fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data is taken from Chapter 13, Example 17 in %! ## Fuzzy Logic: Intelligence, Control and Information, by %! ## J. Yen and R. Langari, Prentice Hall, 1999, page 381 %! ## (International Edition). %! %! ## Use fcm to classify the input_data. %! input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4]; %! number_of_clusters = 2; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! fcm (input_data, number_of_clusters) %! %! ## Plot the data points as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 1'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ##---------------------------------------------------------------------- ## FCM Demo #2 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies three-dimensional unlabeled data points using %! ## the Fuzzy C-Means algorithm into three fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data was selected to form three areas of %! ## different shapes. %! %! ## Use fcm to classify the input_data. %! input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7; %! 3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11; %! 3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9; %! 6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12; %! 11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15; %! 14 6 14; 14 8 13]; %! number_of_clusters = 3; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! fcm (input_data, number_of_clusters, [NaN NaN NaN 0]) %! %! ## Plot the data points in two dimensions (using features 1 & 2) %! ## as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 2) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Plot the data points in two dimensions %! ## (using features 1 & 3) as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'FCM Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 3) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 3), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 3'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ## Test input validation %!error %! fcm() %!error %! fcm(1) %!error %! fcm(1, 2, 3, 4) %!error %! fcm('input', 2) %!error %! fcm(1, 0) %!error %! fcm(1, 2, 2j) fuzzy-logic-toolkit-0.6.0/inst/gauss2mf.m000066400000000000000000000126401463010412100203370ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gauss2mf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gauss2mf (@var{[x1 x2 ... xn]}, @var{[sig1 c1 sig2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[sig1 c1 sig2 c2]}), return the corresponding @var{y} values for the ## two-sided Gaussian composite membership function. This membership function is ## a smooth curve calculated from two Gaussian membership functions as follows: ## ## Given parameters @var{sig1}, @var{c1}, @var{sig2}, and @var{c2}, that define ## two Gaussian membership functions, let: ## ## @example ## @group ## f1(x) = exp((-(x - c1)^2)/(2 * sig1^2)) if x <= c1 ## 1 otherwise ## ## f2(x) = 1 if x <= c2 ## exp((-(x - c2)^2)/(2 * sig2^2)) otherwise ## @end group ## @end example ## ## @noindent ## Then gauss2mf is given by: ## ## @example ## f(x) = f1(x) * f2(x) ## @end example ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{sig1}, @var{c1}, @var{sig2}, and @var{c2} ## must be real numbers. ## Gauss2mf always returns a continuously differentiable curve with values in ## the range [0, 1]. ## ## If @var{c1} < @var{c2}, gauss2mf is a normal membership function (has a ## maximum value of 1), with the rising curve identical to that of f1(x) and a ## falling curve identical to that of f2(x), above. If @var{c1} >= @var{c2}, ## gauss2mf returns a subnormal membership function (has a maximum value less ## than 1). ## ## @noindent ## To run the demonstration code, type "@t{demo gauss2mf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership gaussian ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gauss2mf.m ## Last-Modified: 29 May 2024 function y = gauss2mf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gauss2mf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gauss2mf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gauss2mf', params)) error ("gauss2mf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on ## the domain x according to the definition of gauss2mf given in the ## comment above. sig1 = params(1); c1 = params(2); sig2 = params(3); c2 = params(4); f1_val = @(x_val) (x_val <= c1) * ... exp ((-(x_val - c1)^2)/(2 * sig1^2)) + ... (x_val > c1); f2_val = @(x_val) (x_val <= c2) + ... (x_val > c2) * exp ((-(x_val - c2)^2)/(2 * sig2^2)); f1 = arrayfun (f1_val, x); f2 = arrayfun (f2_val, x); y = f1 .* f2; endfunction %!demo %! x = -10:0.2:10; %! params = [3 0 1.5 2]; %! y1 = gauss2mf(x, params); %! params = [1.5 0 3 2]; %! y2 = gauss2mf(x, params); %! params = [1.5 2 3 0]; %! y3 = gauss2mf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gauss2mf demo'); %! plot(x, y1, 'r;params = [3 0 1.5 2];', 'LineWidth', 2); %! hold on ; %! plot(x, y2, 'b;params = [1.5 0 3 2];', 'LineWidth', 2); %! hold on ; %! plot(x, y3, 'g;params = [1.5 2 3 0];', 'LineWidth', 2); %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %! hold; %!test %! x = -10:2:10; %! params = [3 0 1.5 2]; %! y = [3.8659e-03 0.028566 0.1353 0.4111 0.8007 1 ... %! 1 0.4111 0.028566 3.3546e-04 6.6584e-07]; %! z = gauss2mf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gauss2mf() %!error %! gauss2mf(1) %!error %! gauss2mf(1, 2, 3) %!error %! gauss2mf([1 0], 2) %!error %! gauss2mf(1, 2) %!error %! gauss2mf(0:100, []) %!error %! gauss2mf(0:100, [30]) %!error %! gauss2mf(0:100, [2 3]) %!error %! gauss2mf(0:100, [90 80 30]) %!error %! gauss2mf(0:100, 'abc') fuzzy-logic-toolkit-0.6.0/inst/gaussmf.m000066400000000000000000000113221463010412100202510ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gaussmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gaussmf (@var{[x1 x2 ... xn]}, @var{[sig c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[sig c]}), ## return the corresponding @var{y} values for the Gaussian membership ## function. This membership function is shaped like the Gaussian (normal) ## distribution, but scaled to have a maximum value of 1. By contrast, the ## area under the Gaussian distribution curve is 1. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{sig} and @var{c} must be real numbers. ## This membership function satisfies the equation: ## @example ## f(x) = exp((-(x - c)^2)/(2 * sig^2)) ## @end example ## ## @noindent ## which always returns values in the range [0, 1]. ## ## Just as for the Gaussian (normal) distribution, the parameters @var{sig} and ## @var{c} represent: ## @itemize @w ## @item ## sig^2 == the variance (a measure of the width of the curve) ## @item ## c == the center (the mean; the x value of the peak) ## @end itemize ## ## @noindent ## For larger values of @var{sig}, the curve is flatter, and for smaller values ## of sig, the curve is narrower. The @var{y} value at the center is always 1: ## @itemize @w ## @item ## f(c) == 1 ## @end itemize ## ## @noindent ## To run the demonstration code, type "@t{demo gaussmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership gaussian ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gaussmf.m ## Last-Modified: 30 May 2024 function y = gaussmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gaussmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gaussmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gaussmf', params)) error ("gaussmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. sig = params(1); c = params(2); y_val = @(x_val) exp ((-(x_val - c)^2)/(2 * sig^2)); y = arrayfun (y_val, x); endfunction %!demo %! x = -5:0.1:5; %! params = [0.5 0]; %! y1 = gaussmf(x, params); %! params = [1 0]; %! y2 = gaussmf(x, params); %! params = [2 0]; %! y3 = gaussmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gaussmf demo'); %! plot(x, y1, 'r;params = [0.5 0];', 'LineWidth', 2); %! hold on ; %! plot(x, y2, 'b;params = [1 0];', 'LineWidth', 2); %! hold on ; %! plot(x, y3, 'g;params = [2 0];', 'LineWidth', 2); %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value'); %! ylabel('Degree of Membership'); %! grid; %! hold; %!test %! x = -5:5; %! params = [2 0]; %! y = [0.043937 0.1353 0.3247 0.6065 0.8825 1 ... %! 0.8825 0.6065 0.3247 0.1353 0.043937]; %! z = gaussmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gaussmf() %!error %! gaussmf(1) %!error %! gaussmf(1, 2, 3) %!error %! gaussmf([1 0], 2) %!error %! gaussmf(1, 2) %!error %! gaussmf(0:100, []) %!error %! gaussmf(0:100, [30]) %!error %! gaussmf(0:100, [2 3 4 5]) %!error %! gaussmf(0:100, [90 80 30]) %!error %! gaussmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.0/inst/gbellmf.m000066400000000000000000000116651463010412100202260ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} gbellmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} gbellmf (@var{[x1 x2 ... xn]}, @var{[a b c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c]}), ## return the corresponding @var{y} values for the generalized bell-shaped ## membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, @var{a}, @var{b}, and @var{c} must be real numbers, ## @var{a} must be non-zero, and @var{b} must be an integer. This membership ## function satisfies the equation: ## @example ## f(x) = 1/(1 + (abs((x - c)/a))^(2 * b)) ## @end example ## which always returns values in the range [0, 1]. ## ## The parameters @var{a}, @var{b}, and @var{c} give: ## @example ## @group ## a == controls the width of the curve at f(x) = 0.5; ## f(c-a) = f(c+a) = 0.5 ## b == controls the slope of the curve at x = c-a and x = c+a; ## f'(c-a) = b/2a and f'(c+a) = -b/2a ## c == the center of the curve ## @end group ## @end example ## ## This membership function has a value of 0.5 at the two points c - a and ## c + a, and the width of the curve at f(x) == 0.5 is 2 * |a|: ## @example ## @group ## f(c - a) == f(c + a) == 0.5 ## 2 * |a| == the width of the curve at f(x) == 0.5 ## @end group ## @end example ## ## @noindent ## The generalized bell-shaped membership function is continuously ## differentiable and is symmetric about the line x = c. ## ## @noindent ## To run the demonstration code, type "@t{demo gbellmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership bell-shaped bell ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gbellmf.m ## Last-Modified: 30 May 2024 function y = gbellmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("gbellmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("gbellmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('gbellmf', params)) error ("gbellmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); c = params(3); y_val = @(x_val) 1 / (1 + (abs ((x_val - c)/a))^(2 * b)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:255; %! params = [20 4 100]; %! y1 = gbellmf(x, params); %! params = [30 3 100]; %! y2 = gbellmf(x, params); %! params = [40 2 100]; %! y3 = gbellmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'gbellmf demo'); %! plot(x, y1, 'r;params = [20 4 100];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [30 3 100];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [40 2 100];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:25:250; %! params = [40 2 100]; %! y = [0.024961 0.074852 0.2906 0.8676 1 0.8676 ... %! 0.2906 0.074852 0.024961 0.010377 5.0313e-03]; %! z = gbellmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! gbellmf() %!error %! gbellmf(1) %!error %! gbellmf(1, 2, 3) %!error %! gbellmf([1 0], 2) %!error %! gbellmf(1, 2) %!error %! gbellmf(0:100, []) %!error %! gbellmf(0:100, [30]) %!error %! gbellmf(0:100, [2 3]) %!error %! gbellmf(0:100, [90 80 30 50]) %!error %! gbellmf(0:100, 'abcd') fuzzy-logic-toolkit-0.6.0/inst/gensurf.m000066400000000000000000000204241463010412100202600ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} gensurf (@var{fis}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}, @var{ref_input}) ## @deftypefnx {Function File} {} gensurf (@var{fis}, @var{input_axes}, @var{output_axes}, @var{grids}, @var{ref_input}, @var{num_points}) ## @deftypefnx {Function File} {@var{[x, y, z]} =} gensurf (...) ## ## Generate and plot a surface (or 2-dimensional curve) showing one FIS output ## as a function of two (or one) of the FIS inputs. The reference input is used ## for all FIS inputs that are not in the input_axes vector. ## ## Grids, which specifies the number of grids to show on the input axes, may be ## a scalar or a vector of length 2. If a scalar, then both axes will use the ## same number of grids. If a vector of length 2, then the grids on the two axes ## are controlled separately. ## ## Num_points specifies the number of points to use when evaluating the FIS. ## ## The final form "[x, y, z] = gensurf(...)" suppresses plotting. ## ## Default values for arguments not supplied are: ## @itemize @bullet ## @item ## input_axes == [1 2] ## @item ## output_axis == 1 ## @item ## grids == [15 15] ## @item ## ref_input == [] ## @item ## num_points == 101 ## @end itemize ## ## Six demo scripts that use gensurf are: ## @itemize @bullet ## @item ## cubic_approx_demo.m ## @item ## heart_disease_demo_1.m ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## Current limitation: ## The form of gensurf that suppresses plotting (the final form above) is not yet ## implemented. ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo, plotmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis plot ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gensurf.m ## Last-Modified: 29 May 2024 function [x, y, z] = gensurf (fis, input_axes = [1 2], ... output_axis = 1, grids = [15 15], ... ref_input = [], num_points = 101) ## If gensurf was called with an incorrect number of arguments, ## or the arguments do not have the correct type, print an error ## message and halt. if ((nargin < 1) || (nargin > 6)) error ("gensurf requires between 1 and 6 arguments\n"); elseif (!is_fis (fis)) error ("gensurf's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && !are_input_indices (input_axes, fis)) error ("gensurf's second argument must be valid input indices\n"); elseif ((nargin >= 3) && !is_output_index (output_axis, fis)) error ("gensurf's third argument must be a valid output index\n"); elseif ((nargin >= 4) && !is_grid_spec (grids)) error ("gensurf's 4th argument must be a grid specification\n"); elseif ((nargin >= 5) && !is_ref_input (ref_input, fis, input_axes)) error ("gensurf's 5th argument must be reference input values\n"); elseif ((nargin == 6) && ... !(is_pos_int (num_points) && (num_points >= 2))) error ("gensurf's sixth argument must be an integer >= 2\n"); endif if (length (input_axes) == 1 || columns (fis.input) == 1) generate_plot (fis, input_axes, output_axis, grids, ... ref_input, num_points); else generate_surface (fis, input_axes, output_axis, grids, ... ref_input, num_points); endif endfunction ##---------------------------------------------------------------------- ## Function: generate_plot ## Purpose: Generate a plot representing one of the FIS outputs as a ## function of one of the FIS inputs. ##---------------------------------------------------------------------- function [x, y, z] = generate_plot (fis, input_axis, output_axis, ... grids, ref_input, num_points) ## Create input to FIS using grid points and reference values. num_inputs = columns (fis.input); num_grid_pts = grids(1); fis_input = zeros (num_grid_pts, num_inputs); if (num_inputs == 1) input_axis = 1; endif for i = 1 : num_inputs if (i == input_axis) x_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... num_grid_pts))'; fis_input(:, i) = x_axis; else fis_input(:, i) = ref_input(i) * ones (num_grid_pts, 1); endif endfor ## Compute and plot the output. output = evalfis_private (fis_input, fis, num_points); figure ('NumberTitle', 'off', 'Name', fis.name); plot (x_axis, output, 'LineWidth', 2); xlabel (fis.input(input_axis).name, 'FontWeight', 'bold'); ylabel (fis.output(output_axis).name, 'FontWeight', 'bold'); grid; hold; endfunction ##---------------------------------------------------------------------- ## Function: generate_surface ## Purpose: Generate a surface representing one of the FIS outputs as ## a function of two of the FIS inputs. ##---------------------------------------------------------------------- function [x, y, z] = generate_surface (fis, input_axes, output_axis, ... grids, ref_input, num_points) ## Create input to FIS using grid points and reference values. num_inputs = columns (fis.input); if (length (grids) == 1) grids = [grids grids]; endif num_grid_pts = prod (grids); fis_input = zeros (num_grid_pts, num_inputs); for i = 1 : num_inputs if (i == input_axes(1)) x_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... grids(1)))'; elseif (i == input_axes(2)) y_axis = (linspace (fis.input(i).range(1), ... fis.input(i).range(2), ... grids(2)))'; else fis_input(:, i) = ref_input(i) * ones (num_grid_pts, 1); endif endfor [xx, yy] = meshgrid (x_axis, y_axis); fis_input(:, input_axes(1)) = xx(:); fis_input(:, input_axes(2)) = yy(:); ## Compute the output and reshape it to fit the grid. output = evalfis_private (fis_input, fis, num_points); z_matrix = reshape (output(:, output_axis), length (x_axis), ... length (y_axis)); ## Plot the surface. figure ('NumberTitle', 'off', 'Name', fis.name); surf (x_axis, y_axis, z_matrix); xlabel (fis.input(input_axes(1)).name); ylabel (fis.input(input_axes(2)).name); zlabel (fis.output(output_axis).name); endfunction %!shared fis %! fis = readfis ('cubic_approximator.fis'); ## Test input validation %!error %! gensurf() %!error %! gensurf(fis, 1, 1, 3, 0, 2, 0) %!error %! gensurf(1) %!error %! gensurf(fis, 2) %!error %! gensurf(fis, 1, 2) %!error %! gensurf(fis, 1, 1, 0) %!error %! gensurf(fis, 1, 1, 3, [0; 0]) fuzzy-logic-toolkit-0.6.0/inst/getfis.m000066400000000000000000000470531463010412100200770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} getfis (@var{fis}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{property}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{var_property}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}) ## @deftypefnx {Function File} {@var{retval} =} getfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}, @var{mf_property}) ## ## Return or print the property (field) values of an FIS structure ## specified by the arguments. There are six forms of getfis: ## ## @table @asis ## @item # Arguments ## Action Taken ## @item 1 ## Print (some) properties of an FIS structure on standard output. ## Return the empty set. ## @item 2 ## Return a specified property of the FIS structure. The properties ## that may be specified are: name, type, version, numinputs, numoutputs, ## numinputmfs, numoutputmfs, numrules, andmethod, ormethod, ## impmethod, addmethod, defuzzmethod, inlabels, outlabels, ## inrange, outrange, inmfs, outmfs, inmflabels, outmflabels, ## inmftypes, outmftypes, inmfparams, outmfparams, and rulelist. ## @item 3 ## Print the properties of a specified input or output variable ## of the FIS structure. Return the empty set. ## @item 4 ## Return a specified property of an input or output variable. ## The properties that may be specified are: name, range, nummfs, ## and mflabels. ## @item 5 ## Print the properties of a specified membership function of the ## FIS structure. Return the empty set. ## @item 6 ## Return a specified property of a membership function. The ## properties that may be specified are: name, type, and params. ## @end table ## ## The types of the arguments are expected to be: ## @table @var ## @item fis ## an FIS structure ## @item property ## a string; one of: 'name', 'type', 'version', 'numinputs', ## 'numoutputs', 'numinputmfs', 'numoutputmfs', ## 'numrules', 'andmethod', 'ormethod', 'impmethod', ## 'addmethod', 'defuzzmethod' 'inlabels', 'outlabels', ## 'inrange', 'outrange', 'inmfs', 'outmfs', ## 'inmflabels', 'outmflabels', 'inmftypes', ## 'outmftypes', 'inmfparams', 'outmfparams', and ## 'rulelist' (case-insensitive) ## @item in_or_out ## either 'input' or 'output' (case-insensitive) ## @item var_index ## a valid integer index of an input or output FIS variable ## @item var_property ## a string; one of: 'name', 'range', 'nummfs', and 'mflabels' ## @item mf ## the string 'mf' ## @item mf_index ## a valid integer index of a membership function ## @item mf_property ## a string; one of 'name', 'type', or 'params' ## @end table ## ## @noindent ## Note that all of the strings representing properties above are case ## insensitive. ## ## @seealso{setfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: getfis.m ## Last-Modified: 29 May 2024 ##---------------------------------------------------------------------- function retval = getfis (fis, arg2 = 'dummy', arg3 = 'dummy', ... arg4 = 'dummy', arg5 = 'dummy', ... arg6 = 'dummy') switch (nargin) case 1 retval = getfis_one_arg (fis); case 2 retval = getfis_two_args (fis, arg2); case 3 retval = getfis_three_args (fis, arg2, arg3); case 4 retval = getfis_four_args (fis, arg2, arg3, arg4); case 5 retval = getfis_five_args (fis, arg2, arg3, arg4, arg5); case 6 retval = getfis_six_args (fis, arg2, arg3, arg4, arg5, ... arg6); otherwise error ("getfis requires 1-6 arguments\n"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: getfis_one_arg ## Purpose: Handle calls to getfis that have 1 argument. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_one_arg (fis) ## If the argument does not have the correct type, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); endif ## Print (some) properties of the FIS structure. Return the empty set. printf ("Name = %s\n", fis.name); printf ("Type = %s\n", fis.type); printf ("NumInputs = %d\n", columns(fis.input)); printf ("InLabels = \n"); for i = 1 : columns (fis.input) printf ("\t%s\n", fis.input(i).name); endfor printf ("NumOutputs = %d\n", columns(fis.output)); printf ("OutLabels = \n"); for i = 1 : columns (fis.output) printf ("\t%s\n", fis.output(i).name); endfor printf ("NumRules = %d\n", columns(fis.rule)); printf ("AndMethod = %s\n", fis.andMethod); printf ("OrMethod = %s\n", fis.orMethod); printf ("ImpMethod = %s\n", fis.impMethod); printf ("AggMethod = %s\n", fis.aggMethod); printf ("DefuzzMethod = %s\n", fis.defuzzMethod); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_two_args ## Purpose: Handle calls to getfis that have 2 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_two_args (fis, arg2) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ismember (tolower (arg2), {'name', ... 'type', 'version', 'numinputs', 'numoutputs', ... 'numinputmfs', 'numoutputmfs', 'numrules', 'andmethod', ... 'ormethod', 'impmethod', 'aggmethod', 'defuzzmethod', ... 'inlabels', 'outlabels', 'inrange', 'outrange', 'inmfs', ... 'outmfs', 'inmflabels', 'outmflabels', 'inmftypes', ... 'outmftypes', 'inmfparams', 'outmfparams', 'rulelist'}))) error ("unknown second argument to getfis\n"); endif ## Return the specified property of the FIS structure. switch (tolower (arg2)) case 'name' retval = fis.name; case 'type' retval = fis.type; case 'version' retval = fis.version; case 'numinputs' retval = columns (fis.input); case 'numoutputs' retval = columns (fis.output); case 'numrules' retval = columns(fis.rule); case 'andmethod' retval = fis.andMethod; case 'ormethod' retval = fis.orMethod; case 'impmethod' retval = fis.impMethod; case 'aggmethod' retval = fis.aggMethod; case 'defuzzmethod' retval = fis.defuzzMethod; case 'numinputmfs' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = columns(fis.input(i).mf); else retval = [retval columns(fis.input(i).mf)]; endif endfor case 'numoutputmfs' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = columns(fis.output(i).mf); else retval = [retval columns(fis.output(i).mf)]; endif endfor case 'inlabels' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = fis.input(i).name; else retval = [retval; fis.input(i).name]; endif endfor case 'outlabels' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = fis.output(i).name; else retval = [retval; fis.output(i).name]; endif endfor case 'inrange' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = fis.input(i).range; else retval = [retval; fis.input(i).range]; endif endfor case 'outrange' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = fis.output(i).range; else retval = [retval; fis.output(i).range]; endif endfor case 'inmfs' retval = []; for i = 1 : columns (fis.input) if (i == 1) retval = columns(fis.input(i).mf); else retval = [retval columns(fis.input(i).mf)]; endif endfor case 'outmfs' retval = []; for i = 1 : columns (fis.output) if (i == 1) retval = columns(fis.output(i).mf); else retval = [retval columns(fis.output(i).mf)]; endif endfor case 'inmflabels' retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) if (i == 1 && y == 1) retval = fis.input(i).mf(j).name; else retval = [retval; fis.input(i).mf(j).name]; endif endfor endfor case 'outmflabels' retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) if (i == 1 && y == 1) retval = fis.output(i).mf(j).name; else retval = [retval; fis.output(i).mf(j).name]; endif endfor endfor case 'inmftypes' retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) if (i == 1 && y == 1) retval = fis.input(i).mf(j).type; else retval = [retval; fis.input(i).mf(j).type]; endif endfor endfor case 'outmftypes' retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) if (i == 1 && y == 1) retval = fis.output(i).mf(j).type; else retval = [retval; fis.output(i).mf(j).type]; endif endfor endfor case 'inmfparams' ## Determine the dimensions of the matrix to return. max_len = 0; num_inputs = columns (fis.input); num_mfs = 0; for i = 1 : num_inputs num_var_i_mfs = columns (fis.input(i).mf); num_mfs += num_var_i_mfs; for j = 1 : num_var_i_mfs max_len = max (max_len, length (fis.input(i).mf(j).params)); endfor endfor ## Assemble the matrix of params to return. Pad with zeros. retval = zeros (num_mfs, max_len); for i = 1 : num_inputs for j = 1 : columns (fis.input(i).mf) next_row_index = (i - 1) * max_len + j; next_row = fis.input(i).mf(j).params; retval(next_row_index, 1 : length (next_row)) = next_row; endfor endfor case 'outmfparams' ## Determine the dimensions of the matrix to return. max_len = 0; num_outputs = columns (fis.output); num_mfs = 0; for i = 1 : num_outputs num_var_i_mfs = columns (fis.output(i).mf); num_mfs += num_var_i_mfs; for j = 1 : num_var_i_mfs max_len = max (max_len, length (fis.output(i).mf(j).params)); endfor endfor ## Assemble the matrix of params to return. Pad with zeros. retval = zeros (num_mfs, max_len); for i = 1 : num_outputs for j = 1 : columns (fis.output(i).mf) next_row_index = (i - 1) * max_len + j; next_row = fis.output(i).mf(j).params; retval(next_row_index, 1 : length (next_row)) = next_row; endfor endfor case 'rulelist' ## Determine the dimensions of the matrix to return. num_inputs = columns (fis.input); num_outputs = columns (fis.output); num_rules = columns (fis.rule); ## Assemble the matrix of rules to return. retval = zeros (num_rules, num_inputs + num_outputs + 2); for i = 1 : num_rules retval(i, 1:num_inputs) = fis.rule(i).antecedent; retval(i, num_inputs+1:num_inputs+num_outputs) = ... fis.rule(i).consequent; retval(i, num_inputs+num_outputs+1) = fis.rule(i).weight; retval(i, num_inputs+num_outputs+2) = fis.rule(i).connection; endfor otherwise error ("internal error in getfis_two_args"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: getfis_three_args ## Purpose: Handle calls to getfis that have 3 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_three_args (fis, arg2, arg3) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); endif ## Print the properties of a specified input or output variable of the ## FIS structure. Return the empty set. var_str = ["fis." tolower(arg2) "(" num2str(arg3) ")"]; var_mf_str = [var_str ".mf"]; num_mfs = columns (eval (var_mf_str)); printf ("Name = %s\n", eval ([var_str ".name"])); printf ("NumMFs = %d\n", num_mfs); printf ("MFLabels = \n"); for i = 1 : num_mfs printf ("\t%s\n", eval ([var_mf_str "(" num2str(i) ").name"])); endfor printf ("Range = %s\n", mat2str (eval ([var_str ".range"]))); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_four_args ## Purpose: Handle calls to getfis that have 4 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_four_args (fis, arg2, arg3, arg4) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string (arg4) && ismember (tolower (arg4), ... {'name', 'range', 'nummfs', 'mflabels'}))) error ("incorrect fourth argument to getfis\n"); endif ## Return the specified property of the FIS input or output variable. arg2 = tolower (arg2); arg4 = tolower (arg4); if (ismember (arg4, {'name', 'range'})) retval = eval (["fis." arg2 "(" num2str(arg3) ")." arg4]); elseif (strcmp (arg4, 'nummfs')) retval = columns (eval (["fis." arg2 "(" num2str(arg3) ").mf"])); elseif (strcmp (arg2, 'input') && strcmp (arg4, 'mflabels')) retval = []; for i = 1 : columns (fis.input) for j = 1 : columns (fis.input(i).mf) retval = [retval; fis.input(i).mf(j).name]; endfor endfor elseif (strcmp (arg2, 'output') && strcmp (arg4, 'mflabels')) retval = []; for i = 1 : columns (fis.output) for j = 1 : columns (fis.output(i).mf) retval = [retval; fis.output(i).mf(j).name]; endfor endfor endif endfunction ##---------------------------------------------------------------------- ## Function: getfis_five_args ## Purpose: Handle calls to getfis that have 5 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_five_args (fis, arg2, arg3, arg4, arg5) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string(arg2) && ... ismember(tolower(arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index(fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string(arg4) && isequal(tolower(arg4), 'mf'))) error ("incorrect fourth argument to getfis\n"); elseif (!is_mf_index(fis, arg2, arg3, arg5)) error ("incorrect fifth argument to getfis\n"); endif ## Print the properties of a specified membership function of the ## FIS structure. Return the empty set. var_mf_str = ["fis." tolower(arg2) "(" num2str(arg3) ").mf(" ... num2str(arg5) ")"]; printf ("Name = %s\n", eval ([var_mf_str ".name"])); printf ("Type = %s\n", eval ([var_mf_str ".type"])); printf ("Params = "); disp (eval ([var_mf_str ".params"])); retval = []; endfunction ##---------------------------------------------------------------------- ## Function: getfis_six_args ## Purpose: Handle calls to getfis that have 6 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function retval = getfis_six_args (fis, arg2, arg3, arg4, arg5, arg6) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("the first argument to getfis must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("incorrect second argument to getfis\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("incorrect third argument to getfis\n"); elseif (!(is_string (arg4) && isequal (tolower (arg4), 'mf'))) error ("incorrect fourth argument to getfis\n"); elseif (!is_mf_index (fis, arg2, arg3, arg5)) error ("incorrect fifth argument to getfis\n"); elseif (!(is_string (arg6) && ismember (tolower (arg6), ... {'name', 'type', 'params'}))) error ("incorrect sixth argument to getfis\n"); endif ## Return the specified membership function property. retval = eval (["fis." tolower(arg2) "(" num2str(arg3) ").mf(" ... num2str(arg5) ")." tolower(arg6)]); endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); ## Test input validation %!error %! getfis() %!error %! getfis(1, 2, 3, 4, 5, 6, 7) %!error %! getfis(1, 2, 3, 4, 5, 6) %!error %! getfis(fis, 2, 3, 4, 5, 6) %!error %! getfis(fis, 'input', 3, 4, 5, 6) %!error %! getfis(fis, 'input', 1, 4, 5, 6) %!error %! getfis(fis, 'input', 1, 'mf', 5, 6) %!error %! getfis(fis, 'input', 1, 'mf', 1, 6) fuzzy-logic-toolkit-0.6.0/inst/gustafson_kessel.m000066400000000000000000000423131463010412100221670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, @var{options}) ## @deftypefnx {Function File} {@var{cluster_centers} =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, @var{options}) ## @deftypefnx {Function File} {[@var{cluster_centers}, @var{soft_partition}, @var{obj_fcn_history}] =} gustafson_kessel (@var{input_data}, @var{num_clusters}, @var{cluster_volume}, [@var{m}, @var{max_iterations}, @var{epsilon}, @var{display_intermediate_results}]) ## ## Using the Gustafson-Kessel algorithm, calculate and return the soft partition ## of a set of unlabeled data points. ## ## Also, if @var{display_intermediate_results} is true, display intermediate ## results after each iteration. Note that because the initial cluster ## prototypes are randomly selected locations in the ranges determined by the ## input data, the results of this function are nondeterministic. ## ## The required arguments to gustafson_kessel are: ## @itemize @w ## @item ## @var{input_data} - a matrix of input data points; each row corresponds to one point ## @item ## @var{num_clusters} - the number of clusters to form ## @end itemize ## ## The third (optional) argument to gustafson_kessel is a vector of cluster volumes. ## If omitted, a vector of 1's will be used as the default. ## ## The fourth (optional) argument to gustafson_kessel is a vector consisting of: ## @itemize @w ## @item ## @var{m} - the parameter (exponent) in the objective function; default = 2.0 ## @item ## @var{max_iterations} - the maximum number of iterations before stopping; default = 100 ## @item ## @var{epsilon} - the stopping criteria; default = 1e-5 ## @item ## @var{display_intermediate_results} - if 1, display results after each iteration, and if 0, do not; default = 1 ## @end itemize ## ## The default values are used if any of the four elements of the vector are missing or ## evaluate to NaN. ## ## The return values are: ## @itemize @w ## @item ## @var{cluster_centers} - a matrix of the cluster centers; each row corresponds to one point ## @item ## @var{soft_partition} - a constrained soft partition matrix ## @item ## @var{obj_fcn_history} - the values of the objective function after each iteration ## @end itemize ## ## Three important matrices used in the calculation are X (the input points ## to be clustered), V (the cluster centers), and Mu (the membership of each ## data point in each cluster). Each row of X and V denotes a single point, ## and Mu(i, j) denotes the membership degree of input point X(j, :) in the ## cluster having center V(i, :). ## ## X is identical to the required argument @var{input_data}; V is identical ## to the output @var{cluster_centers}; and Mu is identical to the output ## @var{soft_partition}. ## ## If n denotes the number of input points and k denotes the number of ## clusters to be formed, then X, V, and Mu have the dimensions: ## ## @example ## @group ## 1 2 ... #features ## 1 [ ] ## X = input_data = 2 [ ] ## ... [ ] ## n [ ] ## @end group ## @end example ## ## @example ## @group ## 1 2 ... #features ## 1 [ ] ## V = cluster_centers = 2 [ ] ## ... [ ] ## k [ ] ## @end group ## @end example ## ## @example ## @group ## 1 2 ... n ## 1 [ ] ## Mu = soft_partition = 2 [ ] ## ... [ ] ## k [ ] ## @end group ## @end example ## ## @seealso{fcm, partition_coeff, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: gustafson_kessel.m ## Last-Modified: 29 May 2024 function [cluster_centers, soft_partition, obj_fcn_history] = ... gustafson_kessel (input_data, num_clusters, ... cluster_volume = [], options = [2.0, 100, 1e-5, 1]) ## If gustafson_kessel was called with an incorrect number of ## arguments, or the arguments do not have the correct type, print ## an error message and halt. if ((nargin < 2) || (nargin > 4)) error ("gustafson_kessel requires 2, 3, or 4 arguments\n"); elseif (!is_real_matrix (input_data)) error ("gustafson_kessel's 1st argument must be matrix of reals\n"); elseif (!(is_int (num_clusters) && (num_clusters > 1))) error ("gustafson_kessel's 2nd argument must be an int greater than 1\n"); elseif (!(isequal (cluster_volume, []) || ... (isreal (cluster_volume) && isvector (cluster_volume)))) error ("gustafson_kessel's 3rd arg must be a vector of reals\n"); elseif (!(isreal (options) && isvector (options))) error ("gustafson_kessel's 4th arg must be a vector of reals\n"); endif ## If the cluster volume matrix was not entered, create a default ## value (a vector of 1's). if (isequal (cluster_volume, [])) cluster_volume = ones (1, num_clusters); endif ## Assign options to the more readable variable names: m, ## max_iterations, epsilon, and display_intermediate_results. ## If options are missing or NaN (not a number), use the default ## values. default_options = [2.0, 100, 1e-5, 1]; for i = 1 : 4 if ((length (options) < i) || ... isna (options(i)) || isnan (options(i))) options(i) = default_options(i); endif endfor m = options(1); max_iterations = options(2); epsilon = options(3); display_intermediate_results = options(4); ## Call a private function to compute the output. [cluster_centers, soft_partition, obj_fcn_history] = ... gustafson_kessel_private (input_data, num_clusters, ... cluster_volume, m, max_iterations, ... epsilon, display_intermediate_results); endfunction ##---------------------------------------------------------------------- ## Function: gustafson_kessel_private ## Purpose: Classify unlabeled data points using the Gustafson-Kessel ## algorithm. ## Note: This function (gustafson_kessel_private) is an ## implementation of Algorithm 4.2 in Fuzzy and Neural ## Control, by Robert Babuska, November 2009, p. 69. ##---------------------------------------------------------------------- function [V, Mu, obj_fcn_history] = ... gustafson_kessel_private (X, k, cluster_volume, m, max_iterations, ... epsilon, display_intermediate_results) ## Initialize the prototypes and the calculation. V = init_cluster_prototypes (X, k); obj_fcn_history = zeros (max_iterations); convergence_criterion = epsilon + 1; iteration = 0; ## Calculate a few numbers here to reduce redundant computation. k = rows (V); n = rows (X); sqr_dist = square_distance_matrix (X, V); ## Loop until the objective function is within tolerance or the ## maximum number of iterations has been reached. while (convergence_criterion > epsilon && ... ++iteration <= max_iterations) V_previous = V; Mu = update_cluster_membership (V, X, m, k, n, sqr_dist); Mu_m = Mu .^ m; V = update_cluster_prototypes (Mu_m, X, k); sqr_dist = gk_square_distance_matrix (X, V, Mu_m, cluster_volume); obj_fcn_history(iteration) = ... compute_cluster_obj_fcn (Mu_m, sqr_dist); if (display_intermediate_results) printf ("Iteration count = %d, Objective fcn = %8.6f\n", ... iteration, obj_fcn_history(iteration)); endif convergence_criterion = ... compute_cluster_convergence (V, V_previous); endwhile ## Remove extraneous entries from the tail of the objective ... ## function history. if (convergence_criterion <= epsilon) obj_fcn_history = obj_fcn_history(1 : iteration); endif endfunction ##---------------------------------------------------------------------- ## Function: gk_square_distance_matrix ##---------------------------------------------------------------------- function sqr_dist = gk_square_distance_matrix (X, V, Mu_m, ... cluster_volume) k = rows (V); n = rows (X); num_features = columns (X); sqr_dist = zeros (k, n); for i = 1 : k Vi = V(i, :); covariance_matrix = compute_covariance_matrix (X, V, Mu_m, i); for j = 1 : n Vi_to_Xj = X(j, :) - Vi; A = cluster_volume(i) * ... det (covariance_matrix) ^ (1.0 / num_features) * ... inv (covariance_matrix); sqr_dist(i, j) = sum (Vi_to_Xj .* (A * Vi_to_Xj')'); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: compute_covariance_matrix ##---------------------------------------------------------------------- function covariance_matrix = compute_covariance_matrix (X, V, Mu_m, i) num_features = columns (V); n = rows (X); num = zeros (num_features); denom = 0.0; Vi = V(i, :); for j = 1 : n Vi_to_Xj = X(j, :) - Vi; num += Mu_m(i, j) * Vi_to_Xj' * Vi_to_Xj; denom += Mu_m(i, j); endfor covariance_matrix = num / denom; endfunction ##---------------------------------------------------------------------- ## Gustafson-Kessel Demo #1 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies a small set of unlabeled data points using %! ## the Gustafson-Kessel algorithm into two fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data is taken from Chapter 13, Example 17 in %! ## Fuzzy Logic: Intelligence, Control and Information, by %! ## J. Yen and R. Langari, Prentice Hall, 1999, page 381 %! ## (International Edition). %! %! ## Use gustafson_kessel to classify the input_data. %! input_data = [2 12; 4 9; 7 13; 11 5; 12 7; 14 4]; %! number_of_clusters = 2; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! gustafson_kessel (input_data, number_of_clusters) %! %! ## Plot the data points as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 1'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ##---------------------------------------------------------------------- ## Gustafson-Kessel Demo #2 ##---------------------------------------------------------------------- %!demo %! ## This demo: %! ## - classifies three-dimensional unlabeled data points using %! ## the Gustafson-Kessel algorithm into three fuzzy clusters %! ## - plots the input points together with the cluster centers %! ## - evaluates the quality of the resulting clusters using %! ## three validity measures: the partition coefficient, the %! ## partition entropy, and the Xie-Beni validity index %! ## %! ## Note: The input_data was selected to form three areas of %! ## different shapes. %! %! ## Use gustafson_kessel to classify the input_data. %! input_data = [1 11 5; 1 12 6; 1 13 5; 2 11 7; 2 12 6; 2 13 7; %! 3 11 6; 3 12 5; 3 13 7; 1 1 10; 1 3 9; 2 2 11; %! 3 1 9; 3 3 10; 3 5 11; 4 4 9; 4 6 8; 5 5 8; 5 7 9; %! 6 6 10; 9 10 12; 9 12 13; 9 13 14; 10 9 13; 10 13 12; %! 11 10 14; 11 12 13; 12 6 12; 12 7 15; 12 9 15; %! 14 6 14; 14 8 13]; %! number_of_clusters = 3; %! [cluster_centers, soft_partition, obj_fcn_history] = ... %! gustafson_kessel (input_data, number_of_clusters, [1 1 1], ... %! [NaN NaN NaN 0]) %! %! ## Plot the data points in two dimensions (using features 1 & 2) %! ## as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 2), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 2) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 2), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 2'); %! grid %! %! ## Plot the data points in two dimensions %! ## (using features 1 & 3) as small blue x's. %! figure ('NumberTitle', 'off', 'Name', 'Gustafson-Kessel Demo 2'); %! for i = 1 : rows (input_data) %! plot (input_data(i, 1), input_data(i, 3), 'LineWidth', 2, ... %! 'marker', 'x', 'color', 'b'); %! hold on; %! endfor %! %! ## Plot the cluster centers in two dimensions %! ## (using features 1 & 3) as larger red *'s. %! for i = 1 : number_of_clusters %! plot (cluster_centers(i, 1), cluster_centers(i, 3), ... %! 'LineWidth', 4, 'marker', '*', 'color', 'r'); %! hold on; %! endfor %! %! ## Make the figure look a little better: %! ## - scale and label the axes %! ## - show gridlines %! xlim ([0 15]); %! ylim ([0 15]); %! xlabel ('Feature 1'); %! ylabel ('Feature 3'); %! grid %! hold %! %! ## Calculate and print the three validity measures. %! printf ("Partition Coefficient: %f\n", ... %! partition_coeff (soft_partition)); %! printf ("Partition Entropy (with a = 2): %f\n", ... %! partition_entropy (soft_partition, 2)); %! printf ("Xie-Beni Index: %f\n\n", ... %! xie_beni_index (input_data, cluster_centers, ... %! soft_partition)); ## Test input validation %!error %! gustafson_kessel() %!error %! gustafson_kessel(1) %!error %! gustafson_kessel(1, 2, 3, 4, 5) %!error %! gustafson_kessel('input', 2) %!error %! gustafson_kessel(1, 0) %!error %! gustafson_kessel(1, 2, 3j) %!error %! gustafson_kessel(1, 2, 3, 4j) fuzzy-logic-toolkit-0.6.0/inst/hamacher_product.m000066400000000000000000000102011463010412100221070ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} hamacher_product (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} hamacher_product (@var{x}, @var{y}) ## ## Return the Hamacher product of the input. ## The Hamacher product of two real scalars x and y is: ## (x * y) / (x + y - x * y) ## ## For one vector argument, apply the Hamacher product to all of the elements ## of the vector. (The Hamacher product is associative.) For one ## two-dimensional matrix argument, return a vector of the Hamacher product ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise Hamacher product. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_sum} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy hamacher_product ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: hamacher_product.m ## Last-Modified: 29 May 2024 function retval = hamacher_product (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function hamacher_product\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function hamacher_product\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function hamacher_product\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x * y) / (x + y - x * y); endfunction function retval = vector_arg (real_vector) x = 1; for i = 1 : length (real_vector) y = real_vector(i); if (x == 0 && y == 0) x = 0; else x = (x * y) / (x + y - x * y); endif endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = hamacher_product(x); %! assert(z, -2.1429, 1e-4); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = hamacher_product(x, y); %! assert(z, [-0.5556 2.0000 -6.0000 -2.0000], 1e-4); ## Test input validation %!error %! hamacher_product() %!error %! hamacher_product(2j) %!error %! hamacher_product(1, 2j) %!error %! hamacher_product([1 2j]) %!error %! hamacher_product(1, 2, 3) %!error %! hamacher_product([1 2], [1 2 3]) %!error %! hamacher_product([1 2], [1 2; 3 4]) %!error %! hamacher_product(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/hamacher_sum.m000066400000000000000000000100311463010412100212340ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{retval} =} hamacher_sum (@var{x}) ## @deftypefnx {Function File} {@var{retval} =} hamacher_sum (@var{x}, @var{y}) ## ## Return the Hamacher sum of the input. ## The Hamacher sum of two real scalars x and y is: ## (x + y - 2 * x * y) / (1 - x * y) ## ## For one vector argument, apply the Hamacher sum to all of the elements ## of the vector. (The Hamacher sum is associative.) For one ## two-dimensional matrix argument, return a vector of the Hamacher sum ## of each column. ## ## For two vectors or matrices of identical dimensions, or for one scalar and ## one vector or matrix argument, return the pair-wise Hamacher sum. ## ## @seealso{algebraic_product, algebraic_sum, bounded_difference, bounded_sum, drastic_product, drastic_sum, einstein_product, einstein_sum, hamacher_product} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy hamacher_sum ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: hamacher_sum.m ## Last-Modified: 29 May 2024 function retval = hamacher_sum (x, y = 0) if (nargin == 0 || nargin > 2 || !is_real_matrix (x) || !is_real_matrix (y)) error ("invalid arguments to function hamacher_sum\n"); elseif (nargin == 1) if (isvector (x)) retval = vector_arg (x); elseif (ndims (x) == 2) retval = matrix_arg (x); else error ("invalid arguments to function hamacher_sum\n"); endif elseif (nargin == 2) if (isequal (size (x), size (y))) retval = arrayfun (@scalar_args, x, y); elseif (isscalar (x) && ismatrix (y)) x = x * ones (size (y)); retval = arrayfun (@scalar_args, x, y); elseif (ismatrix (x) && isscalar (y)) y = y * ones (size (x)); retval = arrayfun (@scalar_args, x, y); else error ("invalid arguments to function hamacher_sum\n"); endif endif endfunction function retval = scalar_args (x, y) retval = (x + y - 2 * x * y) / (1 - x * y); endfunction function retval = vector_arg (real_vector) x = 0; for i = 1 : length (real_vector) y = real_vector(i); if (x == 1 && y == 1) x = 1; else x = (x + y - 2 * x * y) / (1 - x * y); endif endfor retval = x; endfunction function retval = matrix_arg (x) num_cols = columns (x); retval = zeros (1, num_cols); for i = 1 : num_cols retval(i) = vector_arg (x(:, i)); endfor endfunction %!test %! x = [5 3]; %! z = hamacher_sum(x); %! assert(z, 1.5714, 1e-4); %!test %! x = [5 2 3 6]; %! y = [-1 1 2 3]; %! z = hamacher_sum(x, y); %! assert(z, [2.3333 1.0000 1.4000 1.5882], 1e-4); ## Test input validation %!error %! hamacher_sum() %!error %! hamacher_sum(2j) %!error %! hamacher_sum(1, 2j) %!error %! hamacher_sum([1 2j]) %!error %! hamacher_sum(1, 2, 3) %!error %! hamacher_sum([1 2], [1 2 3]) %!error %! hamacher_sum([1 2], [1 2; 3 4]) %!error %! hamacher_sum(0:100, []) fuzzy-logic-toolkit-0.6.0/inst/heart_disease_demo_1.m000066400000000000000000000121171463010412100226330ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} heart_disease_demo_1 ## ## Demonstrate the use of newfis, addvar, addmf, and addrule ## to build and evaluate an FIS. Also demonstrate the use of the algebraic ## product and sum as the T-norm/S-norm pair, and demonstrate the use of ## hedges in the FIS rules. ## ## The demo: ## @itemize @bullet ## @item ## builds an FIS ## @item ## plots the input membership functions ## @item ## plots the constant output functions ## @item ## displays the FIS rules in verbose format in the Octave window ## @item ## plots the FIS output as a function of the inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: heart_disease_demo_1.m ## Last-Modified: 4 Jun 2024 ## Create new FIS. a = newfis ('Heart-Disease-Risk', 'sugeno', ... 'algebraic_product', 'algebraic_sum', ... 'min', 'max', 'wtaver'); ## Add two inputs and their membership functions. a = addvar (a, 'input', 'LDL-Level', [0 300]); a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 130]); a = addmf (a, 'input', 1, 'Moderate', 'trapmf', [90 130 160 200]); a = addmf (a, 'input', 1, 'High', 'trapmf', [160 200 300 301]); a = addvar (a, 'input', 'HDL-Level', [0 100]); a = addmf (a, 'input', 2, 'Low', 'trapmf', [-1 0 35 45]); a = addmf (a, 'input', 2, 'Moderate', 'trapmf', [35 45 55 65]); a = addmf (a, 'input', 2, 'High', 'trapmf', [55 65 100 101]); ## Add one output and its membership functions. a = addvar (a, 'output', 'Heart-Disease-Risk', [-2 12]); a = addmf (a, 'output', 1, 'Negligible', 'constant', 0); a = addmf (a, 'output', 1, 'Low', 'constant', 2.5); a = addmf (a, 'output', 1, 'Medium', 'constant', 5); a = addmf (a, 'output', 1, 'High', 'constant', 7.5); a = addmf (a, 'output', 1, 'Extreme', 'constant', 10); ## Plot the input and output membership functions. plotmf (a, 'input', 1); plotmf (a, 'input', 2); plotmf (a, 'output', 1); ## Add 15 rules and display them in verbose format. a = addrule (a, [1 1 3 1 1; 1 2 2 1 1; 1 3 1 1 1; ... 2 1 4 1 1; 2 2 3 1 1; 2 3 2 1 1; ... 3 1 5 1 1; 3 2 4 1 1; 3 3 3 1 1; ... 1.3 3.3 2 1 2; ... 3.05 1.05 4 1 2; ... -3.2 -1.2 3 1 1]); puts ("\nOutput of showrule(a):\n\n"); showrule (a); ## Plot the output as a function of the two inputs. gensurf (a); %!test %! a = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'algebraic_product', 'algebraic_sum', ... %! 'min', 'max', 'wtaver'); %! %! ## Add two inputs and their membership functions. %! a = addvar (a, 'input', 'LDL-Level', [0 300]); %! a = addmf (a, 'input', 1, 'Low', 'trapmf', [-1 0 90 130]); %! a = addmf (a, 'input', 1, 'Moderate', 'trapmf', [90 130 160 200]); %! a = addmf (a, 'input', 1, 'High', 'trapmf', [160 200 300 301]); %! %! a = addvar (a, 'input', 'HDL-Level', [0 100]); %! a = addmf (a, 'input', 2, 'Low', 'trapmf', [-1 0 35 45]); %! a = addmf (a, 'input', 2, 'Moderate', 'trapmf', [35 45 55 65]); %! a = addmf (a, 'input', 2, 'High', 'trapmf', [55 65 100 101]); %! %! ## Add one output and its membership functions. %! a = addvar (a, 'output', 'Heart-Disease-Risk', [-2 12]); %! a = addmf (a, 'output', 1, 'Negligible', 'constant', 0); %! a = addmf (a, 'output', 1, 'Low', 'constant', 2.5); %! a = addmf (a, 'output', 1, 'Medium', 'constant', 5); %! a = addmf (a, 'output', 1, 'High', 'constant', 7.5); %! a = addmf (a, 'output', 1, 'Extreme', 'constant', 10); %! %! ## Add 15 rules and display them in verbose format. %! a = addrule (a, [1 1 3 1 1; 1 2 2 1 1; 1 3 1 1 1; ... %! 2 1 4 1 1; 2 2 3 1 1; 2 3 2 1 1; ... %! 3 1 5 1 1; 3 2 4 1 1; 3 3 3 1 1; ... %! 1.3 3.3 2 1 2; ... %! 3.05 1.05 4 1 2; ... %! -3.2 -1.2 3 1 1]); %! %! ldl_hdl = [129 59; 130 60; 90 65; 205 40]; %! heart_disease_risk = evalfis (ldl_hdl, a, 1001); %! assert(heart_disease_risk, [4.2679; 4.1667; 2.5000; 8.3333], 1e-4); fuzzy-logic-toolkit-0.6.0/inst/heart_disease_demo_2.m000066400000000000000000000052741463010412100226420ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} heart_disease_demo_2 ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a ## Sugeno-type FIS stored in a file. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (constant) output functions ## @item ## plots the FIS output as a function of the inputs ## @item ## evaluates the Sugeno-type FIS for four inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: heart_disease_demo_2.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. ## (Alternatively, to select heart_disease_risk.fis using the dialog, ## replace the following line with ## fis = readfis (); fis = readfis('heart_disease_risk.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); ## Plot the Heart Disease Risk as a function of LDL-Level and HDL-Level. gensurf (fis); ## Calculate the Heart Disease Risk for 4 sets of LDL-HDL values: puts ("\nFor the following four sets of LDL-HDL values:\n\n"); ldl_hdl = [129 59; 130 60; 90 65; 205 40] puts ("\nThe Heart Disease Risk is:\n\n"); heart_disease_risk = evalfis (ldl_hdl, fis, 1001) %!test %! fis = readfis ('heart_disease_risk.fis'); %! ldl_hdl = [129 59; 130 60; 90 65; 205 40]; %! heart_disease_risk = evalfis (ldl_hdl, fis, 1001); %! assert(heart_disease_risk, [3.6250; 3.7500; 0; 8.7500], 1e-4); fuzzy-logic-toolkit-0.6.0/inst/heart_disease_risk.fis000066400000000000000000000045061463010412100227670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: heart_disease_risk.fis ## Last-Modified: 28 Aug 2012 ## Heart Disease Risk FIS [System] Name = 'Heart-Disease-Risk' Type = 'sugeno' Version = 2.0 NumInputs = 2 NumOutputs = 1 NumRules = 15 AndMethod = 'min' OrMethod = 'max' ImpMethod = 'min' AggMethod = 'max' DefuzzMethod = 'wtaver' [Input1] Name = 'LDL-Level' Range = [0 300] NumMFs = 5 MF1 = 'Low' : 'trapmf', [-1 0 90 110] MF2 = 'Low-Borderline' : 'trapmf', [90 110 120 140] MF3 = 'Borderline' : 'trapmf', [120 140 150 170] MF4 = 'High-Borderline' : 'trapmf', [150 170 180 200] MF5 = 'High' : 'trapmf', [180 200 300 301] [Input2] Name = 'HDL-Level' Range = [0 100] NumMFs = 3 MF1 = 'Low-HDL' : 'trapmf', [-1 0 35 45] MF2 = 'Moderate-HDL' : 'trapmf', [35 45 55 65] MF3 = 'High-HDL' : 'trapmf', [55 65 100 101] [Output1] Name = 'Heart-Disease-Risk' Range = [0 10] NumMFs = 5 MF1 = 'No-Risk' : 'constant', [0] MF2 = 'Low-Risk' : 'constant', [2.5] MF3 = 'Medium-Risk' : 'constant', [5] MF4 = 'High-Risk' : 'constant', [7.5] MF5 = 'Extreme-Risk' : 'constant', [10] [Rules] 1 1, 3 (1) : 1 1 2, 2 (1) : 1 1 3, 1 (1) : 1 2 1, 3 (1) : 1 2 2, 2 (1) : 1 2 3, 2 (1) : 1 3 1, 4 (1) : 1 3 2, 3 (1) : 1 3 3, 2 (1) : 1 4 1, 4 (1) : 1 4 2, 4 (1) : 1 4 3, 3 (1) : 1 5 1, 5 (1) : 1 5 2, 4 (1) : 1 5 3, 3 (1) : 1 fuzzy-logic-toolkit-0.6.0/inst/investment_portfolio.fis000066400000000000000000000032571463010412100234320ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: investment_portfolio.fis ## Last-Modified: 28 Aug 2012 [System] Name='Investment-Portfolio' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=1 NumRules=4 AndMethod='einstein_product' OrMethod='einstein_sum' ImpMethod='einstein_product' AggMethod='einstein_sum' DefuzzMethod='centroid' [Input1] Name='Age' Range=[20 100] NumMFs=2 MF1='Young':'zmf',[30 90] MF2='Old':'smf',[30 90] [Input2] Name='Risk-Tolerance' Range=[0 10] NumMFs=2 MF1='Low':'zmf',[2 8] MF2='High':'smf',[2 8] [Output1] Name='Percentage-In-Stocks' Range=[0 100] NumMFs=3 MF1='About-Fifteen':'gaussmf',[10 15] MF2='About-Fifty':'gaussmf',[10 50] MF3='About-Eighty-Five':'gaussmf',[10 85] [Rules] 1 2, 3 (1) : 2 2 1, 1 (1) : 2 -2.3 -1.3, 2 (0.5) : 1 -1.3 -2.3, 2 (0.5) : 1 fuzzy-logic-toolkit-0.6.0/inst/investment_portfolio_demo.m000066400000000000000000000075401463010412100241100ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} investment_portfolio_demo ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate ## a Mamdani-type FIS stored in a file. Also demonstrate the use of hedges and ## weights in the FIS rules, the use of the Einstein product and sum as the ## T-norm/S-norm pair, and the non-standard use of the Einstein sum as the ## aggregation method. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input and output membership functions ## @item ## plots the FIS output as a function of the inputs ## @item ## plots the output of the 4 individual rules for (Age, Risk-Tolerance) = (40, 7) ## @item ## plots the aggregated fuzzy output and the crisp output for ## (Age, Risk-Tolerance) = (40, 7) ## @item ## shows the rules in verbose format in the Octave window ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, linear_tip_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Directory: fuzzy-logic-toolkit/inst ## Filename: investment_portfolio_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('investment_portfolio.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); ## Plot the Percentage-In-Stocks a function of Age and Risk-Tolerance. gensurf (fis, [1 2], 1); ## Calculate the Percentage-In-Stocks using ## (Age, Risk-Tolerance) = (40, 7). [output, rule_input, rule_output, fuzzy_output] = ... evalfis ([40 7], fis, 1001); ## Plot the output (Percentage-In-Stocks) of the individual fuzzy rules ## on one set of axes. x_axis = linspace (fis.output(1).range(1), ... fis.output(1).range(2), 1001); colors = ['r' 'b' 'm' 'g']; figure ('NumberTitle', 'off', 'Name', ... 'Output of Fuzzy Rules 1-4 for (Age, Risk Tolerance) = (40, 7)'); for i = 1 : 4 y_label = [colors(i) ";Rule " num2str(i) ";"]; plot (x_axis, rule_output(:,i), y_label, 'LineWidth', 2); hold on; endfor ylim ([-0.1, 1.1]); xlabel ('Percentage in Stocks', 'FontWeight', 'bold'); grid; hold; ## Plot the first aggregated fuzzy output and the crisp output ## (Percentage-In-Stocks) on one set of axes. figure('NumberTitle', 'off', 'Name', ... 'Aggregation and Defuzzification for (Age, Risk Tolerace) = (40, 7)'); plot (x_axis, fuzzy_output(:, 1), "b;Aggregated Fuzzy Output;", ... 'LineWidth', 2); hold on; crisp_output = evalmf(x_axis, output(1), 'constant'); y_label = ["r;Crisp Output = " num2str(output(1)) "%;"]; plot (x_axis, crisp_output, y_label, 'LineWidth', 2); ylim ([-0.1, 1.1]); xlabel ('Percentage in Stocks', 'FontWeight', 'bold'); grid; hold; ## Show the rules in English. puts ("\nInvestment Portfolio Calculator Rules:\n\n"); showrule (fis); %!test %! fis = readfis ('investment_portfolio.fis'); %! output = evalfis ([40 7], fis, 1001); %! assert(output, 69.358, 1e-3); fuzzy-logic-toolkit-0.6.0/inst/linear_tip_calculator.fis000066400000000000000000000031731463010412100234750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: linear_tip_calculator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Linear-Tip-Calculator' Type='sugeno' Version=2.0 NumInputs=2 NumOutputs=1 NumRules=4 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='wtaver' [Input1] Name='Food-Quality' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Input2] Name='Service' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Output1] Name='Tip' Range=[10 20] NumMFs=3 MF1='Ten-Percent':'linear',[0 0 10] MF2='Fifteen-Percent':'linear',[0 0 15] MF3='Twenty-Percent':'linear',[0 0 20] [Rules] 1 1, 1 (1) : 1 1 2, 2 (1) : 1 2 1, 2 (1) : 1 2 2, 3 (1) : 1 fuzzy-logic-toolkit-0.6.0/inst/linear_tip_demo.m000066400000000000000000000047701463010412100217470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} linear_tip_demo ## ## Demonstrate the use of linear output membership functions to simulate ## constant membership functions. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the FIS output as a function of the inputs ## @item ## evaluates the Sugeno-type FIS for six inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, mamdani_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: linear_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('linear_tip_calculator.fis'); ## Plot the input membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); ## Plot the Tip as a function of Food-Quality and Service. gensurf (fis); ## Calculate the Tip for 6 sets of input values: puts ("\nFor the following values of (Food Quality, Service):\n\n"); food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4] puts ("\nThe Tip is:\n\n"); tip = evalfis (food_service, fis, 1001) %!test %! fis = readfis ('linear_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 %! 15.000 %! 20.000 %! 15.000 %! 15.000 %! 16.250]; %! assert(tip, expected_result, 1e-3); fuzzy-logic-toolkit-0.6.0/inst/mamdani_tip_calculator.fis000066400000000000000000000035561463010412100236360ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: mamdani_tip_calculator.fis ## Last-Modified: 28 Aug 2012 [System] Name='Mamdani-Tip-Calculator' Type='mamdani' Version=2.0 NumInputs=2 NumOutputs=2 NumRules=4 AndMethod='min' OrMethod='max' ImpMethod='min' AggMethod='max' DefuzzMethod='centroid' [Input1] Name='Food-Quality' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Input2] Name='Service' Range=[1 10] NumMFs=2 MF1='Bad':'trapmf',[0 1 3 7] MF2='Good':'trapmf',[3 7 10 11] [Output1] Name='Tip' Range=[0 30] NumMFs=3 MF1='About-Ten-Percent':'gaussmf',[2 10] MF2='About-Fifteen-Percent':'gaussmf',[2 15] MF3='About-Twenty-Percent':'gaussmf',[2 20] [Output2] Name='Check-Plus-Tip' Range=[1 1.3] NumMFs=3 MF1='Plus-About-Ten-Percent':'gaussmf',[0.02 1.10] MF2='Plus-About-Fifteen-Percent':'gaussmf',[0.02 1.15] MF3='Plus-About-Twenty-Percent':'gaussmf',[0.02 1.20] [Rules] 1 1, 1 1 (1) : 1 1 2, 2 2 (1) : 1 2 1, 2 2 (1) : 1 2 2, 3 3 (1) : 1 fuzzy-logic-toolkit-0.6.0/inst/mamdani_tip_demo.m000066400000000000000000000100241463010412100220700ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} mamdani_tip_demo ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and evaluate a ## Mamdani-type FIS stored in a file. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input and output membership functions ## @item ## plots each of the two FIS outputs as a function of the inputs ## @item ## plots the output of the 4 individual rules for (Food-Quality, Service) = (4, 6) ## @item ## plots the aggregated fuzzy output and the crisp output for ## (Food-Quality, Service) = (4, 6) ## @item ## displays the FIS rules in symbolic format in the Octave window ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, sugeno_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: mamdani_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('mamdani_tip_calculator.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); plotmf (fis, 'output', 2); ## Plot the Tip and Check + Tip as functions of Food-Quality ## and Service. gensurf (fis, [1 2], 1); gensurf (fis, [1 2], 2); ## Calculate the Tip and Check + Tip using ## (Food-Quality, Service) = (4, 6). [output, rule_input, rule_output, fuzzy_output] = ... evalfis ([4 6], fis, 1001); ## Plot the first output (Tip) of the individual fuzzy rules ## on one set of axes. x_axis = linspace (fis.output(1).range(1), ... fis.output(1).range(2), 1001); colors = ['r' 'b' 'm' 'g']; figure ('NumberTitle', 'off', 'Name', ... 'Output of Fuzzy Rules 1-4 for Input = (4, 6)'); for i = 1 : 4 y_label = [colors(i) ";Rule " num2str(i) ";"]; plot (x_axis, rule_output(:,i), y_label, 'LineWidth', 2); hold on; endfor ylim ([-0.1, 1.1]); xlabel ('Tip', 'FontWeight', 'bold'); grid; hold; ## Plot the first aggregated fuzzy output and the first crisp output ## (Tip) on one set of axes. figure('NumberTitle', 'off', 'Name', ... 'Aggregation and Defuzzification for Input = (4, 6)'); plot (x_axis, fuzzy_output(:, 1), "b;Aggregated Fuzzy Output;", ... 'LineWidth', 2); hold on; crisp_output = evalmf(x_axis, output(1), 'constant'); y_label = ["r;Crisp Output = " num2str(output(1)) "%;"]; plot (x_axis, crisp_output, y_label, 'LineWidth', 2); ylim ([-0.1, 1.1]); xlabel ('Tip', 'FontWeight', 'bold'); grid; hold; ## Show the rules in symbolic format. puts ("\nMamdani Tip Calculator Rules:\n\n"); showrule (fis, 1:columns(fis.rule), 'symbolic'); %!test %! fis = readfis ('mamdani_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.0000 1.1000 %! 15.0000 1.1500 %! 20.0000 1.2000 %! 15.0000 1.1500 %! 15.0000 1.1500 %! 16.4708 1.1647]; %! assert(tip, expected_result, 1e-4); fuzzy-logic-toolkit-0.6.0/inst/newfis.m000066400000000000000000000130201463010412100200740ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{a} =} newfis (@var{fis_name}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}, @var{defuzz_method}) ## @deftypefnx {Function File} {@var{a} =} newfis (@var{fis_name}, @var{fis_type}, @var{and_method}, @var{or_method}, @var{imp_method}, @var{agg_method}, @var{defuzz_method}, @var{fis_version}) ## ## Create and return a new FIS structure using the argument values provided. ## Only the first argument is required. If fewer than eight arguments are given, ## then some or all of the following default arguments will be used: ## @itemize @bullet ## @item ## @var{fis_type} = 'mamdani' ## @item ## @var{and_method} = 'min' ## @item ## @var{or_method} = 'max' ## @item ## @var{imp_method} = 'min' ## @item ## @var{agg_method} = 'max' ## @item ## @var{defuzz_method} = 'centroid' ## @item ## @var{fis_version} = 1.0 ## @end itemize ## ## @seealso{addmf, addrule, addvar, setfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: newfis.m ## Last-Modified: 2 Jun 2024 function fis = newfis (fis_name, fis_type = 'mamdani', ... and_method = 'min', or_method = 'max', ... imp_method = 'min', agg_method = 'max', ... defuzz_method = 'centroid', fis_version = 1.0) ## If the caller did not supply the between 1 and 8 argument values, ## or if any of the argument values were not strings, print an error ## message and halt. if (!(nargin >= 1 && nargin <= 8)) error ("newfis requires between 1 and 8 arguments\n"); elseif (!(is_string (fis_name) && is_string (fis_type) && ... is_string (and_method) && is_string (or_method) && ... is_string (imp_method) && is_string (agg_method) && ... is_string (defuzz_method) && isfloat (fis_version))) error ("incorrect argument type in newfis argument list\n"); endif ## Create and return the new FIS structure. fis = struct ('name', fis_name, ... 'type', fis_type, ... 'version', fis_version, ... 'andMethod', and_method, ... 'orMethod', or_method, ... 'impMethod', imp_method, ... 'aggMethod', agg_method, ... 'defuzzMethod', defuzz_method, ... 'input', [], ... 'output', [], ... 'rule', []); endfunction %!shared fis %! fis = newfis ('Heart-Disease-Risk', 'sugeno', ... %! 'min', 'max', 'min', 'max', 'wtaver'); %!assert(fis.name == 'Heart-Disease-Risk'); %!assert(fis.type == 'sugeno'); %!assert(fis.andMethod == 'min'); %!assert(fis.orMethod == 'max'); %!assert(fis.impMethod == 'min'); %!assert(fis.aggMethod == 'max'); %!assert(fis.defuzzMethod == 'wtaver'); ## Test input validation %!error %! newfis() %!error %! newfis(1, 2, 3, 4, 5, 6, 7, 8, 9) %!error %! newfis(1, 'str', 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis(1, 'str', 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 2, 'str', 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 3, 'str', 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 4, 'str', 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 5, 'str', 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 6, 'str', 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 'str', 7, 8) %!error %! newfis('str', 'str', 'str', 'str', 'str', 'str', 'str', 'str') fuzzy-logic-toolkit-0.6.0/inst/partition_coeff.m000066400000000000000000000063041463010412100217630ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vpc} =} partition_coeff (@var{soft_partition}) ## ## Return the partition coefficient for a given soft partition. ## ## The argument to partition_coeff is: ## @itemize @w ## @item ## @var{soft_partition} - the membership degree of each input data point in each cluster ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vpc} - the partition coefficient for the given soft partition ## @end itemize ## ## For demos of this function, please type: ## @example ## demo 'fcm' ## demo 'gustafson_kessel' ## @end example ## ## For more information about the @var{soft_partition} matrix, please see the ## documentation for function fcm. ## ## @seealso{fcm, gustafson_kessel, partition_entropy, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit partition coefficient cluster ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: partition_coeff.m ## Last-Modified: 29 May 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.9 (corrected ## -- the equation in the book omits the exponent 2) in ## Fuzzy Logic: Intelligence, Control and Information, by J. Yen ## and R. Langari, Prentice Hall, 1999, page 384 (International ## Edition). ##---------------------------------------------------------------------- function vpc = partition_coeff (soft_partition) ## If partition_coeff was called with an incorrect number of ## arguments, or the argument does not have the correct type, ## print an error message and halt. if (nargin != 1) error ("partition_coeff requires 1 argument\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("partition_coeff's argument must be a matrix of reals 0.0-1.0\n"); endif ## Compute and return the partition coefficient. soft_part_sqr = soft_partition .* soft_partition; vpc = (sum (sum (soft_part_sqr))) / columns (soft_partition); endfunction ## Test input validation %!error %! partition_coeff() %!error %! partition_coeff(1, 2) %!error %! partition_coeff([-1 2]) fuzzy-logic-toolkit-0.6.0/inst/partition_entropy.m000066400000000000000000000070361463010412100224040ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vpe} =} partition_entropy (@var{soft_partition}, @var{a}) ## ## Return the partition entropy for a given soft partition. ## ## The arguments to partition_entropy are: ## @itemize @w ## @item ## @var{soft_partition} - the membership degree of each input data point in each cluster ## @item ## @var{a} - the log base to use in the calculation; must be a real number a > 1 ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vpe} - the partition entropy for the given soft partition ## @end itemize ## ## For demos of this function, please type: ## @example ## demo 'fcm' ## demo 'gustafson_kessel' ## @end example ## ## For more information about the @var{soft_partition} matrix, please see the ## documentation for function fcm. ## ## @seealso{fcm, gustafson_kessel, partition_coeff, xie_beni_index} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit partition entropy cluster ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: partition_entropy.m ## Last-Modified: 29 May 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.10 in ## Fuzzy Logic: Intelligence, Control and Information, by J. Yen ## and R. Langari, Prentice Hall, 1999, page 384 (International ## Edition). ##---------------------------------------------------------------------- function vpe = partition_entropy (soft_partition, a) ## If partition_entropy was called with an incorrect number of ## arguments, or the argument does not have the correct type, print an ## error message and halt. if (nargin != 2) error ("partition_entropy requires 2 arguments\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("partition_entropy's 1st arg must be a matrix of reals 0.0-1.0\n"); elseif (!(is_real (a) && a > 1)) error ("partition_entropy's 2nd arg must be a real greater than 1\n"); endif ## Compute and return the partition entropy. n = columns (soft_partition); Mu = soft_partition; log_a_Mu = log (Mu) / log (a); vpe = -(sum (sum (Mu .* log_a_Mu))) / n; endfunction ## Test input validation %!error %! partition_entropy() %!error %! partition_entropy(1) %!error %! partition_entropy(1, 2, 3) %!error %! partition_entropy([1 2], 2) %!error %! partition_entropy([1 1], -2) fuzzy-logic-toolkit-0.6.0/inst/pimf.m000066400000000000000000000144531463010412100175470ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} pimf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} pimf (@var{[x1 x2 ... xn]}, @var{[a b c d]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c d]}), ## return the corresponding @var{y} values for the pi-shaped membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of real ## numbers, and @var{a}, @var{b}, @var{c}, and @var{d} must be real numbers, ## with @var{a} < @var{b} <= @var{c} < @var{d}. This membership function ## satisfies: ## @example ## @group ## 0 if x <= a ## 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## f(x) = 1 if b <= x <= c ## 1 - 2 * ((x - c)/(d - c))^2 if c < x <= (c + d)/2 ## 2 * ((x - d)/(d - c))^2 if (c + d)/2 < x < d ## 0 if x >= d ## @end group ## @end example ## ## @noindent ## which always returns values in the range [0, 1]. ## ## @noindent ## To run the demonstration code, type "@t{demo pimf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, psigmf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership pi-shaped pi ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: pimf.m ## Last-Modified: 30 May 2024 function y = pimf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if ((nargin != 2)) error ("pimf requires 2 arguments\n"); elseif (!is_domain (x)) error ("pimf's first argument must be a valid domain\n"); elseif (!are_mf_params ('pimf', params)) error ("pimf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); c = params(3); d = params(4); a_b_ave = (a + b) / 2; b_minus_a = b - a; c_d_ave = (c + d) / 2; d_minus_c = d - c; y_val = @(x_val) pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, ... c_d_ave, d_minus_c); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y = pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, c_d_ave, ## d_minus_c) ## ## pimf_val returns one value of the S-shaped membership function, which ## satisfies: ## 0 if x <= a ## 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## f(x) = 1 if b <= x <= c ## 1 - 2 * ((x - c)/(d - c))^2 if c < x <= (c + d)/2 ## 2 * ((x - d)/(d - c))^2 if (c + d)/2 < x < d ## 0 if x >= d ## ## pimf_val is a private function, called only by pimf. Because pimf_val ## is not intended for general use -- and because the parameters a, b, ## c, and d are checked for errors in the function pimf (defined above), ## the parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = pimf_val (x_val, a, b, c, d, a_b_ave, b_minus_a, ... c_d_ave, d_minus_c) ## Calculate and return a single y value of the pi-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 0; elseif (x_val <= a_b_ave) y_val = 2 * ((x_val - a)/b_minus_a)^2; elseif (x_val < b) y_val = 1 - 2 * ((x_val - b) / b_minus_a)^2; elseif (x_val <= c) y_val = 1; elseif (x_val <= c_d_ave) y_val = 1 - 2 * ((x_val - c) / d_minus_c)^2; elseif (x_val < d) y_val = 2 * ((x_val - d) / d_minus_c)^2; else y_val = 0; endif endfunction %!demo %! x = 0:255; %! params = [70 80 100 140]; %! y1 = pimf(x, params); %! params = [50 75 105 175]; %! y2 = pimf(x, params); %! params = [30 70 110 200]; %! y3 = pimf(x, params); %! figure('NumberTitle', 'off', 'Name', 'pimf demo'); %! plot(x, y1, 'r;params = [70 80 100 140];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [50 75 105 175];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [30 70 110 200];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:25:250; %! params = [50 75 105 175]; %! y = [0 0 0 1 1 0.8367 0.2551 0 0 0 0]; %! z = pimf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! pimf() %!error %! pimf(1) %!error %! pimf(1, 2, 3) %!error %! pimf([1 0], 2) %!error %! pimf(1, 2) %!error %! pimf(0:100, []) %!error %! pimf(0:100, [30]) %!error %! pimf(0:100, [2 3]) %!error %! pimf(0:100, [90 80 30]) %!error %! pimf(0:100, 'abc') fuzzy-logic-toolkit-0.6.0/inst/plotmf.m000066400000000000000000000157601463010412100201170ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}) ## @deftypefnx {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{y_lower_limit}) ## @deftypefnx {Function File} {} plotmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{y_lower_limit}, @var{y_upper_limit}) ## ## Plot the membership functions defined for the specified FIS input or output ## variable on a single set of axes. Fuzzy output membership functions are ## represented by the [0, 1]-valued fuzzy functions, and constant output ## membership functions are represented by unit-valued singleton spikes. ## Linear output membership functions, however, are represented by ## two-dimensional lines y = ax + c, regardless of how many dimensions the ## linear function is defined to have. In effect, all of the other dimensions ## of the linear function are set to 0. ## ## If both constant and linear membership functions are used for a single FIS ## output, then two sets of axes are used: one for the constant membership ## functions, and another for the linear membership functions. To plot both ## constant and linear membership functions together, or to plot constant ## membership functions as horizontal lines instead of unit-valued spikes, ## represent the constant membership functions using 'linear' functions, with ## 0 for all except the last parameter, and with the desired constant value as ## the last parameter. ## ## The types of the arguments are expected to be: ## @itemize @bullet ## @item ## @var{fis} - an FIS structure ## @item ## @var{in_or_out} - either 'input' or 'output' (case-insensitive) ## @item ## @var{var_index} - an FIS input or output variable index ## @item ## @var{y_lower_limit} - a real scalar (default value = -0.1) ## @item ## @var{y_upper_limit} - a real scalar (default value = 1.1) ## @end itemize ## ## Six examples that use plotmf are: ## @itemize @bullet ## @item ## cubic_approx_demo.m ## @item ## heart_disease_demo_1.m ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## @seealso{gensurf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership plot ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: plotmf.m ## Last-Modified: 29 May 2024 function plotmf (fis, in_or_out, var_index, ... y_lower_limit = -0.1, y_upper_limit = 1.1) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if ((nargin < 3) || (nargin > 5)) error ("plotmf requires 3 - 5 arguments\n"); elseif (!is_fis (fis)) error ("plotmf's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("plotmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("plotmf's third argument must be a variable index\n"); elseif (!(is_real (y_lower_limit) && is_real (y_upper_limit))) error ("plotmf's 4th and 5th arguments must be real scalars\n"); endif ## Select specified variable and construct the window title. if (strcmpi (in_or_out, 'input')) var = fis.input(var_index); window_title = [' Input ' num2str(var_index) ' Term Set']; else var = fis.output(var_index); window_title = [' Output ' num2str(var_index) ' Term Set']; endif ## Plot the membership functions for the specified variable. ## Cycle through the five colors: red, blue, green, magenta, cyan. ## Display the membership function names in a legend. colors = ["r" "b" "g" "m" "c"]; x = linspace (var.range(1), var.range(2), 1001); num_mfs = columns (var.mf); ## Define vectors to keep track of linear and non-linear mfs. linear_mfs = zeros (1, num_mfs); for i = 1 : num_mfs if (strcmp ('linear', var.mf(i).type)) linear_mfs(i) = 1; endif endfor fuzzy_and_constant_mfs = 1 - linear_mfs; ## Plot the fuzzy or constant membership functions together on a set ## of axes. if (sum (fuzzy_and_constant_mfs)) figure ('NumberTitle', 'off', 'Name', window_title); ## Plot the mfs. for i = 1 : num_mfs if (fuzzy_and_constant_mfs(i)) y = evalmf_private (x, var.mf(i).params, var.mf(i).type); y_label = [colors(mod(i-1,5)+1) ";" var.mf(i).name ";"]; plot (x, y, y_label, 'LineWidth', 2); hold on; endif endfor ## Adjust the y-axis, label both axes, and display a dotted grid. ylim ([y_lower_limit y_upper_limit]); xlabel (var.name, 'FontWeight', 'bold'); ylabel ('Degree of Membership', 'FontWeight', 'bold'); grid; hold; endif ## Plot the linear membership functions together on a separate set ## of axes. if (sum (linear_mfs)) figure ('NumberTitle', 'off', 'Name', window_title); ## Plot the mfs. for i = 1 : num_mfs if (linear_mfs(i)) y = evalmf_private (x, var.mf(i).params, var.mf(i).type); y_label = [colors(mod(i-1,5)+1) ";" var.mf(i).name ";"]; plot (x, y, y_label, 'LineWidth', 2); hold on; endif endfor ## Adjust the y-axis, label both axes, and display a dotted grid. ylim ([y_lower_limit y_upper_limit]); xlabel ('X', 'FontWeight', 'bold'); ylabel (var.name, 'FontWeight', 'bold'); grid; hold; endif endfunction %!shared fis %! fis = readfis ('cubic_approximator.fis'); ## Test input validation %!error %! plotmf() %!error %! plotmf(1) %!error %! plotmf(1, 2) %!error %! plotmf(1, 2, 3, 4, 5, 6) %!error %! plotmf(1, 2, 3) %!error %! plotmf(fis, 2, 3) %!error %! plotmf(fis, 'input', 3) %!error %! plotmf(fis, 'input', 1, 2j) %!error %! plotmf(fis, 'input', 1, 0, 2j) fuzzy-logic-toolkit-0.6.0/inst/private/000077500000000000000000000000001463010412100201015ustar00rootroot00000000000000fuzzy-logic-toolkit-0.6.0/inst/private/aggregate_output_mamdani.m000066400000000000000000000073611463010412100253220ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fuzzy_output} =} aggregate_output_mamdani (@var{fis}, @var{rule_output}) ## ## @noindent ## Given the: ## @itemize @bullet ## @item @var{fis.aggMethod} ## the aggregation method for the given @var{fis} ## @item @var{rule_output} ## a matrix of the fuzzy output for each (rule, FIS output) pair ## @end itemize ## ## @noindent ## Return: ## @itemize @bullet ## @item @var{fuzzy_output} ## a matrix of the aggregated output for each FIS output variable ## @end itemize ## ## @var{rule_output} is a @var{num_points} x (Q * M) matrix, where ## @var{num_points} is the number of points over which the fuzzy ## values are evaluated, Q is the number of rules and M is the number ## of FIS output variables. Each column of @var{rule_output} gives ## the y-values of the fuzzy output for a single (rule, FIS output) ## pair: ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## The return value @var{fuzzy_output} is a @var{num_points} x M matrix. Each ## column of @var{fuzzy_output} gives the y-values of the fuzzy output for a ## single FIS output variable, aggregated over all rules: ## ## @example ## @group ## out_1 out_2 ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## Because aggregate_output_mamdani is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: aggregate_output_mamdani.m ## Last-Modified: 20 Aug 2012 function fuzzy_output = aggregate_output_mamdani (fis, rule_output) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L num_points = rows (rule_output); ## Initialize output matrix to prevent inefficient resizing. fuzzy_output = zeros (num_points, num_outputs); ## Compute the ith fuzzy output values, then store the values in the ## ith column of the fuzzy_output matrix. for i = 1 : num_outputs indiv_fuzzy_out = ... rule_output(:, (i - 1) * num_rules + 1 : i * num_rules); agg_fuzzy_out = (str2func (fis.aggMethod) (indiv_fuzzy_out'))'; fuzzy_output(:, i) = agg_fuzzy_out; endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/aggregate_output_sugeno.m000066400000000000000000000132421463010412100252070ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fuzzy_output} =} aggregate_output_sugeno (@var{fis}, @var{rule_output}) ## ## @noindent ## Given the: ## @itemize @bullet ## @item @var{fis.aggMethod} ## the aggregation method for the given @var{fis} ## @item @var{rule_output} ## a matrix of the singleton output of each (rule, FIS output) pair ## @end itemize ## ## @noindent ## Return: ## @itemize @bullet ## @item @var{fuzzy_output} ## a vector of structures containing the aggregated output for each FIS output ## @end itemize ## ## @var{rule_output} is a 2 x (Q * M) matrix, where Q is the number of rules ## and M is the number of FIS output variables. Each column of @var{rule_output} ## gives the (location, height) pair of the singleton output for one ## (rule, FIS output) pair: ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [ ] ## height [ ] ## @end group ## @end example ## ## The return value @var{fuzzy_output} is a vector of M structures, ## each of which has an index i and a matrix of singletons that form the ## aggregated output for the ith FIS output variable. ## For each FIS output variable, the matrix of singletons is a 2 x L matrix ## where L is the number of distinct singleton locations in the fuzzy output ## for that FIS output variable. The first row gives the (distinct) locations, ## and the second gives the (non-zero) heights: ## ## @example ## @group ## singleton_1 singleton_2 ... singleton_L ## location [ ] ## height [ ] ## @end group ## @end example ## ## Because aggregate_output_sugeno is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: aggregate_output_sugeno.m ## Last-Modified: 20 Aug 2012 ##---------------------------------------------------------------------- function fuzzy_output = aggregate_output_sugeno (fis, rule_output) fuzzy_output = []; num_outputs = columns (fis.output); num_rules = columns (fis.rule); ## For each FIS output, aggregate the slice of the rule_output matrix, ## then store the result as a structure in fuzzy_output. for i = 1 : num_outputs unagg_output = rule_output(:, (i-1)*num_rules+1 : i*num_rules); aggregated_output = aggregate_fis_output (fis.aggMethod, ... unagg_output); next_agg_output = struct ('index', i, ... 'aggregated_output', aggregated_output); if (i == 1) fuzzy_output = next_agg_output; else fuzzy_output = [fuzzy_output, next_agg_output]; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: aggregate_fis_output ## Purpose: Aggregate the multiple singletons for one FIS output. ##---------------------------------------------------------------------- function mult_singletons = aggregate_fis_output (fis_aggmethod, ... rule_output) ## Initialize output matrix (multiple_singletons). mult_singletons = sortrows (rule_output', 1); ## If adjacent rows represent singletons at the same location, then ## combine them using the FIS aggregation method. for i = 1 : rows (mult_singletons) - 1 if (mult_singletons(i, 1) == mult_singletons(i+1, 1)) switch (fis_aggmethod) case 'sum' mult_singletons(i + 1, 2) = mult_singletons(i, 2) + ... mult_singletons(i + 1, 2); otherwise mult_singletons(i + 1, 2) = str2func (fis_aggmethod) ... (mult_singletons(i, 2), ... mult_singletons(i + 1, 2)); endswitch mult_singletons(i, 2) = 0; endif endfor ## Return the transpose of the matrix after removing 0-height ## singletons. mult_singletons = (remove_null_rows (mult_singletons))'; endfunction ##---------------------------------------------------------------------- ## Function: remove_null_rows ## Purpose: Return the argument without the rows with a 0 in the ## second column. ##---------------------------------------------------------------------- function y = remove_null_rows (x) y = []; for i = 1 : rows (x) if (x(i, 2) != 0) if (isequal (y, [])) y = x(i, :); else y = [y; x(i, :)]; endif endif endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/are_bounds.m000066400000000000000000000030601463010412100223770ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_bounds (@var{x}) ## @deftypefnx {Function File} {@var{y} =} are_bounds (@var{[x1 x2]}) ## ## Return 1 if @var{x} is a vector of 2 real numbers @var{[x1 x2]}, ## with @var{x1} <= @var{x2}, and return 0 otherwise. ## ## are_bounds is a private function that localizes the test for validity of ## bounds imposed on FIS input/output domains. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_bounds.m ## Last-Modified: 20 Aug 2012 function y = are_bounds (x) y = isvector (x) && isreal (x) && (length (x) == 2) && (x(1) <= x(2)); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/are_input_indices.m000066400000000000000000000032121463010412100237410ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_input_indices (@var{x}, @var{fis}) ## ## Return 1 if @var{x} is a valid input index or a vector of two valid input ## indices for the given FIS structure, and return 0 otherwise. The FIS ## structure @var{fis} is assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_input_indices.m ## Last-Modified: 20 Aug 2012 function y = are_input_indices (x, fis) if (!(isreal (x) && isvector (x) && (length (x) <= 2))) y = 0; else y = 1; num_inputs = columns (fis.input); for next_x = x if (!(is_pos_int (next_x) && next_x <= num_inputs)) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/are_mf_params.m000066400000000000000000000146411463010412100230610ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} are_mf_params (@var{type}, @var{params}) ## ## Return 0 if @var{type} is a built-in membership function and @var{params} ## are not valid parameters for that type, and return 1 otherwise. ## ## are_mf_params is a private function that localizes the test for validity of ## membership function parameters. Note that for a custom membership function, ## this function always returns 1. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: are_mf_params.m ## Last-Modified: 20 Aug 2012 function y = are_mf_params (type, params) switch (type) case 'constant' y = real_vector (params); case 'dsigmf' y = four_reals (params); case 'gauss2mf' y = four_reals (params); case 'gaussmf' y = two_reals (params); case 'gbellmf' y = gbellmf_params (params); case 'linear' y = real_vector (params); case 'pimf' y = pimf_params (params); case 'psigmf' y = four_reals (params); case 'sigmf' y = two_reals (params); case 'smf' y = smf_params (params); case 'trapmf' y = trapmf_params (params); case 'trimf' y = trimf_params (params); case 'zmf' y = zmf_params (params); otherwise y = 1; endswitch endfunction ##---------------------------------------------------------------------- ## Usage: y = real_vector (params) ## ## Return 1 if params is a vector of real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = real_vector (params) y = isvector (params) && isreal (params); endfunction ##---------------------------------------------------------------------- ## Usage: y = two_reals (params) ## ## Return 1 if params is a vector of 2 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = two_reals (params) y = isvector (params) && isreal (params) && (length (params) == 2); endfunction ##---------------------------------------------------------------------- ## Usage: y = three_reals (params) ## ## Return 1 if params is a vector of 3 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = three_reals (params) y = isvector (params) && isreal (params) && (length (params) == 3); endfunction ##---------------------------------------------------------------------- ## Usage: y = four_reals (params) ## ## Return 1 if params is a vector of 4 real numbers, and ## return 0 otherwise. ##---------------------------------------------------------------------- function y = four_reals (params) y = isvector (params) && isreal (params) && (length (params) == 4); endfunction ##---------------------------------------------------------------------- ## Usage: y = gbellmf_params (params) ## y = gbellmf_params ([a b c]) ## ## Return 1 if params is a vector of 3 real numbers, [a b c], with ## a != 0 and integral-valued b, and return 0 otherwise. ##---------------------------------------------------------------------- function y = gbellmf_params (params) y = three_reals (params) && (params(1) != 0) && is_int (params(2)); endfunction ##---------------------------------------------------------------------- ## Usage: y = pimf_params (params) ## y = pimf_params ([a b c d]) ## ## Return 1 if params is a vector of 4 real numbers, [a b c d], with ## a < b <= c < d, and return 0 otherwise. ##---------------------------------------------------------------------- function y = pimf_params (params) y = four_reals (params) && ... (params(1) < params(2)) && ... (params(2) <= params(3)) && ... (params(3) < params(4)); endfunction ##---------------------------------------------------------------------- ## Usage: y = smf_params (params) ## y = smf_params ([a b]) ## ## Return 1 if params is a vector of 2 real numbers, [a b], with a < b, ## and return 0 otherwise. ##---------------------------------------------------------------------- function y = smf_params (params) y = two_reals (params) && (params(1) < params(2)); endfunction ##---------------------------------------------------------------------- ## Usage: y = trapmf_params (params) ## y = trapmf_params ([a b c d]) ## ## Return 1 if params is a vector of 4 real numbers, [a b c d], with ## a < b <= c < d, and return 0 otherwise. ##---------------------------------------------------------------------- function y = trapmf_params (params) y = four_reals (params) && ... (params(1) < params(2)) && ... (params(2) <= params(3)) && ... (params(3) < params(4)); endfunction ##---------------------------------------------------------------------- ## Usage: y = trimf_params (params) ## y = trimf_params ([a b c]) ## ## Return 1 if params is a vector of 3 real numbers, [a b c], with ## a < b < c, and return 0 otherwise. ##---------------------------------------------------------------------- function y = trimf_params (params) y = three_reals (params) && ... (params(1) < params(2)) && ... (params(2) < params(3)); endfunction ##---------------------------------------------------------------------- ## Usage: y = zmf_params (params) ## y = zmf_params ([a b]) ## ## Return 1 if params is a vector of 2 real numbers, [a b], with a < b, ## and return 0 otherwise. ##---------------------------------------------------------------------- function y = zmf_params (params) y = two_reals (params) && (params(1) < params(2)); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/compute_cluster_convergence.m000066400000000000000000000031741463010412100260570ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{convergence_criterion} =} compute_cluster_convergence (@var{V}, @var{V_previous}) ## ## Compute the sum of the changes in position (using the Euclidean ## distance) of the cluster prototypes. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, update_cluster_prototypes, compute_cluster_obj_fcn} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: compute_cluster_convergence.m ## Last-Modified: 2 Sep 2012 function convergence_criterion = ... compute_cluster_convergence (V, V_previous) V_delta = V - V_previous; convergence_criterion = sum (sqrt (sum (V_delta .* V_delta)')); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/compute_cluster_obj_fcn.m000066400000000000000000000035661463010412100251660ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{obj_fcn} =} compute_cluster_obj_fcn (@var{Mu_m}, @var{sqr_dist}) ## ## Compute the objective function for the current iteration. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, update_cluster_prototypes, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: compute_cluster_obj_fcn.m ## Last-Modified: 2 Sep 2012 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.3 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 379 ## (International Edition). ##---------------------------------------------------------------------- function obj_fcn = compute_cluster_obj_fcn (Mu_m, sqr_dist) obj_fcn = sum (sum (Mu_m .* sqr_dist)); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/defuzzify_output_mamdani.m000066400000000000000000000056331463010412100254130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} defuzzify_output_mamdani (@var{fis}, @var{fuzzy_output}) ## ## @noindent ## Given the: ## @itemize @bullet ## @item @var{fis.defuzzMethod} ## the defuzzification method for the given @var{fis} ## @item @var{fuzzy_output} ## a matrix of the aggregated output for each FIS output variable ## @end itemize ## ## @noindent ## Return: ## @itemize @bullet ## @item @var{output} ## a vector of crisp output values ## @end itemize ## ## @var{fuzzy_output} is a @var{num_points} x M matrix, where @var{num_points} ## is the number of points over which fuzzy values are evaluated and M is the ## number of FIS output variables. Each ## column of @var{fuzzy_output} gives the y-values of the fuzzy output for a ## single FIS output variable, aggregated over all rules: ## ## @example ## @group ## out_1 out_2 ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## The crisp @var{output} values are computed from the corresponding fuzzy ## values using the FIS defuzzification method. The @var{output} ## vector has the form: ## ## @example ## output: [output_1 output_2 ... output_M] ## @end example ## ## Because defuzzify_output_mamdani is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: defuzzify_output_mamdani.m ## Last-Modified: 20 Aug 2012 function output = defuzzify_output_mamdani (fis, fuzzy_output) num_outputs = columns (fis.output); ## num_outputs == L (above) num_points = rows (fuzzy_output); output = zeros (1, num_outputs); for i = 1 : num_outputs range = fis.output(i).range; x = linspace (range(1), range(2), num_points); y = (fuzzy_output(:, i))'; output(i) = defuzz (x, y, fis.defuzzMethod); endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/defuzzify_output_sugeno.m000066400000000000000000000060101463010412100252730ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} defuzzify_output_sugeno (@var{fis}, @var{aggregated_output}) ## ## @noindent ## Given the: ## @itemize @bullet ## @item @var{fis.defuzzMethod} ## the defuzzification method for the given @var{fis} ## @item @var{aggregated_output} ## a vector of structures containing the aggregated output for each FIS output variable ## @end itemize ## ## @noindent ## Return: ## @itemize @bullet ## @item @var{output} ## a vector of crisp output values ## @end itemize ## ## The @var{aggregated_output} is a vector of M structures, where M is the ## number of FIS output variables. Each structure contains an index i and a ## matrix of singletons that form the aggregated output for the ith FIS output. ## For each FIS output variable, the matrix of singletons is a 2 x L matrix ## where L is the number of distinct singleton locations in the fuzzy output ## for that FIS output variable. The first row gives the (distinct) locations, ## and the second gives the (non-zero) heights: ## ## @example ## @group ## singleton_1 singleton_2 ... singleton_L ## location [ ] ## height [ ] ## @end group ## @end example ## ## The crisp @var{output} values are computed from the corresponding fuzzy ## values using the FIS defuzzification method. The @var{output} ## vector has the form: ## ## @example ## output: [output_1 output_2 ... output_M] ## @end example ## ## Because defuzzify_output_sugeno is called only by the private ## function evalfis_private, it does no error checking of the argument values. ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: defuzzify_output_sugeno.m ## Last-Modified: 20 Aug 2012 function output = defuzzify_output_sugeno (fis, aggregated_output) num_outputs = columns (fis.output); output = zeros (1, num_outputs); for i = 1 : num_outputs next_agg_output = aggregated_output(i).aggregated_output; x = next_agg_output(1, :); y = next_agg_output(2, :); output(i) = defuzz (x, y, fis.defuzzMethod); endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/eval_firing_strength.m000066400000000000000000000120441463010412100244630ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{firing_strength} =} eval_firing_strength (@var{fis}, @var{rule_input}) ## ## Return the firing strength for each FIS rule given a matrix of matching ## degrees for each (rule, rule_input) pair. ## ## The second argument (@var{rule_input}) gives the fuzzified input values to ## the FIS rules as a Q x N matrix: ## ## @example ## @group ## in_1 in_2 ... in_N ## rule_1 [mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN] ## @end group ## @end example ## ## @noindent ## where Q is the number of rules and N is the number of FIS input variables. ## ## For i = 1 .. Q, the fuzzy antecedent, connection, and weight for rule i ## are given by: ## @itemize @bullet ## @item ## @var{fis.rule(i).antecedent} ## @item ## @var{fis.rule(i).connection} ## @item ## @var{fis.rule(i).weight} ## @end itemize ## ## The output is a row vector of length Q. ## ## Because eval_firing_strength is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_firing_strength.m ## Last-Modified: 20 Aug 2012 function firing_strength = eval_firing_strength (fis, rule_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_inputs = columns (fis.input); ## num_inputs == N ## Initialize output matrix to prevent inefficient resizing. firing_strength = zeros (1, num_rules); ## For each rule ## 1. Apply connection to find matching degree of the antecedent. ## 2. Multiply by weight of the rule to find degree of the rule. for i = 1 : num_rules rule = fis.rule(i); ## Collect mu values for all input variables in the antecedent. antecedent_mus = []; for j = 1 : num_inputs if (rule.antecedent(j) != 0) mu = rule_input(i, j); antecedent_mus = [antecedent_mus mu]; endif endfor ## Compute matching degree of the rule. if (rule.connection == 1) connect = fis.andMethod; else connect = fis.orMethod; endif switch (connect) case 'min' firing_strength(i) = rule.weight * ... min (antecedent_mus); case 'max' firing_strength(i) = rule.weight * ... max (antecedent_mus); case 'prod' firing_strength(i) = rule.weight * ... prod (antecedent_mus); case 'sum' firing_strength(i) = rule.weight * ... sum (antecedent_mus); case 'algebraic_product' firing_strength(i) = rule.weight * ... prod (antecedent_mus); case 'algebraic_sum' firing_strength(i) = rule.weight * ... algebraic_sum (antecedent_mus); case 'bounded_difference' firing_strength(i) = rule.weight * ... bounded_difference (antecedent_mus); case 'bounded_sum' firing_strength(i) = rule.weight * ... bounded_sum (antecedent_mus); case 'einstein_product' firing_strength(i) = rule.weight * ... einstein_product (antecedent_mus); case 'einstein_sum' firing_strength(i) = rule.weight * ... einstein_sum (antecedent_mus); case 'hamacher_product' firing_strength(i) = rule.weight * ... hamacher_product (antecedent_mus); case 'hamacher_sum' firing_strength(i) = rule.weight * ... hamacher_sum (antecedent_mus); case 'drastic_product' firing_strength(i) = rule.weight * ... drastic_product (antecedent_mus); case 'drastic_sum' firing_strength(i) = rule.weight * ... drastic_sum (antecedent_mus); otherwise firing_strength(i) = rule.weight * ... str2func (connect) (antecedent_mus); endswitch endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/eval_rules_mamdani.m000066400000000000000000000113131463010412100241050ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_output} =} eval_rules_mamdani (@var{fis}, @var{firing_strength}, @var{num_points}) ## ## @noindent ## Return the fuzzy output for each (rule, FIS output) pair ## for a Mamdani-type FIS (an FIS that does not have constant or linear ## output membership functions). ## ## The firing strength of each rule is given by a row vector of length Q, where ## Q is the number of rules in the FIS: ## @example ## @group ## rule_1 rule_2 ... rule_Q ## [firing_strength(1) firing_strength(2) ... firing_strength(Q)] ## @end group ## @end example ## ## The implication method and fuzzy consequent for each rule are given by: ## @example ## @group ## fis.impMethod ## fis.rule(i).consequent for i = 1..Q ## @end group ## @end example ## ## The return value, @var{rule_output}, is a @var{num_points} x (Q * M) ## matrix, where Q is the number of rules and M is the number of FIS output ## variables. Each column of this matrix gives the y-values of the fuzzy ## output for a single (rule, FIS output) pair. ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## 1 [ ] ## 2 [ ] ## ... [ ] ## num_points [ ] ## @end group ## @end example ## ## Because eval_rules_mamdani is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_rules_mamdani.m ## Last-Modified: 20 Aug 2012 function rule_output = eval_rules_mamdani (fis, firing_strength, ... num_points) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L ## Initialize output matrix to prevent inefficient resizing. rule_output = zeros (num_points, num_rules*num_outputs); ## Compute the fuzzy output for each (rule, output) pair: ## 1. Apply the FIS implication method to find the fuzzy outputs ## for the current (rule, output) pair. ## 2. Store the result as a column in the rule_output matrix. for i = 1 : num_rules rule = fis.rule(i); rule_matching_degree = firing_strength(i); if (rule_matching_degree != 0) for j = 1 : num_outputs ## Compute the fuzzy output for this (rule, output) pair. [mf_index hedge not_flag] = ... get_mf_index_and_hedge (rule.consequent(j)); if (mf_index != 0) ## First, get the fuzzy output, adjusting for the hedge and ## not_flag, but not for the rule matching degree. range = fis.output(j).range; mf = fis.output(j).mf(mf_index); x = linspace (range(1), range(2), num_points); fuzzy_out = evalmf (x, mf.params, mf.type, hedge, not_flag); ## Adjust the fuzzy output for the rule matching degree. switch (fis.impMethod) case 'min' fuzzy_out = min (rule_matching_degree, fuzzy_out); case 'prod' fuzzy_out *= rule_matching_degree; otherwise fuzzy_out = str2func (fis.impMethod) ... (rule_matching_degree, fuzzy_out); endswitch ## Store result in column of rule_output corresponding ## to the (rule, output) pair. rule_output(:, (j - 1) * num_rules + i) = fuzzy_out'; endif endfor endif endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/eval_rules_sugeno.m000066400000000000000000000120001463010412100237710ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_output} =} eval_rules_sugeno (@var{fis}, @var{firing_strength}, @var{user_input}) ## ## Return the fuzzy output for each (rule, FIS output) pair for a ## Sugeno-type FIS (an FIS that has only constant and linear output ## membership functions). ## ## The firing strength of each rule is given by a row vector of length Q, where ## Q is the number of rules in the FIS: ## @example ## @group ## rule_1 rule_2 ... rule_Q ## [firing_strength(1) firing_strength(2) ... firing_strength(Q)] ## @end group ## @end example ## ## The consequent for each rule is given by: ## @example ## fis.rule(i).consequent for i = 1..Q ## @end example ## ## The return value of the function is a 2 x (Q * M) matrix, where ## M is the number of FIS output variables. ## Each column of this matrix gives the (location, height) pair of the ## singleton output for a single (rule, FIS output) pair. ## ## @example ## @group ## Q cols Q cols Q cols ## --------------- --------------- --------------- ## out_1 ... out_1 out_2 ... out_2 ... out_M ... out_M ## location [ ] ## height [ ] ## @end group ## @end example ## ## Note that for Sugeno FISs, the hedge and not flag are handled by ## adjusting the height of the singletons for each (rule, output) pair. ## ## Because eval_rules_sugeno is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: eval_rules_sugeno.m ## Last-Modified: 20 Aug 2012 function rule_output = eval_rules_sugeno (fis, firing_strength, ... user_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_outputs = columns (fis.output); ## num_outputs == L ## Initialize output matrix to prevent inefficient resizing. rule_output = zeros (2, num_rules * num_outputs); ## Compute the (location, height) of the singleton output by each ## (rule, output) pair: ## 1. The height is given by the firing strength of the rule, and ## by the hedge and the not flag for the (rule, output) pair. ## 2. If the consequent membership function is constant, then the ## membership function's parameter gives the location of the ## singleton. If the consequent membership function is linear, ## then the location is the inner product of the the membership ## function's parameters and the vector formed by appending a 1 ## to the user input vector. for i = 1 : num_rules rule = fis.rule(i); rule_firing_strength = firing_strength(i); if (rule_firing_strength != 0) for j = 1 : num_outputs ## Compute the singleton height for this (rule, output) pair. ## Note that for Sugeno FISs, the hedge and not flag are handled ## by adjusting the height of the singletons for each ## (rule, output) pair. [mf_index hedge not_flag] = ... get_mf_index_and_hedge (rule.consequent(j)); height = rule_firing_strength; if (hedge != 0) height = height ^ (1 / hedge); endif if (not_flag) height = 1 - height; endif ## Compute the singleton location for this (rule, output) pair. if (mf_index != 0) mf = fis.output(j).mf(mf_index); switch (mf.type) case 'constant' location = mf.params; case 'linear' location = mf.params * [user_input 1]'; otherwise location = str2func (mf.type) (mf.params, user_input); endswitch ## Store result in column of rule_output corresponding ## to the (rule, output) pair. rule_output(1, (j - 1) * num_rules + i) = location; rule_output(2, (j - 1) * num_rules + i) = height; endif endfor endif endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/evalfis_private.m000066400000000000000000000057741463010412100234570ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{output} =} evalfis_private (@var{input}, @var{fis}) ## @deftypefnx {Function File} {@var{output} =} evalfis_private (@var{input}, @var{fis}, @var{num_points}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis_private (@var{input}, @var{fis}) ## @deftypefnx {Function File} {[@var{output}, @var{rule_input}, @var{rule_output}, @var{fuzzy_output}] =} evalfis_private (@var{input}, @var{fis}, @var{num_points}) ## ## This function localizes the FIS evaluation common to the public functions ## evalfis and gensurf. All of the arguments to evalfis_private are assumed to ## be valid (limiting the inefficiency of the tests to the calling function). ## ## For more information, see the comments at the top of evalfis.m and gensurf.m. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: evalfis_private.m ## Last-Modified: 20 Aug 2012 function [output, rule_input, rule_output, fuzzy_output] = ... evalfis_private (user_input, fis, num_points = 101) ## Initialize output matrix (to prevent repeated resizing). output = zeros (rows (user_input), columns (fis.output)); ## Process one set of inputs at a time. For each row of crisp input ## values in the input matrix, add a row of crisp output values to the ## output matrix. for i = 1 : rows (user_input) rule_input = fuzzify_input (fis, user_input(i, :)); firing_strength = eval_firing_strength (fis, rule_input); if (strcmp (fis.type, 'mamdani')) rule_output = eval_rules_mamdani (fis, firing_strength, ... num_points); fuzzy_output = aggregate_output_mamdani (fis, rule_output); output(i, :) = defuzzify_output_mamdani (fis, fuzzy_output); else rule_output = eval_rules_sugeno (fis, firing_strength, ... user_input(i, :)); fuzzy_output = aggregate_output_sugeno (fis, rule_output); output(i, :) = defuzzify_output_sugeno (fis, fuzzy_output); endif endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/evalmf_private.m000066400000000000000000000102561463010412100232670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}, @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{x}, @var{param}, @var{mf_type}, @var{hedge}, @var{not_flag}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>') ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>', @var{hedge}) ## @deftypefnx {Function File} {@var{y} =} evalmf_private (@var{[x1 x2 ... xn]}, @var{[param1 ... ]}, '<@var{mf_type}>', @var{hedge}, @var{not_flag}) ## ## This function localizes the membership function evaluation without the ## parameter tests. It is called by evalmf and plotmf. For more information, ## see the comment at the top of evalmf.m. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership-function evaluate ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: evalmf_private.m ## Last-Modified: 3 Sep 2012 function y = evalmf_private (x, params, mf_type, hedge = 0, ... not_flag = false) ## Calculate and return the y values of the membership function on ## the domain x. First, get the value of the membership function ## without correcting for the hedge and not_flag. Then, for non-linear ## functions, adjust the function values for non-zero hedge and ## not_flag. switch (mf_type) case 'constant' y = eval_constant (x, params); if (not_flag) y = 1 - y; endif case 'linear' y = eval_linear (x, params); otherwise y = str2func (mf_type) (x, params); if (hedge != 0) y = y .^ hedge; endif if (not_flag) y = 1 - y; endif endswitch endfunction ##---------------------------------------------------------------------- ## Function: eval_constant ## Purpose: Return the y-values corresponding to the x-values in ## the domain for the constant function specified by the ## parameter c. ##---------------------------------------------------------------------- function y = eval_constant (x, c) y = zeros (length (x)); delta = x(2) - x(1); y_val = @(x_val) ((abs (c - x_val) < delta) * 1); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Function: eval_linear ## Purpose: For the parameters [a ... c]), return the y-values ## corresponding to the linear function y = a*x + c, where x ## takes on the the x-values in the domain. The remaining ## coefficients in the parameter list are not used -- this ## creates a two-dimensional intersection of the linear output ## membership function suitable for display together with ## other membership functions, but does not fully represent ## the output membership function. ##---------------------------------------------------------------------- function y = eval_linear (x, params) if (length (params) == 1) a = 0; c = params; else a = params(1); c = params(length (params)); endif y = zeros (length (x)); y_val = @(x_val) (a * x_val + c); y = arrayfun (y_val, x); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/fuzzify_input.m000066400000000000000000000062321463010412100232070ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{rule_input} =} fuzzify_input (@var{fis}, @var{user_input}) ## ## Return the matching degree for each (rule, input value) pair. ## For an FIS that has Q rules and N FIS input variables, the return value ## will be a Q x N matrix. ## ## @noindent ## The crisp input values are given by a row vector: ## ## @example ## user_input: [input_1 input_2 ... input_N] ## @end example ## ## @noindent ## The rule antecedents are stored in the FIS structure as row vectors: ## ## @example ## @group ## rule 1 antecedent: [in_11 in_12 ... in_1N] ## rule 2 antecedent: [in_21 in_22 ... in_2N] ## ... ... ## rule Q antecedent: [in_Q1 in_Q2 ... in_QN] ## @end group ## @end example ## ## @noindent ## Finally, the output of the function gives the matching degree ## for each (rule, input value) pair as an Q x N matrix: ## ## @example ## @group ## in_1 in_2 ... in_N ## rule_1 [mu_11 mu_12 ... mu_1N] ## rule_2 [mu_21 mu_22 ... mu_2N] ## [ ... ] ## rule_Q [mu_Q1 mu_Q2 ... mu_QN] ## @end group ## @end example ## ## Because fuzzify_input is called only by the private function ## evalfis_private, it does no error checking of the argument values. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: fuzzify_input.m ## Last-Modified: 20 Aug 2012 function rule_input = fuzzify_input (fis, user_input) num_rules = columns (fis.rule); ## num_rules == Q (above) num_inputs = columns (fis.input); ## num_inputs == N rule_input = zeros (num_rules, num_inputs); ## to prevent resizing ## For each rule i and each input j, compute the value of mu ## in the result. for i = 1 : num_rules antecedent = fis.rule(i).antecedent; for j = 1 : num_inputs mu = 0; crisp_x = user_input(j); ## Get the value of mu (with adjustment for the hedge ## and not_flag). [mf_index hedge not_flag] = ... get_mf_index_and_hedge (antecedent(j)); if (mf_index != 0) mf = fis.input(j).mf(mf_index); mu = evalmf (crisp_x, mf.params, mf.type, hedge, not_flag); endif ## Store the fuzzified input in rule_input. rule_input(i, j) = mu; endfor endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/get_mf_index_and_hedge.m000066400000000000000000000050361463010412100246710ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{[mf_index hedge not_flag]} =} get_mf_index_and_hedge (@var{mf_index_and_hedge}) ## ## Return the membership function index, hedge, and flag indicating "not" ## indicated by the argument. ## ## The membership function index, @var{mf_index}, is the positive whole number ## portion of the argument. The @var{hedge} is the fractional part of the ## argument, rounded to 2 digits and multiplied by 10. The @var{not_flag}, ## a Boolean, is true iff the argument is negative. ## ## Because get_mf_index_and_hedge is a private function, it does no error ## checking of its argument. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: get_mf_index_and_hedge.m ## Last-Modified: 20 Aug 2012 function [mf_index hedge not_flag] = ... get_mf_index_and_hedge (mf_index_and_hedge) ## Set flag to handle "not", indicated by a minus sign in the ## antecedent. if (mf_index_and_hedge < 0) not_flag = true; mf_index_and_hedge = -mf_index_and_hedge; else not_flag = false; endif ## The membership function index is the positive whole number portion ## of an element in the antecedent. mf_index = fix (mf_index_and_hedge); ## For custom hedges and the four built-in hedges "somewhat", "very", ## "extremely", and "very very", return the power to which the ## membership value should be raised. The hedges are indicated by the ## fractional part of the corresponding rule_matrix entry (rounded to ## 2 digits). if (mf_index != 0) hedge = round (100 * (mf_index_and_hedge - mf_index)) / 10; else hedge = 0; endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/init_cluster_prototypes.m000066400000000000000000000033751463010412100253030ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{V} =} init_cluster_prototypes (@var{X}, @var{k}) ## ## Initialize k cluster centers to random locations in the ranges ## given by the min/max values of each feature of the dataset. ## ## @seealso{fcm, gustafson_kessel, update_cluster_membership, update_cluster_prototypes, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: init_cluster_prototypes.m ## Last-Modified: 2 Sep 2012 function V = init_cluster_prototypes (X, k) num_features = columns (X); min_feature_value = min (X); max_feature_value = max (X); V = rand (k, num_features); for i = 1 : num_features V(:, i) = (max_feature_value(i) - min_feature_value(i)) * ... V(:, i) + min_feature_value(i); endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_builtin_language.m000066400000000000000000000035061463010412100242670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_builtin_language (@var{x}) ## ## Return 1 if @var{x} is one of the strings representing the ## built-in languages, and return 0 otherwise. The comparison is ## case-insensitive. ## ## is_builtin_language is a private function that localizes the test ## for languages handled by showrule. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_builtin_language.m ## Last-Modified: 3 Sep 2012 function y = is_builtin_language (x) y = ischar (x) && isvector (x) && ... ismember (tolower (x), {'english', ... 'chinese', 'mandarin', 'pinyin', ... 'russian', 'russkij', 'pycckii', ... 'french', 'francais', ... 'spanish', 'espanol', ... 'german', 'deutsch'}); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_domain.m000066400000000000000000000032161463010412100222230ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_domain (@var{x}) ## @deftypefnx {Function File} {@var{y} =} is_domain (@var{[x1 x2 ... xn]}) ## ## Return 1 if @var{x} is a real number of a vector of strictly increasing real ## numbers, and return 0 otherwise. ## ## is_domain is a private function that localizes the test for validity of FIS ## input variable domains. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_domain.m ## Last-Modified: 20 Aug 2012 function y = is_domain (x) y = 1; if (!(isvector (x) && isreal (x))) y = 0; elseif (length(x) > 1) for i = 1 : length (x) - 1 if (x(i) >= x(i + 1)) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_fis.m000066400000000000000000000045351463010412100215420ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_fis (@var{x}) ## ## Return 1 if the argument @var{x} is a valid FIS (Fuzzy Inference System) ## structure, and return 0 otherwise. ## ## is_fis is a private function that localizes the test for valid FIS structs. ## For efficiency, is_fis only determines if the argument @var{x} is a structure ## with the expected fields, and that these fields have the expected types. ## ## Examples: ## @example ## @group ## fis = newfis('FIS'); ## is_fis(fis) ==> 1 ## @end group ## @end example ## ## @example ## @group ## x = pi; ## is_fis(x) ==> 0 ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_fis.m ## Last-Modified: 20 Aug 2012 function y = is_fis (x) y = isstruct (x) && ... isfield (x, 'name') && is_string (x.name) && ... isfield (x, 'type') && is_string (x.type) && ... isfield (x, 'andMethod') && is_string (x.andMethod) && ... isfield (x, 'orMethod') && is_string (x.orMethod) && ... isfield (x, 'impMethod') && is_string (x.impMethod) && ... isfield (x, 'aggMethod') && is_string (x.aggMethod) && ... isfield (x, 'defuzzMethod') && is_string (x.defuzzMethod) && ... isfield (x, 'input') && is_io_vector (x.input) && ... isfield (x, 'output') && is_io_vector (x.output) && ... isfield (x, 'rule') && is_rule_vector (x.rule); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_format.m000066400000000000000000000030141463010412100222400ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_format (@var{x}) ## ## Return 1 if @var{x} is one of the strings 'verbose', 'symbolic', and ## 'indexed', and return 0 otherwise. The comparison is case-insensitive. ## ## is_format is a private function that localizes the test for valid fis rule ## input/output formats. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_format.m ## Last-Modified: 20 Aug 2012 function y = is_format (x) y = ischar (x) && isvector (x) && ... ismember (tolower (x), {'verbose', 'symbolic', 'indexed'}); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_grid_spec.m000066400000000000000000000027211463010412100227130ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_grid_spec (@var{x}) ## ## Return 1 if @var{x} is an integer or vector of two integers, each >= 2, ## and return 0 otherwise. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_grid_spec.m ## Last-Modified: 20 Aug 2012 function y = is_grid_spec (x, fis) if (!(isvector (x) && (length (x) <= 2))) y = 0; else y = 1; for next_x = x if (!(is_int (next_x) && next_x >= 2)) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_input_matrix.m000066400000000000000000000033561463010412100235040ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_input_matrix (@var{x}, @var{fis}) ## ## Return 1 if @var{x} is a valid matrix of input values for the given FIS ## structure, and return 0 otherwise. The FIS structure @var{fis} is assumed ## to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_input_matrix.m ## Last-Modified: 20 Aug 2012 function y = is_input_matrix (x, fis) if (!(ismatrix (x) && isreal (x) && ... (columns (x) == columns (fis.input)))) y = 0; else y = 1; for j = 1 : columns (x) range = fis.input(j).range; for i = 1 : rows(x) if (!(isscalar (x(i, j)) && ... x(i,j) >= range(1) && ... x(i,j) <= range(2))) y = 0; endif endfor endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_int.m000066400000000000000000000036211463010412100215460ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_int (@var{x}) ## ## Return 1 if @var{x} is an integer-valued real scalar, and return 0 otherwise. ## ## is_int is a private function that localizes the test for integers. ## In Octave, integer constants such as 1 are not represented by ints ## internally: isinteger(1) returns 0. ## ## Examples: ## @example ## @group ## is_int(6) ==> true ## is_int(6.2) ==> false ## is_int(ones(2)) ==> false ## is_int(6 + 0i) ==> true ## is_int(0) ==> true ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_int.m ## Last-Modified: 24 May 2024 function y = is_int (x) y = isscalar (x) && isreal (x) && (fix (x) == x); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_int(6), true) %!assert(is_int(6.2), false) %!assert(is_int(ones(2)), false) %!assert(is_int(6 + 0i), true) %!assert(is_int(0), true) fuzzy-logic-toolkit-0.6.0/inst/private/is_io_struct.m000066400000000000000000000033761463010412100227760ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_io_struct (@var{x}) ## ## Return 1 if the argument @var{x} is a valid input or output structure for an ## FIS (Fuzzy Inference System), and return 0 otherwise. ## ## is_io_struct is a private function that localizes the test for valid input ## and output structs. For efficiency, is_io_struct only determines if the ## argument @var{x} is a structure with the expected fields, and that these ## fields have the expected types. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_io_struct.m ## Last-Modified: 20 Aug 2012 function y = is_io_struct (x) y = isstruct (x) && ... isfield (x, 'name') && is_string (x.name) && ... isfield (x, 'range') && are_bounds (x.range) && ... isfield (x, 'mf') && is_mf_vector (x.mf); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_io_vector.m000066400000000000000000000031301463010412100227400ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_io_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS input/output variable structures, ## and return 0 otherwise. ## ## is_io_vector is a private function that localizes the test for valid FIS ## structure members 'input' and 'output'. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_io_vector.m ## Last-Modified: 20 Aug 2012 function y = is_io_vector (x) y = 1; if (isequal(x, [])) y = 1; elseif (!isvector(x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_io_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_mf_index.m000066400000000000000000000040161463010412100225440ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_index (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf_index}) ## ## If @var{in_or_out} == 'input', return 1 if @var{mf_index} is a valid ## membership function index for the input variable with index @var{var_index}, ## and return 0 otherwise. ## ## If @var{in_or_out} == 'output', return 1 if @var{mf_index} is a valid ## membership function index for the output variable with index @var{var_index}, ## and return 0 otherwise. ## ## is_mf_index is a private function that localizes the test for valid FIS ## membership function indices. The arguments @var{fis}, @var{in_or_out}, and ## @var{var_index} are assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_index.m ## Last-Modified: 20 Aug 2012 function y = is_mf_index (fis, in_or_out, var_index, mf_index) y = is_int (mf_index) && (mf_index >= 1); if (strcmp (in_or_out, 'input')) y = y && (mf_index <= length (fis.input(var_index).mf)); else y = y && (mf_index <= length (fis.output(var_index).mf)); endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_mf_struct.m000066400000000000000000000032771463010412100227710ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_struct (@var{x}) ## ## Return 1 if the argument @var{x} is a valid FIS (Fuzzy Inference System) ## membership function structure, and return 0 otherwise. ## ## is_mf_struct is a private function that localizes the test for valid FIS ## membership function structs. For efficiency, is_mf_struct only determines if ## the argument @var{x} is a structure with the expected fields, but the types ## of the fields are not verified. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_struct.m ## Last-Modified: 20 Aug 2012 function y = is_mf_struct (x) y = isstruct (x) && ... isfield (x, 'name') && ... isfield (x, 'type') && ... isfield (x, 'params'); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_mf_vector.m000066400000000000000000000030541463010412100227400ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_mf_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS membership function structures, and ## return 0 otherwise. ## ## is_mf_vector is a private function that localizes the test for validity. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_mf_vector.m ## Last-Modified: 20 Aug 2012 function y = is_mf_vector (x) y = 1; if (isequal(x, [])) y = 1; elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_mf_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_output_index.m000066400000000000000000000026301463010412100235020ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_output_index (@var{x}, @var{fis}) ## ## Return 1 if @var{x} is a valid output index for the given FIS structure, and ## return 0 otherwise. The FIS structure @var{fis} is assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_output_index.m ## Last-Modified: 20 Aug 2012 function y = is_output_index (x, fis) y = is_pos_int (x) && (x <= columns (fis.output)); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_pos_int.m000066400000000000000000000034051463010412100224270ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_pos_int (@var{x}) ## ## Return 1 if @var{x} is a positive integer-valued real scalar, and return 0 ## otherwise. ## ## Examples: ## @example ## @group ## is_pos_int(6) ==> true ## is_pos_int(6.2) ==> false ## is_pos_int(ones(2)) ==> false ## is_pos_int(6 + 0i) ==> true ## is_pos_int(0) ==> false ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_pos_int.m ## Last-Modified: 24 May 2024 function y = is_pos_int (x) y = is_int (x) && (x > 0); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_pos_int(6), true) %!assert(is_pos_int(6.2), false) %!assert(is_pos_int(ones(2)), false) %!assert(is_pos_int(6 + 0i), true) %!assert(is_pos_int(0), false) fuzzy-logic-toolkit-0.6.0/inst/private/is_real.m000066400000000000000000000037431463010412100217040ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_real (@var{x}) ## ## Return 1 if @var{x} is an real scalar, and return 0 otherwise. ## ## is_real is a private function that localizes the test for real scalars. ## ## Examples: ## @example ## @group ## is_real(6) ==> true ## is_real(6.2) ==> true ## is_real(ones(2)) ==> false ## is_real(6 + 0i) ==> true ## is_real(6 + i) ==> false ## is_real([0]) ==> true ## is_real([0 0]) ==> false ## is_real('h') ==> false ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_real.m ## Last-Modified: 24 May 2024 function y = is_real (x) y = isnumeric(x) && isscalar (x) && isreal (x); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_real(6), true) %!assert(is_real(6.2), true) %!assert(is_real(ones(2)), false) %!assert(is_real(6 + 0i), true) %!assert(is_real(6 + i), false) %!assert(is_real([0]), true) %!assert(is_real([0 0]), false) %!assert(is_real('h'), false) fuzzy-logic-toolkit-0.6.0/inst/private/is_real_matrix.m000066400000000000000000000040471463010412100232660ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_real_matrix (@var{x}) ## ## Return 1 if @var{x} is a non-empty matrix of real or integer-valued scalars, ## and return 0 otherwise. ## ## Examples: ## @example ## @group ## is_real_matrix(6) ==> 1 ## is_real_matrix([]) ==> 1 ## is_real_matrix([1 2; 3 4]) ==> 1 ## is_real_matrix([1 2 3]) ==> 1 ## is_real_matrix([i 2 3]) ==> 0 ## is_real_matrix("hello") ==> 0 ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_real_matrix.m ## Last-Modified: 24 May 2024 function y = is_real_matrix (x) if (!ismatrix (x)) y = 0; else y = 1; for i = 1 : numel (x) if (!(isnumeric (x(i)) && isscalar (x(i)) && isreal (x(i)))) y = 0; endif endfor endif endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_real_matrix(6), 1) %!assert(is_real_matrix([]), 1) %!assert(is_real_matrix([1 2; 3 4]), 1) %!assert(is_real_matrix([1 2 3]), 1) %!assert(is_real_matrix([i 2 3]), 0) %!assert(is_real_matrix("hello"), 0) fuzzy-logic-toolkit-0.6.0/inst/private/is_ref_input.m000066400000000000000000000034771463010412100227600ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_ref_input (@var{x}, @var{fis}, @var{graphed_inputs}) ## ## Return 1 if @var{x} is a vector of constants for the FIS structure inputs ## that are not included in the list of inputs, and return 0 otherwise. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_ref_input.m ## Last-Modified: 20 Aug 2012 function y = is_ref_input (x, fis, graphed_inputs) y = 1; num_fis_inputs = columns (fis.input); num_graphed_inputs = length (graphed_inputs); if (!(is_row_vector (x) && (length (x) == num_fis_inputs))) y = 0; else for i = 1 : num_fis_inputs range = fis.input(i).range; if (!(isreal (x(i)) && isscalar (x(i)))) y = 0; elseif (!ismember (i, graphed_inputs) && ... (x(i) < range(1) || x(i) > range(2))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_row_vector.m000066400000000000000000000032331463010412100231440ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_row_vector (@var{x}) ## ## Return 1 if @var{x} is a non-empty row vector, and return 0 otherwise. ## ## Examples: ## @example ## @group ## is_row_vector([]) ==> false ## is_row_vector([1 2 3]) ==> true ## is_row_vector([1; 2; 3]) ==> false ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_row_vector.m ## Last-Modified: 24 May 2024 function y = is_row_vector (x) y = isvector (x) && (rows (x) == 1); endfunction ## Tests corresponding to examples in the comment at the top of this file. %!assert(is_row_vector([]), false) %!assert(is_row_vector([1 2 3]), true) %!assert(is_row_vector([1; 2; 3]), false) fuzzy-logic-toolkit-0.6.0/inst/private/is_rule_index_list.m000066400000000000000000000036211463010412100241450ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_index_list (@var{x}, @var{max_index}) ## ## Return 1 if @var{x} is a valid rule index or a vector of valid rule indices, ## and return 0 otherwise. ## ## Examples: ## @example ## @group ## is_rule_index_list(2, 5) ==> 1 ## is_rule_index_list([1 2], 5) ==> 1 ## is_rule_index_list([1, 2], 5) ==> 1 ## is_rule_index_list([1; 2], 5) ==> 1 ## is_rule_index_list(0, 0) ==> 0 ## is_rule_index_list([4 5], 2) ==> 0 ## is_rule_index_list([], 2) ==> 0 ## @end group ## @end example ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_index_list.m ## Last-Modified: 24 May 2024 function y = is_rule_index_list (x, max_index) if (is_pos_int (x)) y = (x <= max_index); elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!(is_pos_int (x(i)) && (x(i) <= max_index))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_rule_struct.m000066400000000000000000000033361463010412100233320ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_struct (@var{x}) ## ## Return 1 if the argument @var{x} is a valid FIS (Fuzzy Inference System) rule ## structure, and return 0 otherwise. ## ## is_rule_struct is a private function that localizes the test for valid FIS ## rule structs. For efficiency, is_rule_struct only determines if the argument ## @var{x} is a structure with the expected fields, but the types of the fields ## are not verified. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_struct.m ## Last-Modified: 20 Aug 2012 function y = is_rule_struct (x) y = isstruct (x) && ... isfield (x, 'antecedent') && ... isfield (x, 'consequent') && ... isfield (x, 'weight') && ... isfield (x, 'connection'); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_rule_vector.m000066400000000000000000000030611463010412100233030ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_rule_vector (@var{x}) ## ## Return 1 if @var{x} is a vector of FIS rule structures, and return 0 ## otherwise. ## ## is_rule_vector is a private function that localizes the test for valid FIS ## 'rule' members. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_rule_vector.m ## Last-Modified: 20 Aug 2012 function y = is_rule_vector (x) if (isequal(x, [])) y = 1; elseif (!isvector (x)) y = 0; else y = 1; for i = 1 : length (x) if (!is_rule_struct (x(i))) y = 0; endif endfor endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_string.m000066400000000000000000000031431463010412100222610ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_string (@var{x}) ## ## Return 1 if @var{x} is a character vector, and return 0 otherwise. ## ## is_string is a private function that localizes the test for valid Octave ## strings, which may need to be changed in the future. Octave 3.2.4 implements ## strings as character vectors. In subsequent versions of Octave, the internal ## implementation of strings may change, or a built-in Octave test 'isstring' ## may be implemented. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_string.m ## Last-Modified: 20 Aug 2012 function y = is_string (x) y = ischar (x) && isvector (x); endfunction fuzzy-logic-toolkit-0.6.0/inst/private/is_var_index.m000066400000000000000000000036321463010412100227350ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} is_var_index (@var{fis}, @var{in_or_out}, @var{var_index}) ## ## If @var{in_or_out} == 'input', return 1 if @var{var_index} is a valid input ## variable index for the given FIS structure, and return 0 otherwise. ## ## If @var{in_or_out} == 'output', return 1 if @var{var_index} is a valid output ## variable index for the given FIS structure, and return 0 otherwise. ## ## is_var_index is a private function that localizes the test for valid FIS ## input and output variable indices. The arguments @var{fis} and ## @var{in_or_out} are assumed to be valid. ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private parameter-test ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: is_var_index.m ## Last-Modified: 20 Aug 2012 function y = is_var_index (fis, in_or_out, var_index) y = is_int (var_index) && (var_index >= 1); if (strcmp (in_or_out, 'input')) y = y && (var_index <= length (fis.input)); else y = y && (var_index <= length (fis.output)); endif endfunction fuzzy-logic-toolkit-0.6.0/inst/private/square_distance_matrix.m000066400000000000000000000064101463010412100250160ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{sqr_dist} =} square_distance_matrix (@var{X}, @var{V}) ## ## Return a k x n matrix of ||x - v||^2 values (the squares of the ## distances between input data points x and cluster centers v), where ## k is the number of cluster centers and n is the number of data points. ## ## The element sqr_dist(i, j) will contain the square of the distance ## between the cluster center V(i, :) and the data point X(j, :). ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy private ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: square_dist_matrix.m ## Last-Modified: 5 Jun 2024 function sqr_dist = square_distance_matrix (X, V) sqr_dist = (sumsq (X, 2) + (sumsq (V, 2))' - 2 * X * V')'; endfunction %!test %! ## Test the faster version of this function (above) by comparing its %! ## output with the output of the previous, nested-for-loop version (below). %! ## %! ## The test is run 100 times (but is reported by the Octave interpreter as %! ## "1 test"). In each of the 100 test runs, the vectorized and loop versions %! ## of the function are called using randomly generated matrices X, V. %! ## %! ## The sizes of X and V, however, aren't random: X has 100 rows, 8 cols, %! ## and V has 5 rows, 8 cols. That is, the entries in X and V are random %! ## values in the range [0, 1], but the sizes of X and V are hard-coded. %! ## %! ## The test is passed if all entries of the two results differ by less than %! ## a tolerance of 10e-9 in all 100 test runs. %! %! function sqr_dist = square_distance_matrix_using_for_loops (X, V) %! k = rows (V); %! n = rows (X); %! sqr_dist = zeros (k, n); %! for i = 1 : k %! Vi = V(i, :); %! for j = 1 : n %! Vi_to_Xj = X(j, :) - Vi; %! sqr_dist(i, j) = sum (Vi_to_Xj .* Vi_to_Xj); %! endfor %! endfor %! endfunction %! %! ## Fixed array sizes and tolerance for the test. %! %! n = 100; %! f = 8; %! k = 5; %! tolerance = 10e-9; %! %! ## Run the test 100 times, in a loop. Each test run is successful if %! ## the vectorized and nested-for-loop version of the function produce %! ## results within the hard-coded tolerance. %! %! for i = 1 : 100 %! X = rand (n, f); %! V = rand (k, f); %! vec_result = square_distance_matrix (X, V); %! loop_result = square_distance_matrix_using_for_loops (X, V); %! assert (abs (vec_result - loop_result) < tolerance) %! endfor fuzzy-logic-toolkit-0.6.0/inst/private/update_cluster_membership.m000066400000000000000000000116211463010412100255160ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{Mu} =} update_cluster_membership (@var{V}, @var{X}, @var{m}, @var{k}, @var{n}, @var{sqr_dist}) ## ## Compute Mu for each (cluster center, input point) pair. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_prototypes, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Authors: Tony Trew, L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: update_cluster_membership.m ## Last-Modified: 5 Jun 2024 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.4 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition) and Step 3 of Algorithm 4.1 in ## Fuzzy and Neural Control, by Robert Babuska, November 2009, ## p. 63. ##---------------------------------------------------------------------- function Mu = update_cluster_membership (V, X, m, k, n, sqr_dist) sqr_dist_zeros = (sqr_dist == 0); num_zeros = sum (sum (sqr_dist_zeros)); if (num_zeros == 0) exponent = 1.0 / (m - 1); summation = (sqr_dist ./ sum(sqr_dist)).^exponent; if (all (all (summation != 0))) Mu = 1.0 ./ summation; Mu ./= sum (Mu); else error ("division by 0 in update_cluster_membership'\n"); endif else Mu = sqr_dist_zeros / num_zeros; endif endfunction %!test %! ## Test the vectorized version of this function (above) by comparing its %! ## output with the output of the previous, nested-for-loop version (below). %! ## %! ## The test is run 100 times (but is reported by the Octave interpreter as %! ## "1 test"). In each of the 100 test runs, the vectorized and loop versions %! ## of the function are called using randomly generated matrices X, V. %! ## %! ## The sizes of X and V, however, aren't random: X has 100 rows, 8 cols, %! ## and V has 5 rows, 8 cols. That is, the entries in X and V are random %! ## values in the range [0, 1], but the sizes of X and V are hard-coded. %! ## %! ## The test is passed if all entries of the two results differ by less than %! ## a tolerance of 10e-9 in all 100 test runs. %! %! function Mu = update_cluster_membership_using_for_loops (V, X, m, k, n, sqr_dist) %! %! Mu = zeros (k, n); %! %! if (min (min (sqr_dist)) > 0) %! exponent = 1.0 / (m - 1); %! for i = 1 : k %! for j = 1 : n %! summation = 0.0; %! for l = 1 : k %! summation += (sqr_dist(i, j) / sqr_dist(l, j))^exponent; %! endfor %! if (summation != 0) %! Mu(i, j) = 1.0 / summation; %! else %! error ("division by 0 in update_cluster_membership'\n"); %! endif %! endfor %! endfor %! %! else %! num_zeros = 0; %! for i = 1 : k %! for j = 1 : n %! if (sqr_dist(i, j) == 0) %! num_zeros++; %! Mu(i, j) = 1.0; %! endif %! endfor %! endfor %! Mu = Mu / num_zeros; %! endif %! %! endfunction %! %! ## Fixed array sizes, exponent, and tolerance for the test. %! %! n = 100; %! f = 8; %! k = 5; %! m = 2; %! tolerance = 10e-9; %! %! ## Run the test 100 times, in a loop. In the last 5 test runs, make 3 of %! ## the data points in X identical to cluster centers in V in order to test %! ## the else case in the function. %! %! ## Each test run is successful if the vectorized and nested-for-loop %! ## version of the function produce results within the hard-coded tolerance. %! %! for i = 1 : 100 %! X = rand (n, f); %! V = rand (k, f); %! %! if (i > 95) %! X(1:3) = V(1:3); %! endif %! %! sqr_dist = square_distance_matrix (X, V); %! vec_result = update_cluster_membership (V, X, m, k, n, sqr_dist); %! loop_result = update_cluster_membership_using_for_loops (V, X, m, k, n, sqr_dist); %! assert (abs (vec_result - loop_result) < tolerance) %! endfor fuzzy-logic-toolkit-0.6.0/inst/private/update_cluster_prototypes.m000066400000000000000000000040471463010412100256170ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{V} =} update_cluster_prototypes (@var{Mu_m}, @var{X}, @var{k}) ## ## Update the cluster centers to correspond to the given membership ## function values. ## ## @seealso{fcm, gustafson_kessel, init_cluster_prototypes, update_cluster_membership, compute_cluster_obj_fcn, compute_cluster_convergence} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy partition clustering ## Directory: fuzzy-logic-toolkit/inst/private/ ## Filename: update_cluster_prototypes.m ## Last-Modified: 2 Sep 2012 ##---------------------------------------------------------------------- ## Note: This function is an implementation of Equation 13.5 in ## Fuzzy Logic: Intelligence, Control and Information, by ## J. Yen and R. Langari, Prentice Hall, 1999, page 380 ## (International Edition). ##---------------------------------------------------------------------- function V = update_cluster_prototypes (Mu_m, X, k) V = Mu_m * X; sum_Mu_m = sum (Mu_m'); if (prod (sum_Mu_m) == 0) error ("division by 0 in function update_cluster_prototypes\n"); endif for i = 1 : k V(i, :) /= sum_Mu_m(i); endfor endfunction fuzzy-logic-toolkit-0.6.0/inst/psigmf.m000066400000000000000000000115311463010412100200730ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} psigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} psigmf (@var{[x1 x2 ... xn]}, @var{[a1 c1 a2 c2]}) ## ## For a given domain @var{x} and parameters @var{params} (or ## @var{[a1 c1 a2 c2]}), return the corresponding @var{y} values for the product ## of two sigmoidal membership functions. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a1}, @var{c1}, @var{a2}, and @var{c2} must ## be real numbers. This membership function satisfies the equation: ## @example ## f(x) = (1/(1 + exp(-a1*(x - c1)))) * (1/(1 + exp(-a2*(x - c2)))) ## @end example ## ## @noindent ## The function is bounded above by 1 and below by 0. ## ## If @var{a1} is positive, @var{a2} is negative, and @var{c1} and @var{c2} are ## far enough apart with @var{c1} < @var{c2}, then: ## @itemize @w ## @item ## (a1)/4 ~ the rising slope at c1 ## @item ## c1 ~ the left inflection point ## @item ## (a2)/4 ~ the falling slope at c2 ## @item ## c2 ~ the right inflection point ## @end itemize ## ## @noindent ## and at each inflection point, the value of the function is about 0.5: ## @itemize @w ## @item ## f(c1) ~ f(c2) ~ 0.5. ## @end itemize ## ## @noindent ## (Here, the symbol ~ means "approximately equal".) ## ## @noindent ## To run the demonstration code, type "@t{demo psigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, sigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: psigmf.m ## Last-Modified: 30 May 2024 function y = psigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("psigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("psigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('psigmf', params)) error ("psigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on ## the domain x. a1 = params(1); c1 = params(2); a2 = params(3); c2 = params(4); y_val = @(x_val) 1 / (1 + exp (-a1 * (x_val - c1))) * ... 1 / (1 + exp (-a2 * (x_val - c2))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.5 20 -0.3 60]; %! y1 = psigmf(x, params); %! params = [0.3 20 -0.2 60]; %! y2 = psigmf(x, params); %! params = [0.2 20 -0.1 60]; %! y3 = psigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'psigmf demo'); %! plot(x, y1, 'r;params = [0.5 20 -0.3 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.3 20 -0.2 60];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.2 20 -0.1 60];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [0.3 20 -0.2 60]; %! y = [2.4726e-03 0.047424 0.4998 0.9502 0.9796 0.8807 ... %! 0.5000 0.1192 0.017986 2.4726e-03 3.3535e-04]; %! z = psigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! psigmf() %!error %! psigmf(1) %!error %! psigmf(1, 2, 3) %!error %! psigmf([1 0], 2) %!error %! psigmf(1, 2) %!error %! psigmf(0:100, []) %!error %! psigmf(0:100, [30]) %!error %! psigmf(0:100, [2 3]) %!error %! psigmf(0:100, [90 80 30]) %!error %! psigmf(0:100, 'abc') fuzzy-logic-toolkit-0.6.0/inst/readfis.m000066400000000000000000000533201463010412100202250ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} readfis () ## @deftypefnx {Function File} {@var{fis} =} readfis (@var{filename}) ## ## Read the information in an FIS file, and using this information, create and ## return an FIS structure. If called without any arguments or with an empty ## string as an argument, present the user with a file dialog GUI. If called ## with a @var{filename} that does not end with '.fis', append '.fis' to the ## @var{filename}. The @var{filename} is expected to be a string. ## ## Six examples of the input file format: ## @itemize @bullet ## @item ## cubic_approximator.fis ## @item ## heart_disease_risk.fis ## @item ## investment_portfolio.fis ## @item ## linear_tip_calculator.fis ## @item ## mamdani_tip_calculator.fis ## @item ## sugeno_tip_calculator.fis ## @end itemize ## ## Six example scripts that use readfis: ## @itemize @bullet ## @item ## cubic_approx_demo.m ## @item ## heart_disease_demo_2.m ## @item ## investment_portfolio_demo.m ## @item ## linear_tip_demo.m ## @item ## mamdani_tip_demo.m ## @item ## sugeno_tip_demo.m ## @end itemize ## ## @seealso{writefis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: readfis.m ## Last-Modified: 1 Jun 2024 function fis = readfis (filename = '') ## If readfis was not called with 0 or 1 arguments, or if the argument ## is not a string, print an error message and halt. if (nargin > 1) error ("readfis requires 0 or 1 arguments\n"); elseif ((nargin == 1) && !is_string (filename)) error ("readfis's argument must be a string\n"); endif ## Open the input file. fid = open_input_file (filename); ## Read the [System], [Input], [Output], and [Rules] ## sections of the input file. [fis, num_inputs, num_outputs, num_rules, line_num] = ... init_fis_struct (fid); [fis, line_num] = read_fis_inputs (fid, fis, num_inputs, line_num); [fis, line_num] = read_fis_outputs (fid, fis, num_outputs, line_num); fis = read_rules (fid, fis, num_inputs, num_outputs, num_rules, ... line_num); ## Close the input file. fclose (fid); endfunction ##---------------------------------------------------------------------- ## Function: open_input_file ## Purpose: Open the input file specified by the filename. If the ## filename does not end with ".fis", then append ".fis" to ## the filename before opening. Return an fid if successful. ## Otherwise, print an error message and halt. ##---------------------------------------------------------------------- function fid = open_input_file (filename) ##-------------------------------------------------------------------- ## If the filename is not empty, and if the last four characters of ## the filename are not '.fis', append '.fis' to the filename. If the ## filename is empty, use a dialog to select the input file. ##-------------------------------------------------------------------- fn_len = length (filename); if (fn_len == 0) dialog = 1; else dialog = 0; endif if (((fn_len >= 4) && ... !strcmp(".fis",filename(fn_len-3:fn_len))) || ... ((fn_len > 0) && (fn_len < 4))) filename = [filename ".fis"]; elseif (dialog) system_command = sprintf ("zenity --file-selection; echo $file", ... filename); [dialog_error, filename] = system (file = system_command); if (dialog_error) puts ("Type 'help readfis' for more information.\n"); error ("error selecting file using dialog\n"); endif filename = strtrim (filename); endif ##-------------------------------------------------------------------- ## Open input file. ##-------------------------------------------------------------------- [fid, msg] = fopen (filename, "r"); if (fid == -1) if (dialog) system ('zenity --error --text "Error opening input file."'); endif puts ("Type 'help readfis' for more information.\n"); printf ("Error opening input file: %s\n", msg); error ("error opening input file\n"); endif endfunction ##---------------------------------------------------------------------- ## Function: init_fis_struct ## Purpose: Read the [System] section of the input file. Using the ## strings read from the input file, create a new FIS. If an ## error in the format of the input file is found, print an ## error message and halt. ##---------------------------------------------------------------------- function [fis, num_inputs, num_outputs, num_rules, line_num] = ... init_fis_struct (fid) ##-------------------------------------------------------------------- ## Read the [System] section. ##-------------------------------------------------------------------- line_num = 1; [line, line_num] = get_line (fid, line_num); [line, line_num] = get_line (fid, line_num); [fis_name, count] = sscanf (line, "Name = '%s", "C"); if (count != 1) error ("line %d: name of FIS expected\n", --line_num); endif fis_name = trim_last_char (fis_name); [line, line_num] = get_line (fid, line_num); [fis_type, count] = sscanf (line, "Type = '%s", "C"); if (count != 1) error ("line %d: type of FIS expected\n", --line_num); endif fis_type = trim_last_char (fis_type); [line, line_num] = get_line (fid, line_num); [fis_version, count] = sscanf (line, "Version = %f", "C"); if (count != 1) error ("line %d: version of FIS expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_inputs, count] = sscanf (line, "NumInputs = %d", "C"); if (count != 1) error ("line %d: number of inputs expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_outputs, count] = sscanf (line, "NumOutputs = %d", "C"); if (count != 1) error ("line %d: number of oututs expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [num_rules, count] = sscanf (line, "NumRules = %d", "C"); if (count != 1) error ("line %d: number of rules expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [and_method, count] = sscanf (line, "AndMethod = '%s", "C"); if (count != 1) error ("line %d: and method expected\n", --line_num); endif and_method = trim_last_char (and_method); [line, line_num] = get_line (fid, line_num); [or_method, count] = sscanf (line, "OrMethod = '%s", "C"); if (count != 1) error ("line %d: or method expected\n", --line_num); endif or_method = trim_last_char (or_method); [line, line_num] = get_line (fid, line_num); [imp_method, count] = sscanf (line, "ImpMethod = '%s", "C"); if (count != 1) error ("line %d: implication method expected\n", --line_num); endif imp_method = trim_last_char (imp_method); [line, line_num] = get_line (fid, line_num); [agg_method, count] = sscanf (line, "AggMethod = '%s", "C"); if (count != 1) error ("line %d: aggregation method expected\n", --line_num); endif agg_method = trim_last_char (agg_method); [line, line_num] = get_line (fid, line_num); [defuzz_method, count] = sscanf (line, "DefuzzMethod = '%s", "C"); if (count != 1) error ("line %d: defuzzification method expected\n", --line_num); endif defuzz_method = trim_last_char (defuzz_method); ##-------------------------------------------------------------------- ## Create a new FIS structure using the strings read from the ## input file. ##-------------------------------------------------------------------- fis = struct ('name', fis_name, ... 'type', fis_type, ... 'version', fis_version, ... 'andMethod', and_method, ... 'orMethod', or_method, ... 'impMethod', imp_method, ... 'aggMethod', agg_method, ... 'defuzzMethod', defuzz_method, ... 'input', [], ... 'output', [], ... 'rule', []); endfunction ##---------------------------------------------------------------------- ## Function: read_fis_inputs ## Purpose: For each FIS input, read the [Input] section from ## file. Add each new input and its membership functions to ## the FIS structure. ##---------------------------------------------------------------------- function [fis, line_num] = read_fis_inputs (fid, fis, num_inputs, ... line_num) for i = 1 : num_inputs [next_fis_input, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, 'input'); if (i == 1) fis.input = next_fis_input; else fis.input = [fis.input, next_fis_input]; endif ##------------------------------------------------------------------ ## Read membership function info for the current FIS input from ## file. Add each new membership function to the FIS struct. ##------------------------------------------------------------------ for j = 1 : num_mfs [next_mf, line_num] = get_next_mf (fid, line_num, i, j, 'input'); if (j == 1) fis.input(i).mf = next_mf; else fis.input(i).mf = [fis.input(i).mf, next_mf]; endif endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: read_fis_outputs ## Purpose: For each FIS output, read the [Output] section from ## file. Add each new output and its membership functions to ## the FIS structure. ##---------------------------------------------------------------------- function [fis, line_num] = read_fis_outputs (fid, fis, num_outputs, ... line_num) for i = 1 : num_outputs [next_fis_output, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, 'output'); if (i == 1) fis.output = next_fis_output; else fis.output = [fis.output, next_fis_output]; endif ##------------------------------------------------------------------ ## Read membership function info for the current FIS output from ## file. Add each new membership function to the FIS struct. ##------------------------------------------------------------------ for j = 1 : num_mfs [next_mf, line_num] = get_next_mf (fid, line_num, i, j, 'output'); if (j == 1) fis.output(i).mf = next_mf; else fis.output(i).mf = [fis.output(i).mf, next_mf]; endif endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: read_rules ## Purpose: Read the [Rules] section from file, and add the rules to ## the FIS. ##---------------------------------------------------------------------- function fis = read_rules (fid, fis, num_inputs, num_outputs, ... num_rules, line_num) [line, line_num] = get_line (fid, line_num); for i = 1 : num_rules [next_rule, line_num] = ... get_next_rule (fid, line_num, num_inputs, num_outputs); if (i == 1) fis.rule = next_rule; else fis.rule = [fis.rule, next_rule]; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: get_next_fis_io ## Purpose: Read the next [Input] or [Output] section of the ## input file. Using the info read from the input file, create ## a new FIS input or output structure. If an error in the ## format of the input file is found, print an error message ## and halt. ##---------------------------------------------------------------------- function [next_fis_io, num_mfs, line_num] = ... get_next_fis_io (fid, line_num, i, in_or_out) ##-------------------------------------------------------------------- ## Read [Input] or [Output] section from file. ##-------------------------------------------------------------------- [line, line_num] = get_line (fid, line_num); if (strcmp ('input', in_or_out)) [io_index, count] = sscanf (line, "[Input %d", "C"); else [io_index, count] = sscanf (line, "[Output %d", "C"); endif if ((count != 1) || (io_index != i)) error ("line %d: next input or output expected\n", --line_num); endif [line, line_num] = get_line (fid, line_num); [var_name, count] = sscanf (line, "Name = '%s", "C"); if (count != 1) error ("line %d: name of %s %d expected\n", --line_num, ... in_or_out, i); endif var_name = trim_last_char (var_name); [line, line_num] = get_line (fid, line_num); [range_low, range_high, count] = sscanf (line, ... "Range = [ %f %f ]", "C"); if ((count != 2) || (range_low > range_high)) error ("line %d: range for %s %d expected\n", --line_num, ... in_or_out, i); endif [line, line_num] = get_line (fid, line_num); [num_mfs, count] = sscanf (line, "NumMFs = %d", "C"); if (count != 1) error ("line %d: number of MFs for %s %d expected\n", ... --line_num, in_or_out, i); endif ##-------------------------------------------------------------------- ## Create a new FIS input or output structure. ##-------------------------------------------------------------------- next_fis_io = struct ('name', var_name, 'range', ... [range_low, range_high], 'mf', []); endfunction ##---------------------------------------------------------------------- ## Function: get_next_mf ## Purpose: Read information specifying the jth membership function for ## Input or Output (if in_or_out is 'input' or 'output', ## respectively) from the input file. Create a new membership ## function structure using the info read. If an error in the ## format of the input file is found, print an error message ## and halt. ##---------------------------------------------------------------------- function [next_mf, line_num] = get_next_mf (fid, line_num, i, j, ... in_or_out) ##-------------------------------------------------------------------- ## Read membership function info for the new FIS input or output ## from file. ##-------------------------------------------------------------------- [line, line_num] = get_line (fid, line_num); if (compare_versions (OCTAVE_VERSION(), "3.8.0", ">=")) line_vec = discard_empty_strings (ostrsplit (line, "=':,[] \t", true)); else line_vec = discard_empty_strings (strsplit (line, "=':,[] \t", true)); endif mf_index = sscanf (line_vec{1}, "MF %d", "C"); mf_name = line_vec{2}; mf_type = line_vec{3}; if (mf_index != j) error ("line %d: next MF for %s %d expected\n", --line_num, in_or_out, i); endif j = 1; for i = 4 : length (line_vec) [mf_params(j++), count] = sscanf (line_vec{i}, "%f", "C"); if (count != 1) error ("line %d: %s %d MF%d params expected\n", --line_num, in_or_out, i, j); endif endfor ##-------------------------------------------------------------------- ## Create a new membership function structure. ##-------------------------------------------------------------------- next_mf = struct ('name', mf_name, 'type', mf_type, 'params', ... mf_params); endfunction ##---------------------------------------------------------------------- ## Function: get_next_rule ## Purpose: Read the next rule from the input file. Create a struct for ## the new rule. If an error in the format of the input file ## is found, print an error message and halt. ##---------------------------------------------------------------------- function [next_rule, line_num] = get_next_rule (fid, line_num, ... num_inputs, num_outputs) [line, line_num] = get_line (fid, line_num); if (compare_versions (OCTAVE_VERSION(), "3.8.0", ">=")) line_vec = ostrsplit (line, ",():", true); else line_vec = strsplit (line, ",():", true); endif ##-------------------------------------------------------------------- ## Read antecedent. ##-------------------------------------------------------------------- format_str = ""; for j = 1 : num_inputs format_str = [format_str " %f"]; endfor [antecedent, count] = sscanf (line_vec{1}, format_str, ... [1, num_inputs]); if (length (antecedent) != num_inputs) error ("Line %d: Rule antecedent expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read consequent. ##-------------------------------------------------------------------- format_str = ""; for j = 1 : num_outputs format_str = [format_str " %f"]; endfor [consequent, count] = sscanf (line_vec{2}, format_str, ... [1, num_outputs]); if (length (consequent) != num_outputs) error ("Line %d: Rule consequent expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read weight. ##-------------------------------------------------------------------- [weight, count] = sscanf (line_vec{3}, "%f", "C"); if (count != 1) error ("Line %d: Rule weight expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Read connection. ##-------------------------------------------------------------------- [connection, count] = sscanf (line_vec{5}, "%d", "C"); if ((count != 1) || (connection < 1) || (connection > 2)) error ("Line %d: Antecedent connection expected.\n", line_num); endif ##-------------------------------------------------------------------- ## Create a new rule struct. ##-------------------------------------------------------------------- next_rule = struct ('antecedent', antecedent, ... 'consequent', consequent, ... 'weight', weight, ... 'connection', connection); endfunction ##---------------------------------------------------------------------- ## Function: get_line ## Purpose: Read the next line of the input file (without the newline) ## into line. Print an error message and halt on eof. ##---------------------------------------------------------------------- function [line, line_num] = get_line (fid, line_num) do line = fgetl (fid); if (isequal (line, -1)) error ("unexpected end of file at line %d", line_num); endif line = trim_leading_whitespace (line); line_num++; until (!comment_or_empty (line)) endfunction ##---------------------------------------------------------------------- ## Function: discard_empty_strings ## Purpose: Return a copy of the input cell array without any ## empty string elements. ##---------------------------------------------------------------------- function ret_val = discard_empty_strings (cell_array) ret_val = {}; j = 1; for i = 1 : length (cell_array) if (!strcmp (cell_array{i}, "")) ret_val{j++} = cell_array{i}; endif endfor endfunction ##---------------------------------------------------------------------- ## Function: trim_last_char ## Purpose: Return a copy of the input string without its final ## character. ##---------------------------------------------------------------------- function str = trim_last_char (str) str = str(1 : length (str) - 1); endfunction ##---------------------------------------------------------------------- ## Function: trim_leading_whitespace ## Purpose: Return a copy of the input string without leading ## whitespace. ##---------------------------------------------------------------------- function str = trim_leading_whitespace (str) str_length = length (str); i = 1; while (i <= str_length && ... (str (i) == ' ' || str (i) == '\t' || str (i) == '\n' || ... str (i) == '\f' || str (i) == '\r' || str (i) == '\v')) i++; endwhile if (i > str_length) str = ""; else str = str (i : str_length); endif endfunction ##---------------------------------------------------------------------- ## Function: comment_or_empty ## Purpose: Return true if the line is a comment (that is, it begins ## with '#' or '%') or an empty line, and return false ## otherwise. It is assumed that leading whitespace has been ## removed from the input line. ##---------------------------------------------------------------------- function ret_val = comment_or_empty (line) ret_val = (length (line) == 0) || (line (1) == '#') || ... (line (1) == '%'); endfunction %!shared fis %! fis = readfis ('sugeno_tip_calculator.fis'); %!assert(fis.andMethod == 'einstein_product'); %!assert(fis.orMethod == 'einstein_sum'); %!assert(fis.impMethod == 'prod'); %!assert(fis.aggMethod == 'sum'); %!assert(fis.defuzzMethod == 'wtaver'); ## Test input validation %!error %! readfis(1, 2) %!error %! readfis(1) fuzzy-logic-toolkit-0.6.0/inst/rmmf.m000066400000000000000000000076651463010412100175640ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} rmmf (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}) ## ## Remove a membership function from an existing FIS ## structure and return the updated FIS. ## ## The types of the arguments are expected to be: ## @itemize @bullet ## @item ## @var{fis} - an FIS structure ## @item ## @var{in_or_out} - either 'input' or 'output' (case-insensitive) ## @item ## @var{var_index} - an FIS input or output variable index ## @item ## @var{mf} - the string 'mf' ## @item ## @var{mf_index} - a string ## @end itemize ## ## Note that rmmf will allow the user to delete membership functions that are ## currently in use by rules in the FIS. ## ## @seealso{addmf, rmvar} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: rmmf.m ## Last-Modified: 2 Jun 2024 function fis = rmmf (fis, in_or_out, var_index, mf, mf_index) ## If the caller did not supply 5 argument values with the correct ## types, print an error message and halt. if (nargin != 5) error ("rmmf requires 5 arguments\n"); elseif (!is_fis (fis)) error ("rmmf's first argument must be an FIS structure\n"); elseif (!(is_string(in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("rmmf's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("rmmf's third argument must be a variable index\n"); elseif (!isequal (mf, 'mf')) error ("rmmf's fourth argument must be the string 'mf'\n"); elseif (!is_int (mf_index)) error ("rmmf's fifth argument must be an integer\n"); endif ## Delete the membership function struct and update the FIS structure. if (strcmp (tolower (in_or_out), 'input')) all_mfs = fis.input(var_index).mf; fis.input(var_index).mf = [all_mfs(1 : mf_index - 1), ... all_mfs(mf_index + 1 : numel(all_mfs))]; else all_mfs = fis.output(var_index).mf; fis.output(var_index).mf = [all_mfs(1 : mf_index - 1), ... all_mfs(mf_index + 1 : numel(all_mfs))]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = rmmf(fis, 'input', 1, 'mf', 1); %! assert(fis.input(1).mf.name, 'Good'); ## Test input validation %!error %! rmmf() %!error %! rmmf(1) %!error %! rmmf(1, 2) %!error %! rmmf(1, 2, 3) %!error %! rmmf(1, 2, 3, 4) %!error %! rmmf(1, 2, 3, 4, 5, 6) %!error %! rmmf(1, 2, 3, 4, 5) %!error %! rmmf(fis, 2, 3, 4, 5) %!error %! rmmf(fis, 'input', 3, 4, 5) %!error %! rmmf(fis, 'input', 1, 4, 5) %!error %! rmmf(fis, 'input', 1, 'mf', 5.5) fuzzy-logic-toolkit-0.6.0/inst/rmvar.m000066400000000000000000000064321463010412100177410ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} rmvar (@var{fis}, @var{in_or_out}, @var{var_index}) ## ## Remove an input or output variable from an existing FIS ## structure and return the updated FIS. ## ## The types of the arguments are expected to be: ## @itemize @bullet ## @item ## @var{fis} - an FIS structure ## @item ## @var{in_or_out} - either 'input' or 'output' (case-insensitive) ## @item ## @var{var_index} - an FIS input or output variable index ## @end itemize ## ## Note that rmvar will allow the user to delete an input or output variable ## that is currently in use by rules in the FIS. ## ## @seealso{addvar, rmmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy variable ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: rmvar.m ## Last-Modified: 2 Jun 2024 function fis = rmvar (fis, in_or_out, var_index) ## If the caller did not supply 3 argument values with the correct ## types, print an error message and halt. if (nargin != 3) error ("rmvar requires 3 arguments\n"); elseif (!is_fis (fis)) error ("rmvar's first argument must be an FIS structure\n"); elseif (!(is_string (in_or_out) && ... ismember (tolower (in_or_out), {'input', 'output'}))) error ("rmvar's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, in_or_out, var_index)) error ("rmvar's third argument must be a variable index\n"); endif ## Delete the variable struct and update the FIS structure. if (strcmp (tolower (in_or_out), 'input')) all_vars = fis.input; fis.input = [all_vars(1 : var_index - 1), ... all_vars(var_index + 1 : numel (all_vars))]; else all_vars = fis.output; fis.output = [all_vars(1 : var_index - 1), ... all_vars(var_index + 1 : numel (all_vars))]; endif endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = rmvar(fis, 'input', 1); %! assert(fis.input.name, 'Service'); ## Test input validation %!error %! rmvar() %!error %! rmvar(1) %!error %! rmvar(1, 2) %!error %! rmvar(1, 2, 3, 4) %!error %! rmvar(1, 2, 3) %!error %! rmvar(fis, 2, 3) %!error %! rmvar(fis, 'input', 3) fuzzy-logic-toolkit-0.6.0/inst/setfis.m000066400000000000000000000242751463010412100201140ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{fis} =} setfis (@var{fis}, @var{property}, @var{property_value}) ## @deftypefnx {Function File} {@var{fis} =} setfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{var_property}, @var{var_property_value}) ## @deftypefnx {Function File} {@var{fis} =} setfis (@var{fis}, @var{in_or_out}, @var{var_index}, @var{mf}, @var{mf_index}, @var{mf_property}, @var{mf_property_value}) ## ## Set a property (field) value of an FIS structure and return the ## updated FIS. There are three forms of setfis: ## ## @table @asis ## @item # Arguments ## Action Taken ## @item 3 ## Set a property of the FIS structure. The properties that may ## be set are: name, type, andmethod, ormethod, impmethod, ## addmethod, defuzzmethod, and version. ## @item 5 ## Set a property of an input or output variable of the FIS ## structure. The properties that may be set are: name and range. ## @item 7 ## Set a property of a membership function. The properties that ## may be set are: name, type, and params. ## @end table ## ## The types of the arguments are expected to be: ## @table @var ## @item fis ## an FIS structure ## @item property ## a string; one of 'name', 'type', 'andmethod', ## 'ormethod', 'impmethod', 'addmethod', ## 'defuzzmethod', and 'version' (case-insensitive) ## @item property_value ## a number (if property is 'version'); a string (otherwise) ## @item in_or_out ## either 'input' or 'output' (case-insensitive) ## @item var_index ## a valid integer index of an input or output FIS variable ## @item var_property ## a string; either 'name' or 'range' ## @item var_property_value ## a string (if var_property is 'name') or ## a vector range (if var_property is 'range') ## @item mf ## the string 'mf' ## @item mf_index ## a valid integer index of a membership function ## @item mf_property ## a string; one of 'name', 'type', or 'params' ## @item mf_property_value ## a string (if mf_property is 'name' or 'type'); ## an array (if mf_property is 'params') ## @end table ## ## @noindent ## Note that all of the strings representing properties above are case ## insensitive. ## ## @seealso{newfis, getfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: setfis.m ## Last-Modified: 2 Jun 2024 ##---------------------------------------------------------------------- function fis = setfis (fis, arg2, arg3, arg4 = 'dummy', ... arg5 = 'dummy', arg6 = 'dummy', arg7 = 'dummy') switch (nargin) case 3 fis = setfis_three_args (fis, arg2, arg3); case 5 fis = setfis_five_args (fis, arg2, arg3, arg4, arg5); case 7 fis = setfis_seven_args (fis, arg2, arg3, arg4, arg5, ... arg6, arg7); otherwise error ("setfis requires 3, 5, or 7 arguments\n"); endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_three_args ## Purpose: Handle calls to setfis that have 3 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_three_args (fis, arg2, arg3) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ismember (tolower (arg2), ... {'name', 'type', 'andmethod', 'ormethod', 'impmethod', ... 'aggmethod', 'defuzzmethod', 'version'}))) error ("incorrect second argument to setfis\n"); elseif (strcmp(tolower (arg2), 'version') && !is_real (arg3)) error ("the third argument to setfis must be a number\n"); elseif (!strcmp(tolower (arg2), 'version') && !is_string (arg3)) error ("the third argument to setfis must be a string\n"); endif ## Set the property (arg2) of the FIS to the property value (arg3). switch (tolower(arg2)) case 'name' fis.name = arg3; case 'version' fis.version = arg3; case 'type' fis.type = arg3; case 'andmethod' fis.andMethod = arg3; case 'ormethod' fis.orMethod = arg3; case 'impmethod' fis.impMethod = arg3; case 'aggmethod' fis.aggMethod = arg3; case 'defuzzmethod' fis.defuzzMethod = arg3; endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_five_args ## Purpose: Handle calls to setfis that have 5 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_five_args (fis, arg2, arg3, arg4, arg5) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("setfis's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("setfis's third argument must be a variable index\n"); elseif (!(is_string (arg4) && ... ismember (tolower (arg4), {'name', 'range'}))) error ("setfis's fourth argument must be 'name' or 'range'\n"); elseif (strcmp (arg4, 'name') && !is_string (arg5)) error ("incorrect fifth argument to setfis\n"); elseif (strcmp (arg4, 'range') && !is_real_matrix (arg5)) error ("incorrect fifth argument to setfis\n"); endif ## Set the input or output variable property (arg4) to the ## value (arg5). switch (tolower (arg2)) case 'input' switch (tolower (arg4)) case 'name' fis.input(arg3).name = arg5; case 'range' fis.input(arg3).range = arg5; endswitch case 'output' switch (tolower (arg4)) case 'name' fis.output(arg3).name = arg5; case 'range' fis.output(arg3).range = arg5; endswitch endswitch endfunction ##---------------------------------------------------------------------- ## Function: setfis_seven_args ## Purpose: Handle calls to setfis that have 7 arguments. See the ## comment at the top of this file for more complete info. ##---------------------------------------------------------------------- function fis = setfis_seven_args (fis, arg2, arg3, arg4, arg5, ... arg6, arg7) ## If not all of the arguments have the correct types, print an error ## message and halt. if (!is_fis (fis)) error ("setfis's first argument must be an FIS structure\n"); elseif (!(is_string (arg2) && ... ismember (tolower (arg2), {'input','output'}))) error ("setfis's second argument must be 'input' or 'output'\n"); elseif (!is_var_index (fis, arg2, arg3)) error ("setfis's third argument must be a variable index\n"); elseif (!(is_string (arg4) && strcmp (tolower (arg4), 'mf'))) error ("setfis's fourth argument must be 'mf'\n"); elseif (!is_mf_index (fis, arg2, arg3, arg5)) error ("setfis's fifth arg must be a membership function index\n"); elseif (!(is_string (arg6) && ismember (tolower(arg6), ... {'name', 'type', 'params'}))) error ("incorrect sixth argument to setfis\n"); elseif (ismember (tolower (arg6), {'name', 'type'}) && ... !is_string (arg7)) error ("incorrect seventh argument to setfis\n"); elseif (strcmp (tolower (arg6), 'params') && !is_real_matrix (arg7)) error ("incorrect seventh argument to setfis\n"); endif ## Set the membership function property (arg6) to the value (arg7). switch (tolower (arg2)) case 'input' switch (tolower (arg6)) case 'name' fis.input(arg3).mf(arg5).name = arg7; case 'type' fis.input(arg3).mf(arg5).type = arg7; case 'params' fis.input(arg3).mf(arg5).params = arg7; endswitch case 'output' switch (tolower (arg6)) case 'name' fis.output(arg3).mf(arg5).name = arg7; case 'type' fis.output(arg3).mf(arg5).type = arg7; case 'params' fis.output(arg3).mf(arg5).params = arg7; endswitch endswitch endfunction %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); %!test %! fis = setfis(fis, 'defuzzMethod', 'mom'); %! assert(fis.defuzzMethod, 'mom'); ## Test input validation %!error %! setfis() %!error %! setfis(1) %!error %! setfis(1, 2) %!error %! setfis(1, 2, 3, 4) %!error %! setfis(1, 2, 3, 4, 5, 6) %!error %! setfis(1, 2, 3, 4, 5, 6, 7, 8) %!error %! setfis(1, 2, 3, 4, 5, 6, 7) %!error %! setfis(fis, 2, 3, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 3, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 1, 4, 5, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 5, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 1, 6, 7) %!error %! setfis(fis, 'input', 1, 'mf', 1, 'name', 7) fuzzy-logic-toolkit-0.6.0/inst/showfis.m000066400000000000000000000220151463010412100202670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} showfis (@var{fis}) ## ## Print all of the property (field) values of the FIS structure and its ## substructures. ## ## @seealso{getfis, showrule} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: showfis.m ## Last-Modified: 29 May 2024 function showfis (fis) ## If getfis was called with an incorrect number of arguments, ## or the argument does not have the correct type, print an error ## message and halt. if (nargin != 1) error ("showfis requires 1 argument\n"); elseif (!is_fis (fis)) error ("showfis's argument must be an FIS structure\n"); endif ## Print properties of the FIS structure. ## Determine: ## the number of input variables ## number of output variables ## number of rules ## input membership function names ## input membership function types ## input membership functions parameters ## number of input membership functions ## output membership function names ## output membership function types ## output membership function parameters ## number of output membership functions num_inputs = columns(fis.input); num_outputs = columns(fis.output); num_rules = columns(fis.rule); k = 1; in_mf_labels = {}; in_mf_types = {}; in_mf_params{k} = []; for i = 1 : num_inputs for j = 1 : columns (fis.input(i).mf) in_mf_labels{k} = fis.input(i).mf(j).name; in_mf_types{k} = fis.input(i).mf(j).type; in_mf_params{k++} = fis.input(i).mf(j).params; endfor endfor num_input_mf = k - 1; k = 1; out_mf_labels = {}; out_mf_types = {}; out_mf_params{k} = []; for i = 1 : num_outputs for j = 1 : columns (fis.output(i).mf) out_mf_labels{k} = fis.output(i).mf(j).name; out_mf_types{k} = fis.output(i).mf(j).type; out_mf_params{k++} = fis.output(i).mf(j).params; endfor endfor num_output_mf = k - 1; ## Print the name, type, and number of inputs/outputs. line = 1; printf ("%d. Name %s\n", line++, fis.name); printf ("%d. Type %s\n", line++, fis.type); printf ("%d. Inputs/Outputs [%d %d]\n", line++, num_inputs, ... num_outputs); ## Print the number of input membership functions. printf ("%d. NumInputMFs ", line++); if (num_inputs == 0) printf ("0\n"); elseif (num_inputs == 1) printf ("%d\n", columns(fis.input(1).mf)); else printf("["); for i = 1 : num_inputs-1 printf ("%d ", columns(fis.input(i).mf)); endfor printf ("%d]\n", columns(fis.input(num_inputs).mf)); endif ## Print the number of output membership functions. printf ("%d. NumOutputMFs ", line++); if (num_outputs == 0) printf("0\n"); elseif (num_outputs == 1) printf ("%d\n", columns(fis.output(1).mf)); else printf ("["); for i = 1 : num_outputs - 1 printf ("%d ", columns (fis.output(i).mf)); endfor printf ("%d]\n", columns (fis.output(num_outputs).mf)); endif ## Print the number of rules, 'And' method, 'Or' method, 'Implication' ## method, 'Aggregation' method, and 'Defuzzification' method. printf ("%d. NumRules %d\n", line++, num_rules); printf ("%d. AndMethod %s\n", line++, fis.andMethod); printf ("%d. OrMethod %s\n", line++, fis.orMethod); printf ("%d. ImpMethod %s\n", line++, fis.impMethod); printf ("%d. AggMethod %s\n", line++, fis.aggMethod); printf ("%d. DefuzzMethod %s\n", line++, fis.defuzzMethod); ## Print the input variable names (labels). printf ("%d. InLabels ", line++); if (num_inputs == 0) printf ("\n"); else printf ("%s\n", fis.input(1).name); for i = 2 : num_inputs printf ("%d. %s\n", line++, fis.input(i).name); endfor endif ## Print the output variable names (labels). printf ("%d. OutLabels ", line++); if (num_outputs == 0) printf ("\n"); else printf ("%s\n", fis.output(1).name); for i = 2 : num_outputs printf ("%d. %s\n", line++, fis.output(i).name); endfor endif ## Print the ranges of the input variables. printf ("%d. InRange ", line++); if (num_inputs == 0) printf ("\n"); else printf ("%s\n", mat2str(fis.input(1).range)); for i = 2 : num_inputs printf ("%d. ", line++); printf ("%s\n", mat2str(fis.input(i).range)); endfor endif ## Print the ranges of the output variables. printf ("%d. OutRange ", line++); if (num_outputs == 0) printf ("\n"); else printf ("%s\n", mat2str(fis.output(1).range)); for i = 2 : num_outputs printf ("%d. ", line++); printf ("%s\n", mat2str (fis.output(i).range)); endfor endif ## Print the input variables' membership function labels. printf ("%d. InMFLabels ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", in_mf_labels{1}); for i = 2 : num_input_mf printf ("%d. %s\n", line++, in_mf_labels{i}); endfor endif ## Print the output variables' membership function labels. printf ("%d. OutMFLabels ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", out_mf_labels{1}); for i = 2 : num_output_mf printf ("%d. %s\n", line++, out_mf_labels{i}); endfor endif ## Print the input variables' membership function types. printf ("%d. InMFTypes ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", in_mf_types{1}); for i = 2 : num_input_mf printf ("%d. %s\n", line++, in_mf_types{i}); endfor endif ## Print the output variables' membership function types. printf ("%d. OutMFTypes ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", out_mf_types{1}); for i = 2 : num_output_mf printf ("%d. %s\n", line++, out_mf_types{i}); endfor endif ## Print the input variables' membership function parameters. printf ("%d. InMFParams ", line++); if (num_input_mf == 0) printf ("\n"); else printf ("%s\n", mat2str(in_mf_params{1})); for i = 2 : num_input_mf printf ("%d. ", line++); printf ("%s\n", mat2str (in_mf_params{i})); endfor endif ## Print the output variables' membership function parameters. printf ("%d. OutMFParams ", line++); if (num_output_mf == 0) printf ("\n"); else printf ("%s\n", mat2str (out_mf_params{1})); for i = 2 : num_output_mf printf ("%d. ", line++); printf ("%s\n", mat2str (out_mf_params{i})); endfor endif ## Print the rule antecedents. printf("%d. Rule Antecedent ", line++); if (num_rules == 0) printf ("\n"); else printf ("%s\n", mat2str (fis.rule(1).antecedent)); for i = 2 : num_rules printf ("%d. ", line++); printf ("%s\n", mat2str (fis.rule(i).antecedent)); endfor endif ## Print the rule consequents. printf ("%d. Rule Consequent ", line++); if (num_rules == 0) printf ("\n"); else printf ("%s\n", mat2str (fis.rule(1).consequent)); for i = 2 : num_rules printf ("%d. ", line++); printf ("%s\n", mat2str (fis.rule(i).consequent)); endfor endif ## Print the rule weights. printf("%d. Rule Weight ", line++); if (num_rules == 0) printf ("\n"); else printf ("%d\n", fis.rule(1).weight); for i = 2 : num_rules printf ("%d. %d\n", line++, fis.rule(i).weight); endfor endif ## Print the rule connections. printf ("%d. Rule Connection ", line++); if (num_rules == 0) printf ("\n"); else printf ("%d\n", fis.rule(1).connection); for i = 2 : num_rules printf ("%d. %d\n", line++, ... fis.rule(i).connection); endfor endif endfunction ## Test input validation %!error %! showfis() %!error %! showfis(1, 2) %!error %! showfis(1) fuzzy-logic-toolkit-0.6.0/inst/showrule.m000066400000000000000000000440741463010412100204660ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} showrule (@var{fis}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{format}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{'verbose'}, @var{language}) ## @deftypefnx {Function File} {} showrule (@var{fis}, @var{index_list}, @var{'verbose'}, @var{'custom'}, @var{@{"and" "or" "If" "then" "is" "isn't" "somewhat" "very" "extremely" "very very"@}}) ## ## ## Show the rules for an FIS structure in verbose, symbolic, or indexed format. ## Built in languages for the 'verbose' format are: English, ## Chinese (or Mandarin, Pinyin), Russian (or Pycckii, Russkij), French (or Francais), ## Spanish (or Espanol), and German (or Deutsch). The names of the languages are ## case-insensitive, Chinese is written in Pinyin, and Russian is transliterated. ## ## To use a custom language, enter 'verbose' and 'custom' for the third and ## fourth parameters, respectively, and a cell array of ten strings (to specify ## the custom language) corresponding to the English @{"and" "or" "If" "then" ## "is" "isn't" "somewhat" "very" "extremely" "very very"@} for the fifth ## parameter. ## ## @noindent ## To run the demonstration code, type "@t{demo showrule}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{addrule, getfis, showfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy rule ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: showrule.m ## Last-Modified: 29 May 2024 function showrule (fis, index_list = [], format = 'verbose', ... language = 'english', ... verbose_strings = {"and" "or" "If" "then" "is" ... "isn't" "somewhat" "very" ... "extremely" "very very"}) ##-------------------------------------------------------------------- ## If the caller did not supply between 1 and 5 arguments with the ## correct types, print an error message and halt. ##-------------------------------------------------------------------- if (!(nargin >= 1 && nargin <= 5)) error ("showrule requires between 1 and 5 arguments\n"); elseif (!is_fis (fis)) error ("showrule's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && ... !is_rule_index_list (index_list, length (fis.rule))) error ("showrule's second arg must be a vector of rule indices\n"); elseif ((nargin >= 3) && !is_format (format)) error ("showrule's third argument must specify the format\n"); elseif ((nargin == 4) && isequal (tolower (language), "custom")) error ("showrule: specify custom verbose strings in the fifth arg\n"); elseif ((nargin == 4) && !is_builtin_language (language)) error ("showrule's fourth arg must specify a built-in language\n"); elseif ((nargin == 5) && !isequal (tolower (language), "custom")) error ("showrule: use 'custom' as 4th arg to specify custom strings\n"); endif ##-------------------------------------------------------------------- ## If showrule was called with only one argument, create the default ## index list (all rule indices, in ascending order). ##-------------------------------------------------------------------- if (nargin == 1) index_list = 1 : length (fis.rule); endif ##-------------------------------------------------------------------- ## Show the rules in indexed, symbolic, or verbose format. ##-------------------------------------------------------------------- switch (tolower (format)) case 'indexed' showrule_indexed_format (fis, index_list); case 'symbolic' showrule_symbolic_format (fis, index_list); case 'verbose' showrule_verbose_format (fis, index_list, language, ... verbose_strings); endswitch endfunction ##---------------------------------------------------------------------- ## Function: get_verbose_hedge ## Purpose: For no hedge, return the empty string. ## For the built-in hedges, return the verbose string in the ## language used in the cell array verbose_strings (the second ## parameter). For custom hedges, return the power (rounded to ## two digits) to which the membership function matching value ## will be raised. ##---------------------------------------------------------------------- function hedge = get_verbose_hedge (mf_index_and_hedge, verbose_strings) mf_index_and_hedge = abs (mf_index_and_hedge); mf_index = fix (mf_index_and_hedge); hedge_num = round (100 * (mf_index_and_hedge - mf_index)); switch (hedge_num) case 0 ## .00 <=> no hedge <=> mu(x) hedge = ""; case 5 ## .05 <=> somewhat x <=> mu(x)^0.5 hedge = verbose_strings{7}; case 20 ## .20 <=> very x <=> mu(x)^2 hedge = verbose_strings{8}; case 30 ## .30 <=> extremely x <=> mu(x)^3 hedge = verbose_strings{9}; case 40 ## .40 <=> very very x <=> mu(x)^4 hedge = verbose_strings{10}; otherwise ## For custom hedge, return the hedge = hedge_num / 10; ## power dd/10. That is: endswitch ## .dd <=> x ## <=> mu(x)^(dd/10) endfunction ##---------------------------------------------------------------------- ## Function: get_is_or_isnt ## Purpose: Return the verbose string for "is" or "isn't" for the given ## membership function value. If the membership function value ## is 0, return the empty string. ##---------------------------------------------------------------------- function is_or_isnt = get_is_or_isnt (mem_fcn_value, verbose_strings) if (mem_fcn_value > 0) is_or_isnt = verbose_strings{5}; elseif (mem_fcn_value < 0) is_or_isnt = verbose_strings{6}; else is_or_isnt = ""; endif endfunction ##---------------------------------------------------------------------- ## Function: get_mf_name ## Purpose: Return the specified membership function name. ##---------------------------------------------------------------------- function mf_name = get_mf_name (mem_fcn_value, fis_input_or_output) mf_name = fis_input_or_output.mf(abs(fix(mem_fcn_value))).name; endfunction ##---------------------------------------------------------------------- ## Function: get_verbose_strings ## Purpose: Return a cell array of ten strings corresponding to: ## {"and" "or" "If" "then" "is" "isn't" ... ## "somewhat" "very" "extremely" "very very"} ## for the (built-in) language specified by the argument. ## Custom verbose strings are specified by an argument to ## showrule -- they are not handled by this function. ##---------------------------------------------------------------------- function str = get_verbose_strings (language) switch (language) case 'english' str = {"and" "or" "If" "then" "is" "isn't" ... "somewhat" "very" "extremely" "very very"}; case {'chinese' 'mandarin' 'pinyin'} str = {"he" "huo" "Ruguo" "name" "shi" "bu shi" ... "youdian" "hen" "feichang" "feichang feichang"}; case {'russian' 'russkij' 'pycckii'} str = {"i" "ili" "ecli" "togda" "" "ne" ... "nemnogo" "ochen" "prevoshodnoye" "ochen ochen"}; case {'spanish' 'espanol'} str = {"y" "o" "Si" "entonces" "es" "no es" ... "un poco" "muy" "extremadamente" "muy muy"}; case {'francais' 'french'} str = {"et" "ou" "Si" "alors" "est" "n'est pas" ... "un peu" "tres" "extremement" "tres tres"}; case {'deutsch' 'german'} str = {"und" "oder" "Wenn" "dann" "ist" "ist nicht" ... "ein wenig" "sehr" "auBerst" "sehr sehr"}; endswitch endfunction ##---------------------------------------------------------------------- ## Function: showrule_indexed_format ## Purpose: Show the rules in indexed format. ##---------------------------------------------------------------------- function showrule_indexed_format (fis, index_list) num_inputs = columns (fis.input); num_outputs = columns (fis.output); for i = 1 : length (index_list) current_ant = fis.rule(index_list(i)).antecedent; current_con = fis.rule(index_list(i)).consequent; current_wt = fis.rule(index_list(i)).weight; current_connect = fis.rule(index_list(i)).connection; ##------------------------------------------------------------------ ## Print membership functions for the inputs. ##------------------------------------------------------------------ for j = 1 : num_inputs if (is_int (current_ant(j))) printf ("%d", current_ant(j)); else printf ("%.2f", current_ant(j)); endif if (j == num_inputs) puts (","); endif puts (" "); endfor ##------------------------------------------------------------------ ## Print membership functions for the outputs. ##------------------------------------------------------------------ for j = 1 : num_outputs if (is_int (current_con(j))) printf ("%d", current_con(j)); else printf ("%.2f", current_con(j)); endif if (j < num_outputs) puts (" "); endif endfor ##------------------------------------------------------------------ ## Print the weight in parens. ##------------------------------------------------------------------ if (is_int (current_wt)) printf (" (%d) : ", current_wt); else printf (" (%.4f) : ", current_wt); endif ##------------------------------------------------------------------ ## Print the connection and a newline. ##------------------------------------------------------------------ printf ("%d\n", current_connect); endfor endfunction ##---------------------------------------------------------------------- ## Function: showrule_symbolic_format ## Purpose: Show the rules in symbolic format. ##---------------------------------------------------------------------- function showrule_symbolic_format (fis, index_list) verbose_strings = {"&&" "||" "" "=>" "==" "!=" ... 0.5 2.0 3.0 4.0}; showrule_verbose_format (fis, index_list, "custom", ... verbose_strings, true); endfunction ##---------------------------------------------------------------------- ## Function: showrule_verbose_format ## Purpose: Show the rules in verbose format. ##---------------------------------------------------------------------- function showrule_verbose_format (fis, index_list, language, ... verbose_strings, ... suppress_comma = false) num_inputs = columns (fis.input); num_outputs = columns (fis.output); ##-------------------------------------------------------------------- ## Get verbose strings in the (built-in) language specified. Note ## that the strings for custom languages are supplied by the user. ##-------------------------------------------------------------------- language = tolower (language); if (isequal ("custom", language)) str = verbose_strings; else str = get_verbose_strings (language); endif and_str = str{1}; if_str = str{3}; then_str = str{4}; ##-------------------------------------------------------------------- ## For each index in the index_list, print the index number, the rule, ## and the weight. ##-------------------------------------------------------------------- for i = 1 : length (index_list) connect_str = str{fis.rule(index_list(i)).connection}; current_ant = fis.rule(index_list(i)).antecedent; current_con = fis.rule(index_list(i)).consequent; current_wt = fis.rule(index_list(i)).weight; ##------------------------------------------------------------------ ## For j = 1, print: ## . If ( [] ) ## and for 2 <= j <= num_inputs, print: ## ( [] ) ## in the specified language. Custom hedges are printed in the form: ## ( ^) ##------------------------------------------------------------------ first_input_printed = true; for j = 1 : num_inputs if (j == 1) printf ("%d.", index_list(i)); endif input_name = fis.input(j).name; is_or_isnt = get_is_or_isnt (current_ant(j), str); if (!isempty (is_or_isnt)) hedge = get_verbose_hedge (current_ant(j), str); mf_name = get_mf_name (current_ant(j), fis.input(j)); if (first_input_printed) first_input_printed = false; printf (" %s", if_str); else printf (" %s", connect_str); endif if (isempty (hedge)) printf (" (%s %s %s)", input_name, is_or_isnt, mf_name); elseif (ischar (hedge)) printf (" (%s %s %s %s)", input_name, is_or_isnt, hedge, ... mf_name); else printf (" (%s %s %s^%3.1f)", input_name, is_or_isnt, ... mf_name, hedge); endif endif endfor ##------------------------------------------------------------------ ## Print the consequent in the form: ## ", then (output-name is [hedge] mem-fcn-name) and ## (output-name is [hedge] mem-fcn-name) and ## ... ## (output-name is [hedge] mem-fcn-name)" ## ## Only the outputs for which the membership function index is ## non-zero are printed. Negative membership function indices ## indicate "isn't" instead of "is", and the fractional part of ## the membership function index indicates a hedge, which is also ## printed. ## ## For non-numeric and empty hedges, print each of the outputs ## using the form: ## ( [] ) ## For custom and numeric hedges, use the form: ## ( ^) ## ## The comma may be suppressed (as it is for symbolic output) by ## calling the function with suppress_comma == true. ##------------------------------------------------------------------ first_output_printed = true; for j = 1 : num_outputs output_name = fis.output(j).name; is_or_isnt = get_is_or_isnt (current_con(j), str); if (!isempty (is_or_isnt)) hedge = get_verbose_hedge (current_con(j), str); mf_name = get_mf_name (current_con(j), fis.output(j)); if (first_output_printed) first_output_printed = false; if (suppress_comma) printf (" %s", then_str); else printf (", %s", then_str); endif else printf (" %s", and_str); endif if (isempty (hedge)) printf (" (%s %s %s)", output_name, is_or_isnt, mf_name); elseif (ischar (hedge)) printf (" (%s %s %s %s)", output_name, is_or_isnt, hedge, ... mf_name); else printf (" (%s %s %s^%3.1f)", output_name, is_or_isnt, ... mf_name, hedge); endif endif endfor ##------------------------------------------------------------------ ## Finally, print the weight in parens and a newline: ## " ()" ##------------------------------------------------------------------ if is_int (current_wt) printf (" (%d)\n", current_wt); else printf (" (%.4f)\n", current_wt); endif endfor endfunction ##---------------------------------------------------------------------- ## Embedded Demos and Tests ##---------------------------------------------------------------------- %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis)\n"); %! showrule (fis) %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, [2 4], 'symbolic')\n"); %! showrule (fis, [2 4], 'symbolic') %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, 1:4, 'indexed')\n"); %! showrule (fis, 1:4, 'indexed') %! puts ("\n"); %!demo %! fis = readfis ('sugeno_tip_calculator.fis'); %! puts ("Output of: showrule(fis, 1, 'verbose', 'francais')\n"); %! showrule (fis, 1, 'verbose', 'francais') %! puts ("\n"); %!shared fis %! fis = readfis ('mamdani_tip_calculator.fis'); ## Test input validation %!error %! showrule() %!error %! showrule(1, 2, 3, 4, 5, 6) %!error %! showrule(1, 2, 3, 4, 5) %!error %! showrule(fis, '2', 3, 4, 5) %!error %! showrule(fis, 2, 3, 4, 5) %!error %! showrule(fis, [2 4], 'verbose', 'custom') %!error %! showrule(fis, [2 4], 'verbose', 4) %!error %! showrule(fis, [2 4], 'verbose', 'english', 5) fuzzy-logic-toolkit-0.6.0/inst/sigmf.m000066400000000000000000000103551463010412100177160ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} sigmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} sigmf (@var{[x1 x2 ... xn]}, @var{[a c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a c]}), ## return the corresponding @var{y} values for the sigmoidal membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{c} must be real numbers. This ## membership function satisfies the equation: ## @itemize @w ## @item ## f(x) = 1/(1 + exp(-a*(x - c))) ## @end itemize ## ## @noindent ## which always returns values in the range [0, 1]. ## ## The parameters a and c specify: ## @itemize @w ## @item ## a == the slope at c ## @item ## c == the inflection point ## @end itemize ## ## @noindent ## and at the inflection point, the value of the function is 0.5: ## @itemize @w ## @item ## f(c) == 0.5. ## @end itemize ## ## @noindent ## To run the demonstration code, type "@t{demo sigmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, smf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership sigmoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: sigmf.m ## Last-Modified: 30 May 2024 function y = sigmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("sigmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("sigmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('sigmf', params)) error ("sigmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); c = params(2); y_val = @(x_val) 1 / (1 + exp (-a * (x_val - c))); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [0.3 40]; %! y1 = sigmf(x, params); %! params = [0.2 40]; %! y2 = sigmf(x, params); %! params = [0.1 40]; %! y3 = sigmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'sigmf demo'); %! plot(x, y1, 'r;params = [0.3 40];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0.2 40];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [0.1 40];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [5 2]; %! y = [4.5398e-05 6.6929e-03 0.5000 0.9933 1 1 1 1 1 1 1]; %! z = sigmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! sigmf() %!error %! sigmf(1) %!error %! sigmf(1, 2, 3) %!error %! sigmf([1 0], 2) %!error %! sigmf(1, 2) %!error %! sigmf(0:100, []) %!error %! sigmf(0:100, [30]) %!error %! sigmf(0:100, [90 80 30]) %!error %! sigmf(0:100, 'abc') %!error %! sigmf(0:100, '') fuzzy-logic-toolkit-0.6.0/inst/smf.m000066400000000000000000000126131463010412100173750ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} smf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} smf (@var{[x1 x2 ... xn]}, @var{[a b]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b]}), ## return the corresponding @var{y} values for the S-shaped membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{b} must be real numbers, with ## @var{a} < @var{b}. This membership function satisfies: ## @example ## @group ## 0 if x <= a ## f(x) = 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 1 if x >= b ## @end group ## @end example ## ## @noindent ## which always returns values in the range [0, 1]. ## ## @noindent ## To run the demonstration code, type "@t{demo smf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, trapmf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership s-shaped ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: smf.m ## Last-Modified: 30 May 2024 function y = smf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("smf requires 2 arguments\n"); elseif (!is_domain (x)) error ("smf's first argument must be a valid domain\n"); elseif (!are_mf_params ('smf', params)) error ("smf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); a_b_ave = (a + b) / 2; b_minus_a = b - a; y_val = @(x_val) smf_val (x_val, a, b, a_b_ave, b_minus_a); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y = smf_val (x_val, a, b, a_b_ave, b_minus_a) ## ## smf_val returns one value of the S-shaped membership function, which ## satisfies: ## 0 if x <= a ## f(x) = 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 1 - 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 1 if x >= b ## ## smf_val is a private function, called only by smf. Because smf_val ## is not intended for general use -- and because the parameters a and b ## are checked for errors in the function smf (defined above), the ## parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = smf_val (x_val, a, b, a_b_ave, b_minus_a) ## Calculate and return a single y value of the S-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 0; elseif (x_val <= a_b_ave) y_val = 2 * ((x_val - a) / b_minus_a)^2; elseif (x_val < b) y_val = 1 - 2 * ((x_val - b) / b_minus_a)^2; else y_val = 1; endif endfunction %!demo %! x = 0:100; %! params = [40 60]; %! y1 = smf(x, params); %! params = [25 75]; %! y2 = smf(x, params); %! params = [10 90]; %! y3 = smf(x, params); %! figure('NumberTitle', 'off', 'Name', 'smf demo'); %! plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 75]; %! y = [0 0 0 0.020000 0.1800 0.5000 0.8200 0.9800 1 1 1]; %! z = smf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error %! smf() %!error %! smf(1) %!error %! smf(1, 2, 3) %!error %! smf([1 0], 2) %!error %! smf(1, 2) %!error %! smf(0:100, []) %!error %! smf(0:100, [30]) %!error %! smf(0:100, [90 80 30]) %!error %! smf(0:100, 'abc') %!error %! smf(0:100, '') fuzzy-logic-toolkit-0.6.0/inst/sugeno_tip_calculator.fis000066400000000000000000000047751463010412100235340ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: sugeno_tip_calculator.fis ## Last-Modified: 28 Aug 2012 % Sugeno Tip Calculator % Computes cheap, average, and generous tips % given food quality and service ratings. [System] Name = 'Sugeno-Tip-Calculator' Type = 'sugeno' Version = 1.0 NumInputs = 2 NumOutputs = 3 NumRules = 10 AndMethod = 'einstein_product' OrMethod = 'einstein_sum' ImpMethod = 'prod' AggMethod = 'sum' DefuzzMethod = 'wtaver' [Input1] Name = 'Food-Quality' Range = [1 10] NumMFs = 2 MF1 = 'Bad' : 'trapmf', [0 1 3 7] MF2 = 'Good' : 'trapmf', [3 7 10 11] [Input2] Name = 'Service' Range = [1 10] NumMFs = 2 MF1 = 'Bad' : 'trapmf', [0 1 3 7] MF2 = 'Good' : 'trapmf', [3 7 10 11] [Output1] Name = 'Cheap-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Output2] Name = 'Average-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Output3] Name = 'Generous-Tip' Range = [5 25] NumMFs = 3 MF1 = 'Low' : 'constant', [10] MF2 = 'Medium' : 'constant', [15] MF3 = 'High' : 'constant', [20] [Rules] 1.30 1.30, 1.30 1.20 1.00 (1) : 1 2.00 1.30, 1.00 1.00 2.00 (1) : 1 2.20 1.20, 1.00 2.00 3.00 (1) : 1 1.00 1.00, 1.00 1.00 2.00 (1) : 1 2.00 1.00, 1.00 2.00 3.00 (1) : 1 2.30 1.00, 1.00 2.00 3.20 (1) : 1 1.00 2.00, 1.00 2.00 3.00 (1) : 1 2.00 2.00, 2.00 2.00 3.20 (1) : 1 1.20 2.20, 1.00 2.00 3.00 (1) : 1 2.40 2.40, 3.00 3.20 3.30 (1) : 1 fuzzy-logic-toolkit-0.6.0/inst/sugeno_tip_demo.m000066400000000000000000000062311463010412100217670ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Script File} {} sugeno_tip_demo ## ## Demonstrate the use of the Octave Fuzzy Logic Toolkit to read and ## evaluate a Sugeno-type FIS with multiple outputs stored in a text ## file. Also demonstrate the use of hedges in the FIS rules and the ## Einstein product and sum as the T-norm/S-norm pair. ## ## The demo: ## @itemize @bullet ## @item ## reads the FIS structure from a file ## @item ## plots the input membership functions ## @item ## plots the (constant) output functions ## @item ## plots each of the three FIS outputs as a function of the inputs ## @item ## displays the FIS rules in verbose format in the Octave window ## @item ## evaluates the Sugeno-type FIS for six inputs ## @end itemize ## ## @seealso{cubic_approx_demo, heart_disease_demo_1, heart_disease_demo_2, investment_portfolio_demo, linear_tip_demo, mamdani_tip_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy tests demos ## Note: This example is based on an assignment written by ## Dr. Bruce Segee (University of Maine Dept. of ECE). ## Directory: fuzzy-logic-toolkit/inst ## Filename: sugeno_tip_demo.m ## Last-Modified: 4 Jun 2024 ## Read the FIS structure from a file. fis = readfis ('sugeno_tip_calculator.fis'); ## Plot the input and output membership functions. plotmf (fis, 'input', 1); plotmf (fis, 'input', 2); plotmf (fis, 'output', 1); plotmf (fis, 'output', 2); plotmf (fis, 'output', 3); ## Plot the cheap, average, and generous tips as a function of ## Food-Quality and Service. gensurf (fis, [1 2], 1); gensurf (fis, [1 2], 2); gensurf (fis, [1 2], 3); ## Demonstrate showrule with hedges. showrule (fis); ## Calculate the Tip for 6 sets of input values: puts ("\nFor the following values of (Food Quality, Service):\n\n"); food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4] puts ("\nThe cheap, average, and generous tips are:\n\n"); tip = evalfis (food_service, fis, 1001) %!test %! fis = readfis ('sugeno_tip_calculator.fis'); %! food_service = [1 1; 5 5; 10 10; 4 6; 6 4; 7 4]; %! tip = evalfis (food_service, fis, 1001); %! expected_result = ... %! [10.000 10.000 12.500 %! 10.868 13.681 19.138 %! 17.500 17.500 20.000 %! 10.604 14.208 19.452 %! 10.427 13.687 19.033 %! 10.471 14.358 19.353]; %! assert(tip, expected_result, 1e-3); fuzzy-logic-toolkit-0.6.0/inst/trapmf.m000066400000000000000000000113741463010412100201040ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} trapmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} trapmf (@var{[x1 x2 ... xn]}, @var{[a b c d]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c d]}), ## return the corresponding @var{y} values for the trapezoidal membership ## function. The argument @var{x} must be a real number or a non-empty vector of ## strictly increasing real numbers, and parameters @var{a}, @var{b}, @var{c}, ## and @var{d} must satisfy the inequalities: ## @var{a} < @var{b} <= @var{c} < @var{d}. None of the parameters @var{a}, ## @var{b}, @var{c}, @var{d} are required to be in the domain @var{x}. The ## minimum and maximum values of the trapezoid are assumed to be 0 and 1. ## ## The parameters @var{[a b c d]} correspond to the x values ## of the corners of the trapezoid: ## ## @example ## @group ## 1-| -------- ## | / \ ## | / \ ## | / \ ## 0----------------------- ## a b c d ## @end group ## @end example ## ## @noindent ## To run the demonstration code, type "@t{demo trapmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trimf, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership trapezoidal ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: trapmf.m ## Last-Modified: 29 May 2024 function y = trapmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("trapmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("trapmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('trapmf', params)) error ("trapmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the trapezoid on the domain x. a = params(1); b = params(2); c = params(3); d = params(4); b_minus_a = b - a; d_minus_c = d - c; y_val = @(x_val) max (0, min (min (1, (x_val - a) / b_minus_a), ... (d - x_val) / d_minus_c)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [-1 0 20 40]; %! y1 = trapmf(x, params); %! params = [20 40 60 80]; %! y2 = trapmf(x, params); %! params = [60 80 100 101]; %! y3 = trapmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'trapmf demo'); %! plot(x, y1, 'r;params = [-1 0 20 40];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [20 40 60 80];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [60 80 100 101];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [-1 0 2 4]; %! y1 = trapmf(x, params); %! assert(y1, [1.0 1.0 1.0 0.5 0 0 0 0 0 0 0]); %! params = [2 4 6 8]; %! y2 = trapmf(x, params); %! assert(y2, [0 0 0 0.5 1.0 1.0 1.0 0.5 0 0 0]); %! params = [6 8 10 11]; %! y3 = trapmf(x, params); %! assert(y3, [0 0 0 0 0 0 0 0.5 1.0 1.0 1.0]); ## Test input validation %!error %! trapmf() %!error %! trapmf(1) %!error %! trapmf(1, 2, 3) %!error %! trapmf([1 0], 2) %!error %! trapmf(1, 2) %!error %! trapmf(0:100, []) %!error %! trapmf(0:100, [2]) %!error %! trapmf(0:100, [2 3]) %!error %! trapmf(0:100, [90 80 30 20]) %!error %! trapmf(0:100, [30 80 20 20]) fuzzy-logic-toolkit-0.6.0/inst/trimf.m000066400000000000000000000111371463010412100177310ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} trimf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} trimf (@var{[x1 x2 ... xn]}, @var{[a b c]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b c]}), ## return the corresponding @var{y} values for the triangular membership ## function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and parameters @var{a}, @var{b}, and @var{c} must be ## real numbers that satisfy @var{a} < @var{b} < @var{c}. None of the parameters ## @var{a}, @var{b}, and @var{c} are required to be in the domain @var{x}. The ## minimum and maximum values of the triangle are assumed to be 0 and 1. ## ## The parameters [@var{a} @var{b} @var{c}] correspond to the x values of the ## vertices of the triangle: ## ## @example ## @group ## 1-| /\ ## | / \ ## | / \ ## | / \ ## 0----------------------- ## a b c ## @end group ## @end example ## ## @noindent ## To run the demonstration code, type "@t{demo trimf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf_demo, zmf} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership triangular ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: trimf.m ## Last-Modified: 29 May 2024 function y = trimf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("trimf requires 2 arguments\n"); elseif (!is_domain (x)) error ("trimf's first argument must be a valid domain\n"); elseif (!are_mf_params ('trimf', params)) error ("trimf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the triangle on the domain x. a = params(1); b = params(2); c = params(3); b_minus_a = b - a; c_minus_b = c - b; y_val = @(x_val) max (0, min (min (1, (x_val - a) / b_minus_a), ... (c - x_val)/c_minus_b)); y = arrayfun (y_val, x); endfunction %!demo %! x = 0:100; %! params = [-1 0 50]; %! y1 = trimf(x, params); %! params = [0 50 100]; %! y2 = trimf(x, params); %! params = [50 100 101]; %! y3 = trimf(x, params); %! figure('NumberTitle', 'off', 'Name', 'trimf demo'); %! plot(x, y1, 'r;params = [-1 0 50];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [0 50 100];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [50 100 101];', 'LineWidth', 2) %! ylim([-0.1 1.2]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10; %! params = [0 2 4]; %! y1 = trimf(x, params); %! assert(y1, [0 0.5 1.0 0.5 0 0 0 0 0 0 0]); %! params = [2 4 6]; %! y2 = trimf(x, params); %! assert(y2, [0 0 0 0.5 1.0 0.5 0 0 0 0 0]); %! params = [6 8 10]; %! y3 = trimf(x, params); %! assert(y3, [0 0 0 0 0 0 0 0.5 1.0 0.5 0]); ## Test input validation %!error %! trimf() %!error %! trimf(1) %!error %! trimf(1, 2, 3) %!error %! trimf([1 0], 2) %!error %! trimf(1, 2) %!error %! trimf(0:100, []) %!error %! trimf(0:100, [2]) %!error %! trimf(0:100, [2 3]) %!error %! trimf(0:100, [90 80 30]) %!error %! trimf(0:100, [30 80 20]) fuzzy-logic-toolkit-0.6.0/inst/writefis.m000066400000000000000000000240201463010412100204370ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {} writefis (@var{fis}) ## @deftypefnx {Function File} {} writefis (@var{fis}, @var{filename}) ## @deftypefnx {Function File} {} writefis (@var{fis}, @var{filename}, @var{dialog}) ## ## Save the specified FIS currently in the Octave workspace to a file ## named by the user. There are three forms of writefis: ## ## @table @asis ## @item # Arguments ## Action Taken ## @item 1 ## Open a dialog GUI to help the user choose a directory and name ## for the output file. ## @item 2 ## Do not open a dialog GUI. Save the FIS to a file in the ## current directory with the specified @var{filename}. If the ## specified @var{filename} does not end in '.fis', append '.fis' ## to the @var{filename}. ## @item 3 ## Open a dialog GUI with the specified @var{filename} in the ## 'filename' textbox of the GUI. If the specified @var{filename} ## does not end in '.fis', append '.fis' to the @var{filename}. ## @end table ## ## The types of the arguments are expected to be: ## @table @var ## @item fis ## an FIS structure satisfying is_fis (see private/is_fis.m) ## @item filename ## a string; if the string does not already end with the extension ## ".fis", then ".fis" is added ## @item dialog ## the string 'dialog' (case insensitive) ## @end table ## ## @noindent ## Note: ## The GUI dialog requires zenity to be installed on the system. ## ## @noindent ## Known error: ## When using the file dialog, if the user clicks "Cancel" instead of ## saving the file, an error message is generated. ## ## @seealso{readfis} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy inference system fis ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: writefis.m ## Last-Modified: 29 May 2024 function writefis (fis, filename = 'filename.fis', dialog = 'dummy') ## If writefis was not called with between 1 and 3 arguments, or if ## the argument values were of the wrong type, print an error message ## and halt. if (!(nargin >= 1 && nargin <= 3)) error ("writefis requires between 1 and 3 arguments\n"); elseif (!is_fis (fis)) error ("writefis's first argument must be an FIS structure\n"); elseif ((nargin >= 2) && !is_string (filename)) error ("writefis's second argument must be a string\n"); elseif ((nargin == 3) && ... !(is_string (dialog) && strcmpi (dialog, 'dialog'))) error ("writefis's third argument must the string 'dialog'\n"); endif ## Open the output file. use_gui = (nargin != 2); fid = open_output_file (filename, use_gui); ## Write the [System], [Input], [Output], and [Rules] ## sections of the output file. write_system_section (fid, fis); write_input_sections (fid, fis); write_output_sections (fid, fis); write_rules_section (fid, fis); ## Close the output file. fclose (fid); endfunction ##---------------------------------------------------------------------- ## Function: open_output_file ## Purpose: Open the output file. Return the fid if successful. ## Otherwise, print an error message and halt. ##---------------------------------------------------------------------- function fid = open_output_file (filename, use_gui) ## If the filename is not empty, and if the last four characters of ## the filename are not '.fis', append '.fis' to the filename. fn_len = length (filename); if (((fn_len >= 4) && ... !strcmp(".fis",filename(fn_len-3:fn_len))) || ... ((fn_len > 0) && (fn_len < 4))) filename = [filename ".fis"]; endif ## If writefis was called with 1 or 3 arguments, use a dialog to ## choose an output filename. if (use_gui) system_command = sprintf ("zenity --file-selection --filename=%s \ --save --confirm-overwrite; \ echo $file", filename); [dialog_error, filename] = system (file=system_command); if (dialog_error) error ("error selecting file using dialog\n"); endif filename = strtrim (filename); endif ## Open output file. [fid, msg] = fopen (filename, "w"); if (fid == -1) if (use_gui) system ('zenity --error --text "Error opening output file."'); endif error ("error opening output file: %s\n", msg); endif endfunction ##---------------------------------------------------------------------- ## Function: write_system_section ## Purpose: Write [System] section of the output file. ##---------------------------------------------------------------------- function write_system_section (fid, fis) fprintf (fid, "[System]\n"); fprintf (fid, "Name='%s'\n", fis.name); fprintf (fid, "Type='%s'\n", fis.type); fprintf (fid, "Version=%.1f\n", fis.version); fprintf (fid, "NumInputs=%d\n", columns(fis.input)); fprintf (fid, "NumOutputs=%d\n", columns(fis.output)); fprintf (fid, "NumRules=%d\n", columns(fis.rule)); fprintf (fid, "AndMethod='%s'\n", fis.andMethod); fprintf (fid, "OrMethod='%s'\n", fis.orMethod); fprintf (fid, "ImpMethod='%s'\n", fis.impMethod); fprintf (fid, "AggMethod='%s'\n", fis.aggMethod); fprintf (fid, "DefuzzMethod='%s'\n", fis.defuzzMethod); endfunction ##---------------------------------------------------------------------- ## Function: write_input_sections ## Purpose: For each FIS input, write [Input] section to ## output file. ##---------------------------------------------------------------------- function write_input_sections (fid, fis) num_inputs = columns (fis.input); for i = 1 : num_inputs num_mfs = columns (fis.input(i).mf); fprintf (fid, "\n[Input%d]\n", i); fprintf (fid, "Name='%s'\n", fis.input(i).name); fprintf (fid, "Range=%s\n", ... strrep (mat2str (fis.input(i).range),","," ")); fprintf (fid, "NumMFs=%d\n", num_mfs); for j = 1 : num_mfs fprintf (fid, "MF%d='%s':'%s',%s\n", j, ... fis.input(i).mf(j).name, fis.input(i).mf(j).type, ... params2str (fis.input(i).mf(j).params)); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: write_output_sections ## Purpose: For each FIS output, write [Output] section to ## output file. ##---------------------------------------------------------------------- function write_output_sections (fid, fis) num_outputs = columns (fis.output); for i = 1 : num_outputs num_mfs = columns (fis.output(i).mf); fprintf (fid, "\n[Output%d]\n", i); fprintf (fid, "Name='%s'\n", fis.output(i).name); fprintf (fid, "Range=%s\n", ... strrep(mat2str(fis.output(i).range),","," ")); fprintf (fid, "NumMFs=%d\n", num_mfs); for j = 1 : num_mfs fprintf (fid, "MF%d='%s':'%s',%s\n", j, ... fis.output(i).mf(j).name, fis.output(i).mf(j).type, ... params2str (fis.output(i).mf(j).params)); endfor endfor endfunction ##---------------------------------------------------------------------- ## Function: write_rules_section ## Purpose: Write [Rules] section to output file. ##---------------------------------------------------------------------- function write_rules_section (fid, fis) num_inputs = columns (fis.input); num_outputs = columns (fis.output); num_rules = columns (fis.rule); fprintf (fid, "\n[Rules]\n"); for i = 1 : num_rules next_ant = fis.rule(i).antecedent; next_con = fis.rule(i).consequent; next_wt = fis.rule(i).weight; next_connect = fis.rule(i).connection; ## Print membership functions for the inputs. if (num_inputs > 0) if (is_int (next_ant(1))) fprintf (fid, "%d", next_ant(1)); else fprintf (fid, "%.2f", next_ant(1)); endif endif for j = 2 : num_inputs if (is_int (next_ant(j))) fprintf (fid, " %d", next_ant(j)); else fprintf (fid, " %.2f", next_ant(j)); endif endfor fprintf(fid, ", "); ## Print membership functions for the outputs. for j = 1 : num_outputs if (is_int (next_con(j))) fprintf (fid, "%d ", next_con(j)); else fprintf (fid, "%.2f ", next_con(j)); endif endfor ## Print the weight in parens. if (is_int (next_wt)) fprintf (fid, "(%d) : ", next_wt); else fprintf (fid, "(%.4f) : ", next_wt); endif ## Print the connection and a newline. fprintf (fid, "%d\n", next_connect); endfor endfunction ##---------------------------------------------------------------------- ## Function: params2str ## Purpose: Convert membership function parameters to string ## representation. ##---------------------------------------------------------------------- function str = params2str (params) if (length (params) < 2) str = ['[' num2str(params) ']']; else str = strrep (mat2str (params), ",", " "); endif endfunction %!shared fis %! fis = readfis ('sugeno_tip_calculator.fis'); ## Test input validation %!error %! writefis() %!error %! writefis(1) %!error %! writefis(fis, 2) %!error %! writefis(fis, 'temp.fis', 'abc') %!error %! writefis(1, 2, 3, 4) fuzzy-logic-toolkit-0.6.0/inst/xie_beni_index.m000066400000000000000000000120551463010412100215610ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{vxb} =} xie_beni_index (@var{input_data}, @var{cluster_centers}, @var{soft_partition}) ## ## Return the Xie-Beni validity index for a given soft partition. ## ## The arguments to xie_beni_index are: ## @itemize @w ## @item ## @var{input_data} - a matrix of input data points; each row corresponds to one point ## @item ## @var{cluster_centers} - a matrix of cluster centers; each row corresponds to one point ## @item ## @var{soft_partition} - the membership degree of each input data point in each cluster ## @end itemize ## ## The return value is: ## @itemize @w ## @item ## @var{vxb} - the Xie-Beni validity index for the given partition ## @end itemize ## ## For demos of this function, please type: ## @example ## demo 'fcm' ## demo 'gustafson_kessel' ## @end example ## ## For more information about the @var{input_data}, @var{cluster_centers}, ## and @var{soft_partition} matrices, please see the documentation for function ## fcm. ## ## @seealso{fcm, gustafson_kessel, partition_coeff, partition_entropy} ## ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy xie beni cluster validity ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: xie_beni_index.m ## Last-Modified: 29 May 2024 function vxb = xie_beni_index (input_data, cluster_centers, ... soft_partition) ## If xie_beni_index was called with an incorrect number of arguments, ## or the argument does not have the correct type, print an error ## message and halt. if (nargin != 3) error ("xie_beni_index requires 3 arguments\n"); elseif (!is_real_matrix (input_data)) error ("xie_beni_index's first argument must be matrix of reals\n"); elseif (!(is_real_matrix (cluster_centers) && (columns (cluster_centers) == columns (input_data)))) error ("xie_beni_index's 2nd arg must be matrix of reals with same #cols as input_data\n"); elseif (!(is_real_matrix (soft_partition) && (min (min (soft_partition)) >= 0) && (max (max (soft_partition)) <= 1))) error ("xie_beni_index's 3rd arg must be a matrix of reals 0.0-1.0\n"); endif ## Compute and return the Xie-Beni index. vxb = xie_beni_private (input_data, cluster_centers, soft_partition); endfunction ##---------------------------------------------------------------------- ## Function: xie_beni_private ## Purpose: Return the Xie-Beni index for the given soft partition. ## Note: The following is an implementation of Equations 13.11, ## 13.12, and 13.13 in Fuzzy Logic: Intelligence, Control and ## Information, by J. Yen and R. Langari, Prentice Hall, 1999, ## page 384 (International Edition). ##---------------------------------------------------------------------- function vxb = xie_beni_private (X, V, Mu) sqr_dist = square_distance_matrix (X, V); sum_sigma = sum (sum (Mu .* sqr_dist)); n = rows (X); d_sqr_min = min_sqr_dist_between_centers (V); vxb = sum_sigma / (n * d_sqr_min); endfunction ##---------------------------------------------------------------------- ## Function: min_sqr_dist_between_centers ## Purpose: Return the square of the minimum distance between ## cluster centers. ##---------------------------------------------------------------------- function d_sqr_min = min_sqr_dist_between_centers (V) k = rows (V); d_sqr_matrix = NaN(k, k); for i = 1 : (k - 1) Vi = V(i, :); for j = (i + 1) : k Vi_to_Vj = V(j, :) - Vi; d_sqr_matrix(i, j) = sum (Vi_to_Vj .* Vi_to_Vj); endfor endfor d_sqr_min = min (min (d_sqr_matrix)); endfunction ## Test input validation %!error %! xie_beni_index() %!error %! xie_beni_index(1) %!error %! xie_beni_index(1, 2) %!error %! xie_beni_index(1, 2, 3, 4) %!error %! xie_beni_index(1j, 2, 3) %!error %! xie_beni_index(1, [2 2], 3) %!error %! xie_beni_index([1 1], [2 2], 3j) fuzzy-logic-toolkit-0.6.0/inst/zmf.m000066400000000000000000000133141463010412100174030ustar00rootroot00000000000000## Copyright (C) 2011-2024 L. Markowsky ## ## This file is part of the fuzzy-logic-toolkit. ## ## The fuzzy-logic-toolkit 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. ## ## The fuzzy-logic-toolkit 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 the fuzzy-logic-toolkit; see the file COPYING. If not, ## see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{y} =} zmf (@var{x}, @var{params}) ## @deftypefnx {Function File} {@var{y} =} zmf (@var{[x1 x2 ... xn]}, @var{[a b]}) ## ## For a given domain @var{x} and parameters @var{params} (or @var{[a b]}), ## return the corresponding @var{y} values for the Z-shaped membership function. ## ## The argument @var{x} must be a real number or a non-empty vector of strictly ## increasing real numbers, and @var{a} and @var{b} must be real numbers, with ## @var{a} < @var{b}. This membership function satisfies: ## @example ## @group ## 1 if x <= a ## f(x) = 1 - 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 0 if x >= b ## @end group ## @end example ## ## @noindent ## which always returns values in the range [0, 1]. ## ## The parameters a and b specify: ## @itemize @w ## @item ## a == the rightmost point at which f(x) = 1 ## @item ## b == the leftmost point at which f(x) = 0 ## @end itemize ## ## @noindent ## At the midpoint of the segment [a, b], the function value is 0.5: ## @itemize @w ## @item ## f((a + b)/2) = 0.5 ## @end itemize ## ## @noindent ## To run the demonstration code, type "@t{demo zmf}" (without the quotation ## marks) at the Octave prompt. ## ## @seealso{dsigmf, gauss2mf, gaussmf, gbellmf, pimf, psigmf, sigmf, smf, trapmf, trimf, zmf_demo} ## @end deftypefn ## Author: L. Markowsky ## Keywords: fuzzy-logic-toolkit fuzzy membership z-shaped ## Directory: fuzzy-logic-toolkit/inst/ ## Filename: zmf.m ## Last-Modified: 30 May 2024 function y = zmf (x, params) ## If the caller did not supply 2 argument values with the correct ## types, print an error message and halt. if (nargin != 2) error ("zmf requires 2 arguments\n"); elseif (!is_domain (x)) error ("zmf's first argument must be a valid domain\n"); elseif (!are_mf_params ('zmf', params)) error ("zmf's second argument must be a parameter vector\n"); endif ## Calculate and return the y values of the membership function on the ## domain x. a = params(1); b = params(2); a_b_ave = (a + b) / 2; b_minus_a = b - a; y_val = @(x_val) zmf_val (x_val, a, b, a_b_ave, b_minus_a); y = arrayfun (y_val, x); endfunction ##---------------------------------------------------------------------- ## Usage: y_val = zmf_val (x_val, a, b, a_b_ave, b_minus_a) ## ## zmf_val returns one value of the Z-shaped membership function, which ## satisfies: ## 1 if x <= a ## f(x) = 1 - 2 * ((x - a)/(b - a))^2 if a < x <= (a + b)/2 ## 2 * ((x - b)/(b - a))^2 if (a + b)/2 < x < b ## 0 if x >= b ## ## zmf_val is a private function, called only by zmf. Because zmf_val ## is not intended for general use -- and because the parameters a and b ## are checked for errors in the function zmf (defined above), the ## parameters are not checked for errors again here. ##---------------------------------------------------------------------- function y_val = zmf_val (x_val, a, b, a_b_ave, b_minus_a) ## Calculate and return a single y value of the Z-shaped membership ## function for the given x value and parameters specified by the ## arguments. if (x_val <= a) y_val = 1; elseif (x_val <= a_b_ave) y_val = 1 - 2 * ((x_val - a) / b_minus_a)^2; elseif (x_val < b) y_val = 2 * ((x_val - b) / b_minus_a)^2; else y_val = 0; endif endfunction %!demo %! x = 0:100; %! params = [40 60]; %! y1 = zmf(x, params); %! params = [25 75]; %! y2 = zmf(x, params); %! params = [10 90]; %! y3 = zmf(x, params); %! figure('NumberTitle', 'off', 'Name', 'zmf demo'); %! plot(x, y1, 'r;params = [40 60];', 'LineWidth', 2) %! hold on; %! plot(x, y2, 'b;params = [25 75];', 'LineWidth', 2) %! hold on; %! plot(x, y3, 'g;params = [10 90];', 'LineWidth', 2) %! ylim([-0.1 1.1]); %! xlabel('Crisp Input Value', 'FontWeight', 'bold'); %! ylabel('Degree of Membership', 'FontWeight', 'bold'); %! grid; %!test %! x = 0:10:100; %! params = [25 75]; %! y = [1 1 1 0.9800 0.8200 0.5000 0.1800 0.020000 0 0 0]; %! z = zmf(x, params); %! assert(z, y, 1e-4); ## Test input validation %!error zmf() %!error zmf(1) %!error zmf(1, 2, 3) %!error zmf([1 0], 2) %!error zmf(1, 2) %!error zmf(0:100, []) %!error zmf(0:100, [30]) %!error zmf(0:100, [90 80 30]) %!error zmf(0:100, 'abc') %!error zmf(0:100, '')