diff --git b/LICENSE.TXT a/LICENSE.TXT new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ a/LICENSE.TXT @@ -0,0 +1,674 @@ + 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 +. diff --git b/Makefile a/Makefile new file mode 100644 index 0000000..bfa99f2 --- /dev/null +++ a/Makefile @@ -0,0 +1,321 @@ +############################################################################# +# Makefile for building: apunts +# Generated by qmake (2.01a) (Qt 4.8.4) on: Mon Nov 4 07:59:25 2013 +# Project: apunts.pro +# Template: app +# Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) +INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I. -I. +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) -L/usr/lib/i386-linux-gnu -lQtSql -lQtGui -lQtCore -lpthread +AR = ar cqs +RANLIB = +QMAKE = /usr/bin/qmake-qt4 +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -r +STRIP = strip +INSTALL_FILE = install -m 644 -p +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = install -m 755 -p +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + adddialog.cpp \ + editdialog.cpp \ + customsqlmodel.cpp \ + customtextedit.cpp moc_mainwindow.cpp \ + moc_adddialog.cpp \ + moc_editdialog.cpp \ + moc_customsqlmodel.cpp \ + moc_customtextedit.cpp \ + qrc_apunts.cpp +OBJECTS = main.o \ + mainwindow.o \ + adddialog.o \ + editdialog.o \ + customsqlmodel.o \ + customtextedit.o \ + moc_mainwindow.o \ + moc_adddialog.o \ + moc_editdialog.o \ + moc_customsqlmodel.o \ + moc_customtextedit.o \ + qrc_apunts.o +DIST = /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/common/gcc-base.conf \ + /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ + /usr/share/qt4/mkspecs/common/g++-base.conf \ + /usr/share/qt4/mkspecs/common/g++-unix.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + apunts.pro +QMAKE_TARGET = apunts +DESTDIR = +TARGET = apunts + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile $(TARGET) + +$(TARGET): ui_mainwindow.h ui_adddialog.h ui_editdialog.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: apunts.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/common/gcc-base.conf \ + /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ + /usr/share/qt4/mkspecs/common/g++-base.conf \ + /usr/share/qt4/mkspecs/common/g++-unix.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + /usr/lib/i386-linux-gnu/libQtSql.prl \ + /usr/lib/i386-linux-gnu/libQtGui.prl \ + /usr/lib/i386-linux-gnu/libQtCore.prl + $(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro +/usr/share/qt4/mkspecs/common/unix.conf: +/usr/share/qt4/mkspecs/common/linux.conf: +/usr/share/qt4/mkspecs/common/gcc-base.conf: +/usr/share/qt4/mkspecs/common/gcc-base-unix.conf: +/usr/share/qt4/mkspecs/common/g++-base.conf: +/usr/share/qt4/mkspecs/common/g++-unix.conf: +/usr/share/qt4/mkspecs/qconfig.pri: +/usr/share/qt4/mkspecs/features/qt_functions.prf: +/usr/share/qt4/mkspecs/features/qt_config.prf: +/usr/share/qt4/mkspecs/features/exclusive_builds.prf: +/usr/share/qt4/mkspecs/features/default_pre.prf: +/usr/share/qt4/mkspecs/features/release.prf: +/usr/share/qt4/mkspecs/features/default_post.prf: +/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf: +/usr/share/qt4/mkspecs/features/warn_on.prf: +/usr/share/qt4/mkspecs/features/qt.prf: +/usr/share/qt4/mkspecs/features/unix/thread.prf: +/usr/share/qt4/mkspecs/features/moc.prf: +/usr/share/qt4/mkspecs/features/resources.prf: +/usr/share/qt4/mkspecs/features/uic.prf: +/usr/share/qt4/mkspecs/features/yacc.prf: +/usr/share/qt4/mkspecs/features/lex.prf: +/usr/share/qt4/mkspecs/features/include_source_dir.prf: +/usr/lib/i386-linux-gnu/libQtSql.prl: +/usr/lib/i386-linux-gnu/libQtGui.prl: +/usr/lib/i386-linux-gnu/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro + +dist: + @$(CHK_DIR_EXISTS) .tmp/apunts1.0.0 || $(MKDIR) .tmp/apunts1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/apunts1.0.0/ && $(COPY_FILE) --parents mainwindow.h adddialog.h editdialog.h customsqlmodel.h customtextedit.h .tmp/apunts1.0.0/ && $(COPY_FILE) --parents apunts.qrc .tmp/apunts1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp adddialog.cpp editdialog.cpp customsqlmodel.cpp customtextedit.cpp .tmp/apunts1.0.0/ && $(COPY_FILE) --parents mainwindow.ui adddialog.ui editdialog.ui .tmp/apunts1.0.0/ && (cd `dirname .tmp/apunts1.0.0` && $(TAR) apunts1.0.0.tar apunts1.0.0 && $(COMPRESS) apunts1.0.0.tar) && $(MOVE) `dirname .tmp/apunts1.0.0`/apunts1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/apunts1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile + + +check: first + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_moc_header_make_all: moc_mainwindow.cpp moc_adddialog.cpp moc_editdialog.cpp moc_customsqlmodel.cpp moc_customtextedit.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp moc_adddialog.cpp moc_editdialog.cpp moc_customsqlmodel.cpp moc_customtextedit.cpp +moc_mainwindow.cpp: adddialog.h \ + customsqlmodel.h \ + editdialog.h \ + mainwindow.h + /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp + +moc_adddialog.cpp: customsqlmodel.h \ + adddialog.h + /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) adddialog.h -o moc_adddialog.cpp + +moc_editdialog.cpp: editdialog.h + /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) editdialog.h -o moc_editdialog.cpp + +moc_customsqlmodel.cpp: customsqlmodel.h + /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) customsqlmodel.h -o moc_customsqlmodel.cpp + +moc_customtextedit.cpp: customtextedit.h + /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) customtextedit.h -o moc_customtextedit.cpp + +compiler_rcc_make_all: qrc_apunts.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_apunts.cpp +qrc_apunts.cpp: apunts.qrc \ + apunts.png + /usr/lib/i386-linux-gnu/qt4/bin/rcc -name apunts apunts.qrc -o qrc_apunts.cpp + +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_mainwindow.h ui_adddialog.h ui_editdialog.h +compiler_uic_clean: + -$(DEL_FILE) ui_mainwindow.h ui_adddialog.h ui_editdialog.h +ui_mainwindow.h: mainwindow.ui + /usr/lib/i386-linux-gnu/qt4/bin/uic mainwindow.ui -o ui_mainwindow.h + +ui_adddialog.h: adddialog.ui \ + customtextedit.h + /usr/lib/i386-linux-gnu/qt4/bin/uic adddialog.ui -o ui_adddialog.h + +ui_editdialog.h: editdialog.ui \ + customtextedit.h + /usr/lib/i386-linux-gnu/qt4/bin/uic editdialog.ui -o ui_editdialog.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_uic_clean + +####### Compile + +main.o: main.cpp mainwindow.h \ + adddialog.h \ + customsqlmodel.h \ + editdialog.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + adddialog.h \ + customsqlmodel.h \ + editdialog.h \ + ui_mainwindow.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +adddialog.o: adddialog.cpp adddialog.h \ + customsqlmodel.h \ + ui_adddialog.h \ + customtextedit.h \ + mainwindow.h \ + editdialog.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o adddialog.o adddialog.cpp + +editdialog.o: editdialog.cpp editdialog.h \ + ui_editdialog.h \ + customtextedit.h \ + mainwindow.h \ + adddialog.h \ + customsqlmodel.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o editdialog.o editdialog.cpp + +customsqlmodel.o: customsqlmodel.cpp customsqlmodel.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o customsqlmodel.o customsqlmodel.cpp + +customtextedit.o: customtextedit.cpp customtextedit.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o customtextedit.o customtextedit.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +moc_adddialog.o: moc_adddialog.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_adddialog.o moc_adddialog.cpp + +moc_editdialog.o: moc_editdialog.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_editdialog.o moc_editdialog.cpp + +moc_customsqlmodel.o: moc_customsqlmodel.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_customsqlmodel.o moc_customsqlmodel.cpp + +moc_customtextedit.o: moc_customtextedit.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_customtextedit.o moc_customtextedit.cpp + +qrc_apunts.o: qrc_apunts.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_apunts.o qrc_apunts.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git b/QSortFilterSqlQueryModel.cpp a/QSortFilterSqlQueryModel.cpp new file mode 100644 index 0000000..97096d6 --- /dev/null +++ a/QSortFilterSqlQueryModel.cpp @@ -0,0 +1,115 @@ +#include "QSortFilterSqlQueryModel.h" +#include +#include + +QSortFilterSqlQueryModel::QSortFilterSqlQueryModel(QObject *parent) : + QSqlQueryModel(parent) +{ + +} + +void QSortFilterSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db) +{ + queryClause = query; + queryDB = db; + + filterString.clear(); + //filterColumn.clear(); + filterFlags = Qt::MatchStartsWith; + sortKeyColumn = -1; + sortOrder = Qt::AscendingOrder; +} + +void QSortFilterSqlQueryModel::select() +{ + + if (queryClause.isEmpty() || (!queryDB.isValid())) + return; + + QString query = queryClause; + + if (!filterString.isEmpty() && !filterColumn.isEmpty()) { + QString whereClause; + QString esFilterString = filterString; + QString esFilterColumn = filterColumn; + + if (filterFlags & Qt::MatchExactly) { + whereClause = "WHERE %1 = %2"; + } else if (filterFlags & Qt::MatchStartsWith) { + whereClause = "WHERE %1 LIKE %2"; + esFilterString.append("*"); + } else if (filterFlags & Qt::MatchEndsWith) { + whereClause = "WHERE %1 LIKE %2"; + esFilterString.prepend("*"); + } else if (filterFlags & Qt::MatchRegExp) { + whereClause = "WHERE %1 REGEXP %2"; + } else if (filterFlags & Qt::MatchWildcard) { + whereClause = "WHERE %1 LIKE %2"; + } else if (filterFlags & Qt::MatchContains) { + whereClause = "WHERE %1 LIKE %2"; + esFilterString.append("*"); + esFilterString.prepend("*"); + } else { return; } // unhandled filterflag + + QSqlDriver *driver = queryDB.driver(); + esFilterColumn = driver->escapeIdentifier(filterColumn, QSqlDriver::FieldName); + QSqlField field; field.setType(QVariant::String); field.setValue(esFilterString); + esFilterString = driver->formatValue(field); + if (filterFlags & Qt::MatchStartsWith || Qt::MatchEndsWith || Qt::MatchWildcard) { + esFilterString = esFilterString.replace("%", "\\%"); + //if (filterFlags & Qt::MatchWildcard) + esFilterString = esFilterString.replace("*", "%"); + } + + //whereClause.arg(esFilterColumn).arg(esFilterString); // don't know why it doesn't work + whereClause = whereClause.replace("%1", esFilterColumn).replace("%2", esFilterString); + query.append(" " + whereClause); + } + + if (sortKeyColumn >= 0) { + QString orderClause; + orderClause = "ORDER BY " + QString::number(sortKeyColumn+1) + " " + ((sortOrder == Qt::AscendingOrder) ? "ASC" : "DESC"); + query.append(" " + orderClause); + } + + QSqlQueryModel::setQuery(query, queryDB); + +} + + +void QSortFilterSqlQueryModel::setSort(int column, Qt::SortOrder order) +{ + sortKeyColumn = column; + sortOrder = order; +} + + +void QSortFilterSqlQueryModel::sort(int column, Qt::SortOrder order) +{ + if ((sortKeyColumn != column) || (sortOrder != order)) { + setSort(column, order); + select(); + } +} + +void QSortFilterSqlQueryModel::setFilterColumn(const QString &column) +{ + filterColumn = column; +} + +void QSortFilterSqlQueryModel::setFilter(const QString &filter) { + filterString = filter; +} + +void QSortFilterSqlQueryModel::setFilterFlags(const Qt::MatchFlag flags) +{ + filterFlags = flags; +} + +void QSortFilterSqlQueryModel::filter(const QString &filter) +{ + if (filterString != filter) { + setFilter(filter); + select(); + } +} diff --git b/QSortFilterSqlQueryModel.h a/QSortFilterSqlQueryModel.h new file mode 100644 index 0000000..aed83ba --- /dev/null +++ a/QSortFilterSqlQueryModel.h @@ -0,0 +1,44 @@ +#ifndef QSORTFILTERSQLQUERYMODEL_H +#define QSORTFILTERSQLQUERYMODEL_H + +#include +#include + +class QSortFilterSqlQueryModel : public QSqlQueryModel +{ + Q_OBJECT + +public: + + explicit QSortFilterSqlQueryModel(QObject *parent = 0); + + //void setQuery(const QSqlQuery &query); + void setQuery(const QString & query, const QSqlDatabase & db = QSqlDatabase::database() ); + +public slots: + + void setFilterColumn (const QString & column); + void setFilterFlags (const Qt::MatchFlag flags); + void setFilter( const QString & filter ); + void filter( const QString & filter ); + + void select(); + + virtual void setSort (int column, Qt::SortOrder order); + virtual void sort (int column, Qt::SortOrder order); + +private: + + QSqlDatabase queryDB; + QString queryClause; + Qt::MatchFlag filterFlags; + QString filterString; + QString filterColumn; + int sortKeyColumn; + Qt::SortOrder sortOrder; + +signals: + +}; + +#endif // QSORTFILTERSQLQUERYMODEL_H diff --git b/QSortFilterSqlQueryModel.o a/QSortFilterSqlQueryModel.o new file mode 100644 index 0000000..cc8d67c --- /dev/null +++ a/QSortFilterSqlQueryModel.o diff --git b/adddialog.cpp a/adddialog.cpp new file mode 100644 index 0000000..c548792 --- /dev/null +++ a/adddialog.cpp @@ -0,0 +1,75 @@ +#include "adddialog.h" +#include "ui_adddialog.h" +#include "mainwindow.h" +#include +#include + +AddDialog::AddDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AddDialog) +{ + this->parent = parent; + ui->setupUi(this); + ui->nameLineEdit->setMaxLength(64); + ui->phoneLineEdit->setMaxLength(9); + ui->commentTextEdit->setMaxLength(140); + connect(ui->buttonBox,SIGNAL(rejected()),parent,SLOT(dismissAddDialog())); + connect(this,SIGNAL(requestClose()),parent,SLOT(dismissAddDialog())); + connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(add())); + showAssignatures(); +} + +void AddDialog::showAssignatures() +{ + tableViewModel.setQuery("SELECT nom AS \"Assignatura\" FROM assignatures ORDER by nom;"); + ui->assignaturesTableView->setModel(&tableViewModel); + ui->assignaturesTableView->resizeColumnsToContents(); +} + +void AddDialog::add() +{ + QSqlQuery reserva; + QSqlQuery assignatura; + QModelIndexList indexes = ui->assignaturesTableView->selectionModel()->selectedRows(); + if(indexes.count()) + { + if(!MainWindow::checkPhone(ui->phoneLineEdit->text())) + { + QMessageBox::critical(this,"Error",trUtf8("Número de telèfon invàlid")); + return; + } + for(int i = 0; i < indexes.count(); i++) + { + int number = MainWindow::getNum(tableViewModel.data(indexes.at(i)).toString()); + reserva.prepare("INSERT into reserves VALUES(:name,:num,:phone,NOW(),:comm);"); + reserva.bindValue(":name",ui->nameLineEdit->text()); + reserva.bindValue(":num",number); + reserva.bindValue(":phone",ui->phoneLineEdit->text().toInt()); + reserva.bindValue(":comm",ui->commentTextEdit->toPlainText()); + reserva.exec(); + assignatura.prepare("UPDATE assignatures SET agafats = '1' WHERE num = :n;"); + assignatura.bindValue(":n",number); + assignatura.exec(); + } + ((MainWindow*)parent)->triggerUpdate(); + if(reserva.isActive() && assignatura.isActive()) + { + ((MainWindow*)parent)->setStatusMessage(trUtf8("Canvis desats: s'han afegit els préstecs")); + emit requestClose(); + return; + } + ((MainWindow*)parent)->setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades")); + emit requestClose(); + } + else + { + QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap assignatura")); + return; + } + emit requestClose(); +} + +AddDialog::~AddDialog() +{ + delete ui; +} diff --git b/adddialog.h a/adddialog.h new file mode 100644 index 0000000..ead9b9e --- /dev/null +++ a/adddialog.h @@ -0,0 +1,33 @@ +#ifndef ADDDIALOG_H +#define ADDDIALOG_H + +#include +#include +#include "customsqlmodel.h" + +namespace Ui { +class AddDialog; +} + +class AddDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AddDialog(QWidget *parent = 0); + ~AddDialog(); + +public slots: + void add(); + +private: + QWidget *parent; + Ui::AddDialog *ui; + CustomSQLModel tableViewModel; + void showAssignatures(); + +signals: + void requestClose(); +}; + +#endif // ADDDIALOG_H diff --git b/adddialog.o a/adddialog.o new file mode 100644 index 0000000..fba8449 --- /dev/null +++ a/adddialog.o diff --git b/adddialog.ui a/adddialog.ui new file mode 100644 index 0000000..9c34d25 --- /dev/null +++ a/adddialog.ui @@ -0,0 +1,202 @@ + + + AddDialog + + + + 0 + 0 + 280 + 500 + + + + Afegir préstec... + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 10 + 20 + + + + + + + + + + + 0 + 0 + + + + Nom i cognoms + + + + + + + + + + + 0 + 0 + + + + Telèfon + + + + + + + + + + Comentari (Màx 140 caràcters) + + + + + + + + 0 + 0 + + + + + 16777215 + 100 + + + + + + + + + 0 + 0 + + + + Assignatures + + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::MultiSelection + + + QAbstractItemView::SelectRows + + + true + + + false + + + true + + + false + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 10 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + + CustomTextEdit + QTextEdit +
customtextedit.h
+
+
+ + +
diff --git b/apunts a/apunts new file mode 100755 index 0000000..3ddf3bf --- /dev/null +++ a/apunts diff --git b/apunts.png a/apunts.png new file mode 100644 index 0000000..a48e329 --- /dev/null +++ a/apunts.png diff --git b/apunts.pro a/apunts.pro new file mode 100644 index 0000000..efc77d1 --- /dev/null +++ a/apunts.pro @@ -0,0 +1,35 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-01-14T13:01:37 +# +#------------------------------------------------- + +QT += core gui sql + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = apunts +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + adddialog.cpp \ + editdialog.cpp \ + customsqlmodel.cpp \ + customtextedit.cpp + +HEADERS += mainwindow.h \ + adddialog.h \ + editdialog.h \ + customsqlmodel.h \ + customtextedit.h + +FORMS += mainwindow.ui \ + adddialog.ui \ + editdialog.ui + +OTHER_FILES += + +RESOURCES += \ + apunts.qrc diff --git b/apunts.pro.user a/apunts.pro.user new file mode 100644 index 0000000..a1493f6 --- /dev/null +++ a/apunts.pro.user @@ -0,0 +1,255 @@ + + + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + true + 1 + true + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {c86d7da1-3052-4bc0-8e07-2ce69d480c89} + 1 + 0 + 0 + + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/users/imanol/devel/qt4/apunts + true + + + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/users/imanol/devel/qt4/apunts/ + true + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + + false + false + false + false + true + 0.01 + 10 + true + 25 + + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + apunts + + Qt4ProjectManager.Qt4RunConfiguration:/home/users/imanol/devel/qt4/apunts/apunts.pro + 2 + + apunts.pro + false + false + + + 3768 + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {e69b930c-1ca4-433f-a065-463b1709aab0} + + + ProjectExplorer.Project.Updater.FileVersion + 12 + + diff --git b/apunts.pro.user.10f4848 a/apunts.pro.user.10f4848 new file mode 100644 index 0000000..3a44c0e --- /dev/null +++ a/apunts.pro.user.10f4848 @@ -0,0 +1,242 @@ + + + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + System + false + 4 + false + true + 1 + true + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + 0 + + ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5} + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.2 in PATH (System) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/imanol/devel/qt4/apunts + 2 + false + + + ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5} + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.2 in PATH (System) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/imanol/devel/qt4/apunts + 2 + false + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + No deployment + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + + false + false + false + false + true + 0.01 + 10 + true + 25 + + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + apunts + + Qt4ProjectManager.Qt4RunConfiguration + 2 + + apunts.pro + false + false + + + 3768 + true + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {10f48485-ccaf-42d3-823f-8a27a830a51c} + + + ProjectExplorer.Project.Updater.FileVersion + 11 + + diff --git b/apunts.pro.user.2.6pre1 a/apunts.pro.user.2.6pre1 new file mode 100644 index 0000000..3a44c0e --- /dev/null +++ a/apunts.pro.user.2.6pre1 @@ -0,0 +1,242 @@ + + + + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + System + false + 4 + false + true + 1 + true + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Qt4ProjectManager.Target.DesktopTarget + 0 + 0 + 0 + + ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5} + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.2 in PATH (System) Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + /home/imanol/devel/qt4/apunts + 2 + false + + + ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5} + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + + + true + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Qt 4.8.2 in PATH (System) Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/imanol/devel/qt4/apunts + 2 + false + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + No deployment + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + + false + false + false + false + true + 0.01 + 10 + true + 25 + + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + apunts + + Qt4ProjectManager.Qt4RunConfiguration + 2 + + apunts.pro + false + false + + + 3768 + true + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.EnvironmentId + {10f48485-ccaf-42d3-823f-8a27a830a51c} + + + ProjectExplorer.Project.Updater.FileVersion + 11 + + diff --git b/apunts.qrc a/apunts.qrc new file mode 100644 index 0000000..764a31b --- /dev/null +++ a/apunts.qrc @@ -0,0 +1,5 @@ + + + apunts.png + + diff --git b/customsqlmodel.cpp a/customsqlmodel.cpp new file mode 100644 index 0000000..92d93c3 --- /dev/null +++ a/customsqlmodel.cpp @@ -0,0 +1,78 @@ +#include "customsqlmodel.h" +#include +#include +#include +#include +#include +#include + +CustomSQLModel::CustomSQLModel(QObject *parent) : + QSqlQueryModel(parent) +{ + +} + +QVariant CustomSQLModel::data(const QModelIndex &item, int role) const +{ + if(columnCount() != 1) + { + if ((role == Qt::BackgroundColorRole) && compareDates(record(item.row()).value("Data").toString())) + { + return Qt::red; + } + if ((role == Qt::FontRole) && compareDates(record(item.row()).value("Data").toString())) + { + QFont f; + f.setBold(true); + return f; + } + } + return QSqlQueryModel::data(item, role); +} + +Qt::ItemFlags CustomSQLModel::flags(const QModelIndex &index) const + { + if(columnCount() == 1) + { + if(isReservat(record(index.row()).value(0).toString())) + { + return Qt::NoItemFlags; + } + } + return QAbstractItemModel::flags(index); + } + + +bool CustomSQLModel::compareDates(const QString date) const +{ + int year, month, day, hour, minute, second; + + year = date.mid(0,4).toInt(); + month = date.mid(5,2).toInt(); + day = date.mid(8,2).toInt(); + + hour = date.mid(11,2).toInt(); + minute = date.mid(14,2).toInt(); + second = date.mid(17,2).toInt(); + + QDate currentDate = QDate::currentDate(); + QTime currentTime = QTime::currentTime(); + QDateTime current(currentDate,currentTime); + QDate d(year,month,day); + QTime t(hour,minute,second); + QDateTime timestamp(d,t); + return (timestamp.daysTo(current) > 3); +} + +bool CustomSQLModel::isReservat(QString name) const +{ + QSqlQuery assignatures("SELECT * FROM assignatures WHERE agafats = 1;"); + while(assignatures.next()) + { + if(assignatures.record().value(0).toString() == name) + { + return true; + } + } + return false; +} diff --git b/customsqlmodel.h a/customsqlmodel.h new file mode 100644 index 0000000..8c4b361 --- /dev/null +++ a/customsqlmodel.h @@ -0,0 +1,19 @@ +#ifndef CUSTOMSQLMODEL_H +#define CUSTOMSQLMODEL_H + +#include +#include + +class CustomSQLModel : public QSqlQueryModel +{ + Q_OBJECT +public: + QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + explicit CustomSQLModel(QObject *parent = 0); + bool compareDates(const QString date) const; + bool isReservat(const QString assignatura) const; + +}; + +#endif // CUSTOMSQLMODEL_H diff --git b/customsqlmodel.o a/customsqlmodel.o new file mode 100644 index 0000000..5d63c63 --- /dev/null +++ a/customsqlmodel.o diff --git b/customtextedit.cpp a/customtextedit.cpp new file mode 100644 index 0000000..801d1f8 --- /dev/null +++ a/customtextedit.cpp @@ -0,0 +1,38 @@ +#include "customtextedit.h" +#include + +CustomTextEdit::CustomTextEdit(QObject *parent) : QTextEdit((QWidget*)parent) +{ + maxLength = 0; + connect(this,SIGNAL(textChanged()),this,SLOT(truncateText())); +} + +void CustomTextEdit::setMaxLength(int length) +{ + maxLength = length; + QString curText = toPlainText(); + if ((maxLength > 0) && (curText.length() > maxLength)) + { + curText = curText.left(maxLength); + setPlainText(curText); + } +} + +int CustomTextEdit::getMaxLength() +{ + return maxLength; +} + +void CustomTextEdit::truncateText() +{ + if(maxLength > 0) + { + QString curText = this->toPlainText(); + if(curText.length() > maxLength) + { + this->setText(curText.left(maxLength)); + this->moveCursor(QTextCursor::End); + } + } +} + diff --git b/customtextedit.h a/customtextedit.h new file mode 100644 index 0000000..4a6188b --- /dev/null +++ a/customtextedit.h @@ -0,0 +1,26 @@ +#ifndef CUSTOMTEXTEDIT_H +#define CUSTOMTEXTEDIT_H + +#include + +class CustomTextEdit : public QTextEdit +{ + Q_OBJECT + public: + explicit CustomTextEdit(QObject *parent = 0); + int getMaxLength(); + + public slots: + void setMaxLength(int length); + + protected: + /*virtual void keyPressEvent(QKeyEvent *e); + void insertFromMimeData(const QMimeData* source);*/ + + private: + int maxLength; + private slots: + void truncateText(); +}; + +#endif // CUSTOMTEXTEDIT_H diff --git b/customtextedit.o a/customtextedit.o new file mode 100644 index 0000000..03210da --- /dev/null +++ a/customtextedit.o diff --git b/editdialog.cpp a/editdialog.cpp new file mode 100644 index 0000000..e9a7acb --- /dev/null +++ a/editdialog.cpp @@ -0,0 +1,80 @@ +#include "editdialog.h" +#include "ui_editdialog.h" +#include "mainwindow.h" +#include + +EditDialog::EditDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::EditDialog) +{ + ui->setupUi(this); + ui->nameLineEdit->setMaxLength(64); + ui->phoneLineEdit->setMaxLength(9); + ui->commentTextEdit->setMaxLength(140); + connect(ui->buttonBox,SIGNAL(rejected()),parent,SLOT(dismissEditDialog())); + connect(this,SIGNAL(requestClose()),parent,SLOT(dismissEditDialog())); + connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(edit())); + EditDialog::parent = parent; + showValues(); +} + +void EditDialog::showValues() +{ + QSqlRecord previousReserva = ((MainWindow*)parent)->getSelectedReserva(); + previousAssignatura = previousReserva.value(1).toString(); + ui->nameLineEdit->setText(previousReserva.value(0).toString()); + ui->phoneLineEdit->setText(previousReserva.value(2).toString()); + ui->commentTextEdit->setText(previousReserva.value(4).toString()); + populateAssignatures(previousAssignatura); +} + +void EditDialog::populateAssignatures(QString selected) +{ + tableViewModel.setQuery("SELECT nom FROM assignatures WHERE agafats = 0 ORDER by nom;"); + ui->assignaturaComboBox->addItem(selected); + for(int i = 0; i < tableViewModel.rowCount(); i++) + { + ui->assignaturaComboBox->addItem(tableViewModel.record(i).value("nom").toString()); + } +} + +void EditDialog::edit() +{ + QSqlQuery reserva; + QSqlQuery newAssignatura; + QSqlQuery oldAssignatura; + if(!MainWindow::checkPhone(ui->phoneLineEdit->text())) + { + QMessageBox::critical(this,"Error",trUtf8("Número de telèfon invàlid")); + return; + } + int newNumber = MainWindow::getNum(ui->assignaturaComboBox->currentText()); + int oldNumber = MainWindow::getNum(previousAssignatura); + reserva.prepare("UPDATE reserves SET nom_i_cognoms = :n, apunts = :na, telefon = :t, comentari = :c WHERE apunts = :a;"); + reserva.bindValue(":n",ui->nameLineEdit->text()); + reserva.bindValue(":na",newNumber); + reserva.bindValue(":t",ui->phoneLineEdit->text().toInt()); + reserva.bindValue(":c",ui->commentTextEdit->toPlainText()); + reserva.bindValue(":a",oldNumber); + reserva.exec(); + newAssignatura.prepare("UPDATE assignatures SET agafats = '1' WHERE num = :na;"); + oldAssignatura.prepare("UPDATE assignatures SET agafats = '0' WHERE num = :a;"); + newAssignatura.bindValue(":na",newNumber); + oldAssignatura.bindValue(":n",oldNumber); + newAssignatura.exec(); + oldAssignatura.exec(); + ((MainWindow*)parent)->triggerUpdate(); + if(reserva.isActive() && newAssignatura.isActive() && oldAssignatura.isActive()) + { + ((MainWindow*)parent)->setStatusMessage(trUtf8("Canvis desats: s'han afegit els préstecs")); + emit requestClose(); + return; + } + ((MainWindow*)parent)->setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades")); + emit requestClose(); +} + +EditDialog::~EditDialog() +{ + delete ui; +} diff --git b/editdialog.h a/editdialog.h new file mode 100644 index 0000000..6fa13e2 --- /dev/null +++ a/editdialog.h @@ -0,0 +1,34 @@ +#ifndef EDITDIALOG_H +#define EDITDIALOG_H + +#include +#include + +namespace Ui { +class EditDialog; +} + +class EditDialog : public QDialog +{ + Q_OBJECT + +public slots: + void edit(); + +public: + explicit EditDialog(QWidget *parent = 0); + ~EditDialog(); + +private: + Ui::EditDialog *ui; + QWidget *parent; + QSqlQueryModel tableViewModel; + QString previousAssignatura; + void showValues(); + void populateAssignatures(QString selected); + +signals: + void requestClose(); +}; + +#endif // EDITDIALOG_H diff --git b/editdialog.o a/editdialog.o new file mode 100644 index 0000000..151420e --- /dev/null +++ a/editdialog.o diff --git b/editdialog.ui a/editdialog.ui new file mode 100644 index 0000000..1199c3c --- /dev/null +++ a/editdialog.ui @@ -0,0 +1,179 @@ + + + EditDialog + + + + 0 + 0 + 280 + 336 + + + + Editar préstec... + + + + + + + + Nom i cognoms + + + + + + + + + + Telèfon + + + + + + + + + + Comentari (Màx 140 caràcters) + + + + + + + + + + Assignatura + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + CustomTextEdit + QTextEdit +
customtextedit.h
+
+
+ + + + buttonBox + accepted() + EditDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + EditDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git b/main.cpp a/main.cpp new file mode 100644 index 0000000..597b902 --- /dev/null +++ a/main.cpp @@ -0,0 +1,11 @@ +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git b/main.o a/main.o new file mode 100644 index 0000000..8828ba6 --- /dev/null +++ a/main.o diff --git b/mainwindow.cpp a/mainwindow.cpp new file mode 100644 index 0000000..9ceb399 --- /dev/null +++ a/mainwindow.cpp @@ -0,0 +1,218 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include +#include +#include "customsqlmodel.h" +#include +#include +#include + +const char* MainWindow::CONFIG_PATH = "/usr/local/etc/apunts.conf"; + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + std::string* parameters = loadConfig(CONFIG_PATH); + db = QSqlDatabase::addDatabase("QMYSQL"); + db.setHostName(parameters[0].c_str()); + db.setUserName(parameters[1].c_str()); + db.setPassword(parameters[2].c_str()); + db.setDatabaseName(parameters[3].c_str()); + if(!db.open()) + { + QMessageBox::critical(this,"Error",trUtf8("No s'ha pogut obrir la base de dades")); + exit(-1); + } + delete[] parameters; + connect(ui->exitButton,SIGNAL(clicked()),this, SLOT(close())); + connect(ui->addButton,SIGNAL(clicked()),this,SLOT(showAddDialog())); + connect(ui->editButton,SIGNAL(clicked()),this,SLOT(showEditDialog())); + connect(ui->deleteButton,SIGNAL(clicked()),this,SLOT(deleteReserva())); + connect(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(showEditDialog())); + connect(ui->tableView->horizontalHeader(),SIGNAL(sectionClicked(int)),this,SLOT(sort(int))); + query = "SELECT r.nom_i_cognoms as \"Nom i cognoms\", a.nom as Apunts, r.telefon as Telèfon, r.data as Data, r.comentari as Comentari FROM assignatures as a, reserves as r WHERE a.num = r.apunts "; + orderQuery= ";"; + triggerUpdate(); + ui->tableView->setModel(&tableViewModel); + ui->tableView->resizeColumnsToContents(); + ui->tableView->resizeRowsToContents(); + setStatusMessage(trUtf8("Llistat de préstecs carregat")); +} + +void MainWindow::triggerUpdate() +{ + + std::string str = query+orderQuery; + tableViewModel.setQuery(trUtf8(str.c_str())); + ui->tableView->resizeRowsToContents(); +} + +void MainWindow::setStatusMessage(const QString &str) +{ + ui->statusBar->showMessage(str); +} + +QSqlRecord& MainWindow::getSelectedReserva() +{ + return selectedReserva; +} + +int MainWindow::getNum(QString name) +{ + QSqlQuery number; + number.prepare("SELECT num FROM assignatures WHERE nom = :n"); + number.bindValue(":n",name); + number.exec(); + number.next(); + return number.record().value(0).toInt(); +} + +std::string* MainWindow::loadConfig(const char *path) +{ + std::ifstream conf; + conf.open(path); + if(!conf.is_open()) + { + conf.close(); + QMessageBox::critical(this,"Error",trUtf8("No s'ha pogut carregar el fitxer de configuració. Aviseu a l'administrador.")); + exit(-2); + } + std::string host, user, pass, db; + std::getline(conf,host); + std::getline(conf,user); + std::getline(conf,pass); + std::getline(conf,db); + host = host.substr(5); + user = user.substr(5); + pass = pass.substr(9); + db = db.substr(9); + std::string* ret = new std::string[4]; + ret[0] = host; + ret[1] = user; + ret[2] = pass; + ret[3] = db; + return ret; +} + +bool MainWindow::checkPhone(QString phone) +{ + bool isNumber; + phone.toInt(&isNumber); + if((!isNumber) || (phone.length() != 9)) + { + return false; + } + return true; +} + +void MainWindow::showAddDialog() +{ + add = new AddDialog(this); + add->show(); +} + +void MainWindow::showEditDialog() +{ + if(ui->tableView->selectionModel()->selectedIndexes().isEmpty()) + { + QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap préstec")); + return; + } + QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); + if(indexes.count() > 1) + { + QMessageBox::critical(this,"Error",trUtf8("Només es pot editar una entrada a la vegada")); + return; + } + selectedReserva=tableViewModel.record((indexes.at(0).row())); + edit = new EditDialog(this); + edit->show(); +} + +void MainWindow::deleteReserva() +{ + QSqlQuery deleteQuery, assignaturaQuery; + QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); + if(!warnUser(indexes.count())) + { + return; + } + for(int i = 0; i < indexes.count(); i++) + { + int number = getNum(tableViewModel.record(indexes.at(i).row()).value(1).toString()); + deleteQuery.prepare("DELETE FROM reserves WHERE apunts = :n"); + deleteQuery.bindValue(":n",number); + deleteQuery.exec(); + assignaturaQuery.prepare("UPDATE assignatures SET agafats = '0' WHERE num = :n;"); + assignaturaQuery.bindValue(":n",number); + assignaturaQuery.exec(); + } + triggerUpdate(); + if(deleteQuery.isActive() && assignaturaQuery.isActive()) + { + setStatusMessage(trUtf8("Canvis desats: s'ha eliminat el préstec")); + return; + } + setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades")); +} + +void MainWindow::dismissAddDialog() +{ + add->close(); + delete add; + add = 0; +} + +void MainWindow::dismissEditDialog() +{ + edit->close(); + delete edit; + edit = 0; +} + +bool MainWindow::warnUser(int elements) +{ + if(elements) + { + std::stringstream sstream; + sstream << "Segur que vols eliminar "; + sstream << elements; + sstream << " préstecs?"; + int n = QMessageBox::warning(this,trUtf8("Eliminar préstec?"),trUtf8(sstream.str().c_str()),"&Si","&No",QString::null,1,1); + if(!n) + { + return true; + } + return false; + } + else + { + QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap préstec")); + return false; + } +} + +void MainWindow::sort(int index) +{ + orderQuery = "ORDER BY "; + std::stringstream sstream; + sstream << (index+1); + orderQuery.append(sstream.str()); + Qt::SortOrder sortOrder = ui->tableView->horizontalHeader()->sortIndicatorOrder(); + if(sortOrder == Qt::AscendingOrder) + { + orderQuery += " ASC;"; + } + else + { + orderQuery += " DESC;"; + } + triggerUpdate(); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git b/mainwindow.h a/mainwindow.h new file mode 100644 index 0000000..60df90b --- /dev/null +++ a/mainwindow.h @@ -0,0 +1,52 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include "adddialog.h" +#include "editdialog.h" +#include "customsqlmodel.h" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + void triggerUpdate(); + void setStatusMessage(const QString &str); + QSqlRecord& getSelectedReserva(); + static int getNum(QString name); + static bool checkPhone(QString phone); + +public slots: + void showAddDialog(); + void showEditDialog(); + void deleteReserva(); + void dismissAddDialog(); + void dismissEditDialog(); + +private slots: + void sort(int index); + +private: + Ui::MainWindow *ui; + CustomSQLModel tableViewModel; + QSqlDatabase db; + AddDialog *add; + EditDialog *edit; + QSqlRecord selectedReserva; + std::string query; + std::string orderQuery; + static const char* CONFIG_PATH; + std::string *loadConfig(const char* path); + bool warnUser(int elements); +}; + +#endif // MAINWINDOW_H diff --git b/mainwindow.o a/mainwindow.o new file mode 100644 index 0000000..6b92f44 --- /dev/null +++ a/mainwindow.o diff --git b/mainwindow.ui a/mainwindow.ui new file mode 100644 index 0000000..6d8230a --- /dev/null +++ a/mainwindow.ui @@ -0,0 +1,283 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + Aplicació Apunts + + + + :/Icons/apunts.png:/Icons/apunts.png + + + + + + + + + + Qt::ScrollBarAsNeeded + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::MultiSelection + + + QAbstractItemView::SelectRows + + + true + + + Qt::SolidLine + + + true + + + false + + + true + + + false + + + false + + + + + + + + + + 0 + 0 + + + + + 32 + 32 + + + + + 32 + 32 + + + + Afegeix préstec + + + + + + + + + + + + 32 + 32 + + + + + + + + + 0 + 0 + + + + + 32 + 32 + + + + + 32 + 32 + + + + Esborra préstec + + + + + + + + + + + + + + + + 0 + 0 + + + + + 32 + 32 + + + + + 32 + 32 + + + + Edita préstec + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Sortir + + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 10 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 15 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 10 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 10 + + + + + + + + + + + + + + diff --git b/moc_QSortFilterSqlQueryModel.cpp a/moc_QSortFilterSqlQueryModel.cpp new file mode 100644 index 0000000..a3595a7 --- /dev/null +++ a/moc_QSortFilterSqlQueryModel.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'QSortFilterSqlQueryModel.h' +** +** Created: Thu Apr 4 17:03:56 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "QSortFilterSqlQueryModel.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'QSortFilterSqlQueryModel.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_QSortFilterSqlQueryModel[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 7, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 33, 26, 25, 25, 0x0a, + 64, 58, 25, 25, 0x0a, + 101, 94, 25, 25, 0x0a, + 120, 94, 25, 25, 0x0a, + 136, 25, 25, 25, 0x0a, + 158, 145, 25, 25, 0x0a, + 185, 145, 25, 25, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_QSortFilterSqlQueryModel[] = { + "QSortFilterSqlQueryModel\0\0column\0" + "setFilterColumn(QString)\0flags\0" + "setFilterFlags(Qt::MatchFlag)\0filter\0" + "setFilter(QString)\0filter(QString)\0" + "select()\0column,order\0setSort(int,Qt::SortOrder)\0" + "sort(int,Qt::SortOrder)\0" +}; + +void QSortFilterSqlQueryModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + QSortFilterSqlQueryModel *_t = static_cast(_o); + switch (_id) { + case 0: _t->setFilterColumn((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 1: _t->setFilterFlags((*reinterpret_cast< const Qt::MatchFlag(*)>(_a[1]))); break; + case 2: _t->setFilter((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 3: _t->filter((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 4: _t->select(); break; + case 5: _t->setSort((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Qt::SortOrder(*)>(_a[2]))); break; + case 6: _t->sort((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Qt::SortOrder(*)>(_a[2]))); break; + default: ; + } + } +} + +const QMetaObjectExtraData QSortFilterSqlQueryModel::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject QSortFilterSqlQueryModel::staticMetaObject = { + { &QSqlQueryModel::staticMetaObject, qt_meta_stringdata_QSortFilterSqlQueryModel, + qt_meta_data_QSortFilterSqlQueryModel, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &QSortFilterSqlQueryModel::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *QSortFilterSqlQueryModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *QSortFilterSqlQueryModel::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_QSortFilterSqlQueryModel)) + return static_cast(const_cast< QSortFilterSqlQueryModel*>(this)); + return QSqlQueryModel::qt_metacast(_clname); +} + +int QSortFilterSqlQueryModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QSqlQueryModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 7) + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git b/moc_QSortFilterSqlQueryModel.o a/moc_QSortFilterSqlQueryModel.o new file mode 100644 index 0000000..e980b18 --- /dev/null +++ a/moc_QSortFilterSqlQueryModel.o diff --git b/moc_adddialog.cpp a/moc_adddialog.cpp new file mode 100644 index 0000000..bcc914c --- /dev/null +++ a/moc_adddialog.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'adddialog.h' +** +** Created: Mon Nov 4 07:59:46 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "adddialog.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'adddialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.4. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_AddDialog[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 2, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 1, // signalCount + + // signals: signature, parameters, type, tag, flags + 11, 10, 10, 10, 0x05, + + // slots: signature, parameters, type, tag, flags + 26, 10, 10, 10, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_AddDialog[] = { + "AddDialog\0\0requestClose()\0add()\0" +}; + +void AddDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + AddDialog *_t = static_cast(_o); + switch (_id) { + case 0: _t->requestClose(); break; + case 1: _t->add(); break; + default: ; + } + } + Q_UNUSED(_a); +} + +const QMetaObjectExtraData AddDialog::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject AddDialog::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_AddDialog, + qt_meta_data_AddDialog, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &AddDialog::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *AddDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *AddDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_AddDialog)) + return static_cast(const_cast< AddDialog*>(this)); + return QDialog::qt_metacast(_clname); +} + +int AddDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void AddDialog::requestClose() +{ + QMetaObject::activate(this, &staticMetaObject, 0, 0); +} +QT_END_MOC_NAMESPACE diff --git b/moc_adddialog.o a/moc_adddialog.o new file mode 100644 index 0000000..ed02d81 --- /dev/null +++ a/moc_adddialog.o diff --git b/moc_customsqlmodel.cpp a/moc_customsqlmodel.cpp new file mode 100644 index 0000000..a9fb156 --- /dev/null +++ a/moc_customsqlmodel.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'customsqlmodel.h' +** +** Created: Mon Nov 4 07:59:47 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "customsqlmodel.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'customsqlmodel.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.4. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_CustomSQLModel[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + 0 // eod +}; + +static const char qt_meta_stringdata_CustomSQLModel[] = { + "CustomSQLModel\0" +}; + +void CustomSQLModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + Q_UNUSED(_o); + Q_UNUSED(_id); + Q_UNUSED(_c); + Q_UNUSED(_a); +} + +const QMetaObjectExtraData CustomSQLModel::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject CustomSQLModel::staticMetaObject = { + { &QSqlQueryModel::staticMetaObject, qt_meta_stringdata_CustomSQLModel, + qt_meta_data_CustomSQLModel, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &CustomSQLModel::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *CustomSQLModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *CustomSQLModel::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_CustomSQLModel)) + return static_cast(const_cast< CustomSQLModel*>(this)); + return QSqlQueryModel::qt_metacast(_clname); +} + +int CustomSQLModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QSqlQueryModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + return _id; +} +QT_END_MOC_NAMESPACE diff --git b/moc_customsqlmodel.o a/moc_customsqlmodel.o new file mode 100644 index 0000000..0030f73 --- /dev/null +++ a/moc_customsqlmodel.o diff --git b/moc_customtextedit.cpp a/moc_customtextedit.cpp new file mode 100644 index 0000000..4570edd --- /dev/null +++ a/moc_customtextedit.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'customtextedit.h' +** +** Created: Mon Nov 4 07:59:48 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "customtextedit.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'customtextedit.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.4. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_CustomTextEdit[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 2, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 23, 16, 15, 15, 0x0a, + 41, 15, 15, 15, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_CustomTextEdit[] = { + "CustomTextEdit\0\0length\0setMaxLength(int)\0" + "truncateText()\0" +}; + +void CustomTextEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + CustomTextEdit *_t = static_cast(_o); + switch (_id) { + case 0: _t->setMaxLength((*reinterpret_cast< int(*)>(_a[1]))); break; + case 1: _t->truncateText(); break; + default: ; + } + } +} + +const QMetaObjectExtraData CustomTextEdit::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject CustomTextEdit::staticMetaObject = { + { &QTextEdit::staticMetaObject, qt_meta_stringdata_CustomTextEdit, + qt_meta_data_CustomTextEdit, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &CustomTextEdit::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *CustomTextEdit::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *CustomTextEdit::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_CustomTextEdit)) + return static_cast(const_cast< CustomTextEdit*>(this)); + return QTextEdit::qt_metacast(_clname); +} + +int CustomTextEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QTextEdit::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git b/moc_customtextedit.o a/moc_customtextedit.o new file mode 100644 index 0000000..a3828da --- /dev/null +++ a/moc_customtextedit.o diff --git b/moc_editdialog.cpp a/moc_editdialog.cpp new file mode 100644 index 0000000..be8b2ce --- /dev/null +++ a/moc_editdialog.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'editdialog.h' +** +** Created: Mon Nov 4 07:59:47 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "editdialog.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'editdialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.4. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_EditDialog[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 2, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 1, // signalCount + + // signals: signature, parameters, type, tag, flags + 12, 11, 11, 11, 0x05, + + // slots: signature, parameters, type, tag, flags + 27, 11, 11, 11, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_EditDialog[] = { + "EditDialog\0\0requestClose()\0edit()\0" +}; + +void EditDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + EditDialog *_t = static_cast(_o); + switch (_id) { + case 0: _t->requestClose(); break; + case 1: _t->edit(); break; + default: ; + } + } + Q_UNUSED(_a); +} + +const QMetaObjectExtraData EditDialog::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject EditDialog::staticMetaObject = { + { &QDialog::staticMetaObject, qt_meta_stringdata_EditDialog, + qt_meta_data_EditDialog, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &EditDialog::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *EditDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *EditDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_EditDialog)) + return static_cast(const_cast< EditDialog*>(this)); + return QDialog::qt_metacast(_clname); +} + +int EditDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void EditDialog::requestClose() +{ + QMetaObject::activate(this, &staticMetaObject, 0, 0); +} +QT_END_MOC_NAMESPACE diff --git b/moc_editdialog.o a/moc_editdialog.o new file mode 100644 index 0000000..206e7e9 --- /dev/null +++ a/moc_editdialog.o diff --git b/moc_mainwindow.cpp a/moc_mainwindow.cpp new file mode 100644 index 0000000..ca58774 --- /dev/null +++ a/moc_mainwindow.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'mainwindow.h' +** +** Created: Mon Nov 4 07:59:45 2013 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "mainwindow.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'mainwindow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.4. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_MainWindow[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 6, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 12, 11, 11, 11, 0x0a, + 28, 11, 11, 11, 0x0a, + 45, 11, 11, 11, 0x0a, + 61, 11, 11, 11, 0x0a, + 80, 11, 11, 11, 0x0a, + 106, 100, 11, 11, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_MainWindow[] = { + "MainWindow\0\0showAddDialog()\0" + "showEditDialog()\0deleteReserva()\0" + "dismissAddDialog()\0dismissEditDialog()\0" + "index\0sort(int)\0" +}; + +void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + MainWindow *_t = static_cast(_o); + switch (_id) { + case 0: _t->showAddDialog(); break; + case 1: _t->showEditDialog(); break; + case 2: _t->deleteReserva(); break; + case 3: _t->dismissAddDialog(); break; + case 4: _t->dismissEditDialog(); break; + case 5: _t->sort((*reinterpret_cast< int(*)>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject MainWindow::staticMetaObject = { + { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow, + qt_meta_data_MainWindow, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &MainWindow::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *MainWindow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *MainWindow::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_MainWindow)) + return static_cast(const_cast< MainWindow*>(this)); + return QMainWindow::qt_metacast(_clname); +} + +int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git b/moc_mainwindow.o a/moc_mainwindow.o new file mode 100644 index 0000000..4ae4f66 --- /dev/null +++ a/moc_mainwindow.o diff --git b/qrc_apunts.cpp a/qrc_apunts.cpp new file mode 100644 index 0000000..48b0e56 --- /dev/null +++ a/qrc_apunts.cpp @@ -0,0 +1,825 @@ +/**************************************************************************** +** Resource object code +** +** Created: Mon Nov 4 07:59:48 2013 +** by: The Resource Compiler for Qt version 4.8.4 +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +static const unsigned char qt_resource_data[] = { + // /home/users/imanol/devel/qt4/apunts/apunts.png + 0x0,0x0,0x2f,0x15, + 0x89, + 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, + 0x0,0x0,0x30,0x0,0x0,0x0,0x30,0x8,0x6,0x0,0x0,0x0,0x57,0x2,0xf9,0x87, + 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x2e,0x23,0x0,0x0,0x2e,0x23, + 0x1,0x78,0xa5,0x3f,0x76,0x0,0x0,0xa,0x4f,0x69,0x43,0x43,0x50,0x50,0x68,0x6f, + 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69, + 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x67,0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde, + 0xf4,0x42,0x4b,0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x8,0x20,0x52,0x42,0x8b,0x80, + 0x14,0x91,0x26,0x2a,0x21,0x9,0x10,0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11, + 0x45,0x45,0x4,0x1b,0xc8,0xa0,0x88,0x3,0x8e,0x8e,0x80,0x8c,0x15,0x51,0x2c,0xc, + 0x8a,0xa,0xd8,0x7,0xe4,0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1,0x7b, + 0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5,0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3, + 0xcf,0x7,0xc0,0x8,0xc,0x96,0x48,0x33,0x51,0x35,0x80,0xc,0xa9,0x42,0x1e,0x11, + 0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4,0x2e,0x40,0x81,0xa,0x24,0x70,0x0,0x10,0x8, + 0xb3,0x64,0x21,0x73,0xfd,0x23,0x1,0x0,0xf8,0x7e,0x3c,0x3c,0x2b,0x22,0xc0,0x7, + 0xbe,0x0,0x1,0x78,0xd3,0xb,0x8,0x0,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87,0xff, + 0xf,0xea,0x42,0x99,0x5c,0x1,0x80,0x84,0x1,0xc0,0x74,0x91,0x38,0x4b,0x8,0x80, + 0x14,0x0,0x40,0x7a,0x8e,0x42,0xa6,0x0,0x40,0x46,0x1,0x80,0x9d,0x98,0x26,0x53, + 0x0,0xa0,0x4,0x0,0x60,0xcb,0x63,0x62,0xe3,0x0,0x50,0x2d,0x0,0x60,0x27,0x7f, + 0xe6,0xd3,0x0,0x80,0x9d,0xf8,0x99,0x7b,0x1,0x0,0x5b,0x94,0x21,0x15,0x1,0xa0, + 0x91,0x0,0x20,0x13,0x65,0x88,0x44,0x0,0x68,0x3b,0x0,0xac,0xcf,0x56,0x8a,0x45, + 0x0,0x58,0x30,0x0,0x14,0x66,0x4b,0xc4,0x39,0x0,0xd8,0x2d,0x0,0x30,0x49,0x57, + 0x66,0x48,0x0,0xb0,0xb7,0x0,0xc0,0xce,0x10,0xb,0xb2,0x0,0x8,0xc,0x0,0x30, + 0x51,0x88,0x85,0x29,0x0,0x4,0x7b,0x0,0x60,0xc8,0x23,0x23,0x78,0x0,0x84,0x99, + 0x0,0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7,0x2a,0x0,0x0,0x78,0x99, + 0xb2,0x3c,0xb9,0x24,0x39,0x45,0x81,0x5b,0x8,0x2d,0x71,0x7,0x57,0x57,0x2e,0x1e, + 0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x2,0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99, + 0x19,0x32,0x81,0x34,0xf,0xe0,0xf3,0xcc,0x0,0x0,0xa0,0x91,0x15,0x11,0xe0,0x83, + 0xf3,0xfd,0x78,0xce,0xe,0xae,0xce,0xce,0x36,0x8e,0xb6,0xe,0x5f,0x2d,0xea,0xbf, + 0x6,0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70,0x40,0x0,0x0,0xe1,0x74, + 0x7e,0xd1,0xfe,0x2c,0x2f,0xb3,0x1a,0x80,0x3b,0x6,0x80,0x6d,0xfe,0xa2,0x25,0xee, + 0x4,0x68,0x5e,0xb,0xa0,0x75,0xf7,0x8b,0x66,0xb2,0xf,0x40,0xb5,0x0,0xa0,0xe9, + 0xda,0x57,0xf3,0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9,0xd9,0xe5,0xe4, + 0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61,0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57, + 0xfd,0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2,0x24,0x81,0x32,0x5d,0x81, + 0x47,0x4,0xf8,0xe0,0xc2,0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x9,0x84,0x62,0xdc, + 0xe6,0x8f,0x47,0xfc,0xb7,0xb,0xff,0xfc,0x1d,0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58, + 0x2a,0x14,0xe3,0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5,0x22,0x89,0x42, + 0x92,0x29,0xc5,0x25,0xd2,0xff,0x64,0xe2,0xdf,0x2c,0xfb,0x3,0x3e,0xdf,0x35,0x0, + 0xb0,0x6a,0x3e,0x1,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x3,0xf6,0x4b,0x27,0x10,0x58, + 0x74,0xc0,0xe2,0xf7,0x0,0x0,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x8,0x3,0x80,0x68, + 0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47,0xa0,0x25,0x0,0x80,0x66,0x49,0x92, + 0x71,0x0,0x0,0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x8,0x0,0x0,0x44, + 0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4,0xc1,0x18,0x2c,0xc0,0x6,0x1c,0xc1,0x5,0xdc, + 0xc1,0xb,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42,0x10,0x42,0xa,0x64,0x80, + 0x1c,0x72,0x60,0x29,0xac,0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f,0xd4, + 0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70,0xe,0x2e,0xc2,0x55,0xb8,0xe,0x3d, + 0x70,0xf,0xfa,0x61,0x8,0x9e,0xc1,0x28,0xbc,0x81,0x9,0x4,0x41,0xc8,0x8,0x13, + 0x61,0x21,0xda,0x88,0x1,0x62,0x8a,0x58,0x23,0x8e,0x8,0x17,0x99,0x85,0xf8,0x21, + 0xc1,0x48,0x4,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51,0x22,0x4b,0x91,0x35,0x48, + 0x31,0x52,0x8a,0x54,0x20,0x55,0x48,0x1d,0xf2,0x3d,0x72,0x2,0x39,0x87,0x5c,0x46, + 0xba,0x91,0x3b,0xc8,0x0,0x32,0x82,0xfc,0x86,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51, + 0x3d,0xd4,0xc,0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0xb,0xd0,0x64,0x74, + 0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0,0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0, + 0xab,0x68,0xf,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8,0x18,0x7,0x33,0xc4,0x6c, + 0x30,0x2e,0xc6,0xc3,0x42,0xb1,0x38,0x2c,0x9,0x93,0x63,0xcb,0xb1,0x22,0xac,0xc, + 0xab,0xc6,0x1a,0xb0,0x56,0xac,0x3,0xbb,0x89,0xf5,0x63,0xcf,0xb1,0x77,0x4,0x12, + 0x81,0x45,0xc0,0x9,0x36,0x4,0x77,0x42,0x20,0x61,0x1e,0x41,0x48,0x58,0x4c,0x58, + 0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24,0x34,0x11,0xda,0x9,0x37,0x9,0x3,0x84,0x51, + 0xc2,0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9,0xc4,0x18,0x62,0x32,0x31, + 0x87,0x58,0x48,0x2c,0x23,0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4,0x37, + 0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x2,0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2, + 0x46,0xd2,0x6e,0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23,0x93,0xc9,0xda, + 0x64,0x6b,0xb2,0x7,0x39,0x94,0x2c,0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4, + 0x33,0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0xa,0x9d,0x62,0x40,0x71,0xa4,0xf8,0x53,0xe2, + 0x28,0x52,0xca,0x6a,0x4a,0x19,0xe5,0x10,0xe5,0x34,0xe5,0x6,0x65,0x98,0x32,0x41, + 0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11,0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6, + 0x52,0xaf,0x51,0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16,0x49,0x4b,0xa5, + 0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17,0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd, + 0x95,0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8,0x97,0xe8,0x3,0xf4,0x77, + 0xc,0xd,0x86,0x15,0x83,0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x7,0x18,0x67,0x19, + 0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b,0x19,0xc7,0x54,0x30,0x37,0x31,0xeb, + 0x98,0xe7,0x99,0xf,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15,0x91,0xca,0xa, + 0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a,0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0xb, + 0x55,0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae,0x46,0x55,0x33,0x53,0xe3, + 0xa9,0x9,0xd4,0x96,0xab,0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9,0x3b, + 0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4,0x7e,0x59,0xfd,0x89,0x6,0x59,0xc3, + 0x4c,0xc3,0x4f,0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20,0xb,0x63,0x19, + 0xb3,0x78,0x2c,0x21,0x6b,0xd,0xab,0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9, + 0x7c,0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa,0xa9,0xa1,0x39,0x43,0x33, + 0x4a,0x33,0x57,0xb3,0x52,0xf3,0x94,0x66,0x3f,0x7,0xe3,0x98,0x71,0xf8,0x9c,0x74, + 0x4e,0x9,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a,0xde,0x14,0xef,0x29,0xe2,0x29,0x1b, + 0xa6,0x34,0x4c,0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58,0xab,0x48,0xab, + 0x51,0xab,0x47,0xeb,0xbd,0x36,0xae,0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb, + 0x81,0xe,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f,0xce,0x5,0x9d,0xe7,0x53, + 0xd9,0x53,0xdd,0xa7,0xa,0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b,0xa5, + 0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee,0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c, + 0x6f,0xa7,0xde,0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd,0x6d,0xfa,0xa7, + 0xf5,0x47,0xc,0x58,0x6,0xb3,0xc,0x24,0x6,0xdb,0xc,0xce,0x18,0x3c,0xc5,0x35, + 0x71,0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d,0xc3,0x40,0x43,0xa5,0x61, + 0x95,0x61,0x97,0xe1,0x84,0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0xf,0x8c, + 0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d,0xc6,0xa3,0x26,0x6,0x26,0x21,0x26, + 0x4b,0x4d,0xea,0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b,0x4c,0x3b,0x4c, + 0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6,0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b, + 0xe7,0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c,0xb6,0xa8,0xb6,0xb8,0x65, + 0x49,0xb2,0xe4,0x5a,0xa6,0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5,0x58, + 0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25,0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7, + 0xb9,0x4e,0x93,0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9,0xb6,0xa9,0xb7, + 0x19,0xb0,0xe5,0xd8,0x6,0xdb,0xae,0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67, + 0xb7,0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d,0x8d,0xfd,0x3d,0x7,0xd, + 0x87,0xd9,0xe,0xab,0x1d,0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a,0xde, + 0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96,0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf, + 0xd8,0x33,0xe3,0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3,0x47,0x67,0x17, + 0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b,0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b, + 0x1b,0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d,0xe1,0x7a,0xd2,0xf5,0x9d, + 0x9b,0xb3,0x9b,0xc2,0xed,0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc,0x9f, + 0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0,0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1, + 0x3f,0xb,0x9f,0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81,0x67,0xb5,0xe7, + 0x23,0x2f,0x63,0x2f,0x91,0x57,0xad,0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef, + 0x17,0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37,0xde,0x32,0xde,0x59,0x5f, + 0xcc,0x37,0xc0,0xb7,0xc8,0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43,0x7f, + 0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x0,0xa7,0x80,0x25,0x1,0x67,0x3,0x89,0x81, + 0x41,0x81,0x5b,0x2,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a,0xdb,0x65,0xf6, + 0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9,0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1, + 0xad,0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98,0xce,0x91,0xce,0x69,0xe, + 0x85,0x50,0x7e,0xe8,0xd6,0xd0,0x7,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0xc,0x27,0x85, + 0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58,0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1, + 0xdc,0x43,0x73,0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31,0x4f,0x39,0xaf, + 0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e,0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6, + 0x2e,0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b,0x1c,0x39,0x2e,0x2a,0xae, + 0x36,0x6e,0x6c,0xbe,0xdf,0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0xb,0xe3,0x7b,0x17, + 0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2,0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12, + 0x2c,0x3a,0x96,0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a,0xa8,0x16,0x8c, + 0x25,0xf2,0x13,0x77,0x25,0x8e,0xa,0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36, + 0xd1,0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a,0x4d,0x7a,0x92,0xec,0x91, + 0xbc,0x35,0x79,0x24,0xc5,0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc,0x4c, + 0xd,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76,0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31, + 0x83,0x92,0x91,0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea,0x67,0xe6,0x66, + 0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe,0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x7,0xc9, + 0x6b,0xb3,0x90,0xac,0x5,0x59,0x2d,0xa,0xb6,0x42,0xa6,0xe8,0x54,0x5a,0x28,0xd7, + 0x2a,0x7,0xb2,0x67,0x65,0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e,0x2b, + 0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c,0xef,0x9f,0xff,0xed,0x12,0xc2,0x12, + 0xe1,0x92,0xb6,0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac,0x6a,0x39,0xb2, + 0x3c,0x71,0x79,0xdb,0xa,0xe3,0x15,0x5,0x2b,0x86,0x56,0x6,0xac,0x3c,0xb8,0x8a, + 0xb6,0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e,0xbd,0x26,0x7a,0x4d,0x6b, + 0x81,0x5e,0xc1,0xca,0x82,0xc1,0xb5,0x1,0x6b,0xeb,0xb,0x55,0xa,0xe5,0x85,0x7d, + 0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59,0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b, + 0x3e,0x15,0x89,0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28,0xdc,0x78,0xe5, + 0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc,0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66, + 0xd2,0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0xe,0x96,0xaa,0x97,0xe6,0x97,0xe,0x6e, + 0xd,0xd9,0xda,0xb4,0xd,0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97,0xcd, + 0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf,0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce, + 0xcd,0x3b,0x3f,0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2,0xdd,0xb5,0x61, + 0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b,0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7, + 0xfd,0x3e,0xc9,0xbe,0xdb,0x55,0x1,0x55,0x4d,0xd5,0x66,0xd5,0x65,0xfb,0x49,0xfb, + 0xb3,0xf7,0x3f,0xae,0x89,0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d,0x71, + 0xed,0xc7,0x3,0xd2,0x3,0xfd,0x7,0x23,0xe,0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2, + 0x3d,0x54,0x52,0x8f,0xd6,0x2b,0xeb,0x47,0xe,0xc7,0x1f,0xbe,0xfe,0x9d,0xef,0x77, + 0x2d,0xd,0x36,0xd,0x55,0x8d,0x9c,0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7, + 0x9,0xdf,0xf7,0x1e,0xd,0x3a,0xda,0x76,0x8c,0x7b,0xac,0xe1,0x7,0xd3,0x1f,0x76, + 0x1d,0x67,0x1d,0x2f,0x6a,0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b,0x62, + 0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde,0x7a,0xfc,0x47,0xdb,0x1f,0xf,0x9c, + 0x34,0x3c,0x59,0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3,0x93,0x67,0xf2, + 0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e,0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7, + 0x63,0xce,0xdf,0x6a,0xf,0x6f,0xef,0xba,0x10,0x74,0xe1,0xd2,0x45,0xff,0x8b,0xe7, + 0x3b,0xbc,0x3b,0xce,0x5c,0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8,0x57, + 0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c,0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c, + 0xbb,0x9a,0xae,0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66,0xf7,0xe9,0x1b, + 0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79,0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd, + 0xbd,0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd,0x7e,0x72,0x27,0xfd,0xce, + 0xcb,0xbb,0xd9,0x77,0x27,0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41,0xd9, + 0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8,0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0, + 0xf3,0xd1,0xdc,0x47,0xf7,0x6,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f,0xf,0x43,0x5, + 0x8f,0x99,0x8f,0xcb,0x86,0xd,0x86,0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72, + 0xfd,0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17,0xfe,0xa2,0xfe,0xcb,0xae, + 0x17,0x16,0x2f,0x7e,0xf8,0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2,0x97, + 0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb,0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e, + 0xbe,0xc9,0x78,0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc,0x77,0x1d,0xef, + 0xa3,0xdf,0xf,0x4f,0xe4,0x7c,0x20,0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0, + 0xa7,0xfb,0x93,0x19,0x93,0x93,0xff,0x4,0x3,0x98,0xf3,0xfc,0x63,0x33,0x2d,0xdb, + 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83, + 0x0,0x0,0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60, + 0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x24,0x40, + 0x49,0x44,0x41,0x54,0x78,0x1,0x0,0x30,0x24,0xcf,0xdb,0x1,0xff,0xff,0xff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf7,0xf7, + 0xf2,0x0,0xff,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x1, + 0x0,0x0,0xfe,0xfd,0x0,0x0,0xfd,0xfe,0xff,0x0,0x1,0x1,0xff,0x0,0x1,0x3, + 0x0,0x0,0x1,0xff,0x1,0x0,0xfc,0xfb,0xfc,0x0,0x0,0x1,0x0,0x0,0x5,0x5, + 0x5,0x0,0xff,0xff,0xfd,0x0,0x8,0x9,0xf,0x0,0xf7,0xf6,0xf2,0x0,0xfe,0xfe, + 0x0,0x0,0x1,0x1,0x1,0x0,0xa,0xb,0xd,0x0,0xf8,0xf8,0xf1,0xa,0x0,0x0, + 0x4,0xf6,0x0,0xff,0xfe,0x0,0x1,0xfc,0xfb,0x0,0xfd,0x0,0xff,0x0,0x1,0x0, + 0x1,0x0,0x1,0x1,0x2,0x0,0x2,0x1,0x0,0x0,0xff,0x0,0xff,0x0,0x1,0x1, + 0x2,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0x1,0x0,0x1,0x2,0x0,0x0,0x2,0xff, + 0x0,0x0,0xfe,0x3,0x2,0x0,0x0,0x3,0x1,0x0,0x0,0xff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x6,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0xff, + 0xfe,0x0,0x0,0xff,0x0,0xfe,0x0,0x4,0x5,0x2,0x0,0x7,0x7,0xe,0x0,0xf7, + 0xf7,0xf2,0x0,0x0,0x0,0x0,0x0,0x2,0x3,0x1,0x0,0x0,0x1,0xff,0x0,0x7, + 0x8,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xa,0xe,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf5,0xf5,0xf0,0x0,0xb,0xb,0x10,0xf6,0xf9, + 0xf9,0xf7,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0xff,0xff,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, + 0xf6,0xf6,0xf1,0x0,0xff,0x0,0x2,0x0,0xff,0x0,0xff,0x0,0x2,0x0,0xff,0x0, + 0x0,0xff,0x0,0x0,0x9,0xa,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0xf9,0xf3,0x0,0x7,0x7,0xd,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xfa,0x0,0x0,0x0,0x2,0x0,0x0,0x7,0x4,0x0,0x0,0xf9,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xfe,0xff,0xfb,0x0,0xfe,0xfc,0xfc,0x0, + 0x1,0xff,0xff,0x0,0xff,0xfc,0xfb,0x0,0xfe,0xfe,0x0,0x0,0x1,0x2,0x0,0x0, + 0x2,0xff,0x0,0x0,0xfe,0x3,0x2,0x0,0x0,0x3,0x1,0x0,0x0,0xff,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x6,0xc,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x4,0x0,0x1,0x0,0x0,0x0,0xff,0x0,0x0,0x2,0x0,0x0,0x0,0x9,0x9,0xe, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0xd,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x6,0xd5,0xd9,0xd3, + 0x0,0x37,0x2b,0x31,0xf9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xe1,0xdc,0xd5,0x9e,0x18,0x16,0x16,0xdc,0x6,0xa,0xc, + 0xdb,0x0,0x0,0x4,0xda,0xff,0x6,0x8,0xd4,0xfa,0xff,0x0,0xfe,0x2,0xfe,0xfc, + 0x0,0x1,0xfa,0xf9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xf7,0xf8,0xf2,0x0,0xff,0xff, + 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff, + 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff, + 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff, + 0xff,0x0,0xff,0xff,0xff,0x6,0xff,0xff,0xff,0x0,0xcc,0xae,0xa2,0x2f,0x3,0x3, + 0x3,0xff,0xdd,0x3f,0x20,0xff,0xe2,0x51,0x25,0xff,0xcd,0x38,0x16,0xff,0xc0,0x37, + 0x1c,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3, + 0x3,0xff,0xbf,0xa7,0x9a,0xff,0xe0,0xd2,0xc3,0xe2,0xff,0xf1,0xe3,0xae,0xff,0xff, + 0xfa,0x6b,0xff,0xff,0xff,0x1b,0xfb,0xff,0xfb,0x0,0xf8,0xfa,0xf2,0x0,0xf8,0xf9, + 0xf3,0x0,0xf9,0xfa,0xf4,0x0,0xf9,0xfa,0xf4,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0xfa,0x2,0x2, + 0x0,0x6,0xfe,0xe7,0xba,0xa3,0x26,0x1d,0x4a,0x61,0xb7,0x0,0x0,0x0,0x0,0xde, + 0x23,0xf,0x22,0x2,0xb,0x11,0x0,0xfd,0xb,0x6,0x0,0x8,0x3,0xff,0x0,0x5, + 0xfd,0xfd,0x0,0x2,0xfb,0xfb,0x0,0xf6,0xf8,0xfa,0x0,0xea,0xff,0xfc,0x0,0xe6, + 0xff,0xff,0x0,0x4e,0xd6,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0, + 0x85,0x77,0x0,0x24,0x3d,0x3b,0xf9,0x38,0x3a,0x4a,0x9d,0x0,0x0,0x0,0x6b,0xfe, + 0xfe,0xf8,0x0,0xfa,0xfa,0xfb,0x0,0x2,0x3,0x2,0x0,0x7,0x6,0xc,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xbe,0xa3,0x22, + 0xd6,0xa2,0xaa,0x5f,0x40,0xa4,0xb7,0x5c,0xce,0x16,0x9,0x22,0x1b,0x2d,0x19,0x0, + 0xff,0xe,0x6,0x0,0xfb,0xfa,0xff,0x0,0x0,0xf9,0xff,0x0,0xfa,0xf2,0xfe,0x0, + 0xfd,0xf9,0x1,0x0,0xfe,0xfe,0x0,0x0,0x1,0x0,0x0,0x0,0x5,0x2,0xfe,0x0, + 0x11,0xe,0xff,0x0,0xd,0x1a,0x9,0x0,0xe9,0xe6,0xf2,0x0,0xd0,0xce,0xea,0x0, + 0x4b,0xf5,0xf9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb3,0xc5,0xbf,0x89, + 0x30,0x2b,0x31,0x78,0x1,0xf2,0xee,0x0,0xfe,0xff,0x0,0x0,0x1b,0x1c,0x1f,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a, + 0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xf9,0xc8,0xa7,0x18,0xc4,0x96,0xa5,0x6b,0x47,0xa6,0xb8, + 0x5a,0x0,0x0,0x0,0x22,0xe6,0x3c,0x27,0x0,0x6,0x16,0x7,0x0,0xf6,0xfb,0xfc, + 0x0,0x3,0x2,0xfe,0x0,0x6,0xd,0x0,0x0,0xfa,0xf1,0x0,0x0,0xf9,0xef,0xfe, + 0x0,0x1,0x1,0x0,0x0,0x0,0xff,0x1,0x0,0xfd,0xf7,0xff,0x0,0xfc,0xf7,0xff, + 0x0,0xff,0xf6,0xfb,0x0,0x10,0x40,0x1c,0x0,0xb,0x34,0x1c,0x0,0x8,0xf5,0xf0, + 0x0,0x2,0xd8,0xef,0x0,0x0,0xca,0xe9,0x0,0xd2,0xe2,0xe4,0x0,0x32,0xf3,0xfc, + 0xd6,0xc0,0xab,0xa1,0x38,0x33,0x4c,0x55,0xf3,0xf4,0xee,0xed,0x0,0x16,0x18,0x1a, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f, + 0x7f,0x81,0x81,0x81,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd9, + 0xac,0x10,0xb4,0x97,0xb1,0x60,0x50,0x94,0xa7,0x6d,0x0,0x0,0x0,0x22,0x0,0x0, + 0x0,0x0,0xee,0x44,0x29,0x0,0xf1,0xfa,0x3,0x0,0xf6,0xe7,0xfd,0x0,0x1,0xfe, + 0xff,0x0,0xf9,0xfc,0xff,0x0,0xf3,0xf4,0xff,0x0,0xfe,0xfc,0x0,0x0,0x3,0x6, + 0x1,0x0,0x1,0x4,0x1,0x0,0xfe,0xfd,0xff,0x0,0xff,0xfc,0x0,0x0,0x2,0x2, + 0x1,0x0,0x0,0x7,0x5,0x0,0xf2,0xca,0xe7,0x0,0xfa,0xf5,0xfb,0x0,0x1b,0x2b, + 0xb,0x0,0x0,0x6,0xfb,0x0,0x4,0xd5,0xe0,0x0,0x0,0x0,0x0,0x0,0xaa,0x1e, + 0x15,0xbc,0x3c,0x51,0x5b,0xf3,0x0,0x0,0x0,0x0,0x7,0xe,0xd,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81, + 0x81,0x0,0x7f,0x7f,0x7f,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf6,0xe6,0xac,0x1,0xa,0x1a,0x54,0xff,0x0, + 0x0,0x0,0x0,0x0,0x0,0xb9,0xa,0x0,0x0,0x47,0xf6,0xc9,0x8d,0x67,0x54,0x3b, + 0x77,0x9d,0x89,0x0,0x0,0x0,0x22,0xd4,0x35,0x21,0x0,0x1d,0xfd,0xfd,0x0,0xed, + 0xfd,0x5,0x0,0xfa,0xfe,0x3,0x0,0x1,0x0,0xfe,0x0,0x0,0xfe,0x1,0x0,0x1, + 0xfe,0x1,0x0,0xfd,0xfd,0x1,0x0,0x0,0xfe,0xff,0x0,0x2,0x4,0x2,0x0,0x0, + 0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0x0,0x0,0x1,0x1,0x0,0xfc, + 0xf4,0xfc,0x0,0xff,0x5,0x0,0x0,0xe,0x1a,0x6,0x0,0x1a,0x3,0xfc,0x0,0xee, + 0xf5,0xfa,0x0,0x16,0xca,0xe0,0x0,0x1a,0x3,0xf,0x0,0xe6,0xfd,0xf1,0x0,0xfc, + 0xfc,0xfc,0x1,0x4,0x4,0x4,0x0,0xfc,0xf2,0xef,0x0,0x0,0x0,0x0,0x0,0x1, + 0xb,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81,0x81,0x0,0xff, + 0xff,0xff,0x0,0x80,0x80,0x80,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x1a,0x54,0xff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xcf,0x9f,0xc1,0x24,0xb1,0xb2,0x95,0xd1,0x84,0xb3,0xb6,0x0, + 0xc0,0x2e,0x17,0x0,0x3c,0x30,0x16,0x0,0x0,0xf,0xe,0x0,0xe7,0xf1,0x1,0x0, + 0x1,0xe7,0xf4,0x0,0x3,0xe8,0xf3,0x0,0xfe,0xfd,0x1,0x0,0x1,0x2,0x2,0x0, + 0x0,0x3,0xff,0x0,0x4,0x7,0x0,0x0,0x0,0x0,0x1,0x0,0xfd,0xf5,0xf9,0x0, + 0x0,0x1,0x3,0x0,0x2,0x7,0x4,0x0,0x1,0x1,0x0,0x0,0xfb,0xf1,0xfc,0x0, + 0x4,0x18,0xa,0x0,0x1f,0x18,0x2,0x0,0x4,0xf5,0xf9,0x0,0xb4,0xe5,0x0,0x0, + 0x50,0xd7,0xe0,0x0,0x13,0x19,0x1c,0x0,0x6d,0x34,0xe,0x0,0x79,0xb3,0xf1,0x0, + 0x4,0x4,0x4,0x0,0xf4,0xf4,0xf0,0x0,0xf8,0x0,0xfe,0x0,0x0,0x0,0x1,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81,0x81,0x0,0xff,0xff,0xff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xf5,0xe1,0xa1,0x5,0xb,0x1f,0x5f,0xfb,0x0,0x0,0x0,0x0,0x99,0x5f,0x49, + 0x16,0x9e,0xd2,0xe9,0x93,0xcd,0xd3,0xd2,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xc5,0xfe,0x13,0x0,0xdf,0xc7,0xf9,0x0,0x2b,0x19,0xf1,0x0,0x2a,0x2f,0x14, + 0x0,0x8,0x18,0x12,0x0,0xf6,0xe6,0x0,0x0,0xf1,0xeb,0xf9,0x0,0xfa,0xf2,0x0, + 0x0,0xff,0xfd,0xfe,0x0,0x0,0xff,0xfe,0x0,0xff,0xf9,0xfc,0x0,0x9,0x28,0x11, + 0x0,0xff,0xf5,0xf9,0x0,0xfb,0xed,0xf6,0x0,0xfc,0xf8,0x2,0x0,0xe,0x2a,0x5, + 0x0,0x18,0x1e,0x8,0x0,0xe6,0xd8,0xf8,0x0,0x1e,0xc1,0xd7,0x0,0x0,0x0,0x0, + 0x0,0x4b,0x34,0x2a,0x0,0x77,0x4c,0x1b,0x0,0xf9,0x8,0x2,0x0,0x0,0xb3,0xd6, + 0x0,0x0,0x0,0x0,0x0,0x3,0x4,0x3,0x0,0xfe,0xfe,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0xf4,0xe1, + 0xaa,0x5,0xc,0x1f,0x5f,0xfb,0x0,0x0,0x0,0x0,0xdb,0x6f,0x3e,0x2,0x90,0xa2, + 0xd3,0xec,0xdb,0x3,0xf3,0x56,0xbb,0x86,0x4c,0x0,0xe0,0xd2,0xde,0x0,0xd9,0xc9, + 0xec,0x0,0x7b,0xd4,0xd6,0x0,0x0,0x0,0x0,0x0,0x4f,0xf5,0x28,0x0,0xb1,0xc2, + 0xc0,0x0,0xab,0x2d,0x26,0x0,0x36,0x1c,0x7,0x0,0x16,0xa,0x1,0x0,0xfc,0xb, + 0xfd,0x0,0xf3,0xf6,0xff,0x0,0xfb,0xfc,0xfc,0x0,0x8,0x20,0x8,0x0,0x8,0x29, + 0x17,0x0,0xfc,0xed,0xf5,0x0,0xf2,0xcb,0xf5,0x0,0x19,0xf,0x4,0x0,0x8,0xd, + 0x7,0x0,0xbb,0xc3,0xee,0x0,0x49,0xd6,0xdc,0x0,0x15,0x17,0x21,0x0,0x6c,0x3c, + 0x14,0x0,0x50,0x3d,0x17,0x0,0x8f,0xb4,0xd7,0xf9,0xa0,0xbc,0xdd,0x7,0x0,0x0, + 0x0,0x0,0x3,0x3,0x3,0xf7,0x15,0x14,0x18,0xf9,0xf7,0xf7,0xf7,0xe3,0xff,0xff, + 0xff,0xc9,0x0,0x0,0x0,0x64,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x81,0x6,0x6, + 0x4,0x4e,0xb,0xb,0xc,0x22,0x12,0x12,0x12,0xf1,0x7c,0x7c,0x7c,0xe,0x84,0x84, + 0x84,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf6,0xe9,0xb7,0x4,0x2, + 0xf8,0xe9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdf,0xfa,0xfc,0x0,0xe8, + 0x0,0x6,0x2,0x0,0x0,0x0,0x0,0x38,0x53,0x67,0x0,0x41,0x5a,0xf6,0x0,0xe5, + 0xc4,0xbf,0x0,0x4f,0xd6,0xde,0x0,0xcf,0xcc,0xdd,0x0,0xd3,0xd8,0xea,0x0,0x3c, + 0x10,0x19,0x0,0x55,0xd3,0xda,0x0,0x0,0xd3,0x0,0x0,0x8a,0x1f,0x26,0x0,0x4a, + 0x12,0x0,0x0,0x23,0x12,0xfd,0x0,0x3,0x32,0x1c,0x0,0xff,0x1e,0x8,0x0,0xf1, + 0xc9,0xd8,0x0,0xfc,0xfe,0x4,0x0,0x1d,0x27,0xd,0x0,0xfb,0xe5,0xff,0x0,0x84, + 0xc1,0xf9,0x0,0x80,0xde,0xdc,0x0,0x4a,0x31,0x29,0x0,0x66,0x47,0x22,0x0,0x2a, + 0x23,0xa,0x0,0xf9,0xfc,0x5,0x0,0xa0,0xbc,0xdd,0x7,0x29,0x29,0x28,0xf0,0xfd, + 0xfd,0xfe,0x0,0xfb,0xfb,0xfb,0x0,0x3,0x3,0x2,0x3,0x20,0x20,0x1f,0x21,0xcb, + 0xcb,0xcc,0x1e,0xef,0xef,0xf0,0x5c,0x0,0x0,0x0,0x2,0x12,0x12,0x11,0xf7,0xfd, + 0xfd,0xfe,0x0,0xc,0xc,0xd,0xff,0xdc,0xdc,0xdd,0xf,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xff,0xfd,0xfb,0x6, + 0x1,0x0,0xfc,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x31,0x15,0x1, + 0x35,0x0,0xd7,0xa,0xbe,0x0,0x0,0x0,0xfb,0x23,0x49,0x0,0x6,0x0,0x0,0x0, + 0x5,0x43,0x29,0x0,0x2a,0x37,0xdf,0x0,0x2b,0x46,0xd9,0x0,0xf7,0xde,0xdb,0x0, + 0xdd,0xd2,0xdb,0x0,0xc8,0xc8,0x3,0x0,0xbf,0xdd,0xf9,0x0,0x76,0xe1,0xda,0x0, + 0xaa,0xf7,0x26,0x0,0x3d,0xec,0x2,0x0,0x56,0xf6,0xf6,0x0,0x2d,0x13,0xf6,0x0, + 0xc,0x10,0xb,0x0,0x6,0xf7,0xfc,0x0,0xda,0xd4,0x0,0x0,0x2a,0xc0,0xd4,0x0, + 0x0,0x0,0x0,0x0,0x70,0x4d,0x38,0x0,0x66,0x56,0x35,0x0,0x1e,0x19,0x10,0x0, + 0xd8,0xde,0xeb,0x0,0x34,0x69,0x98,0x0,0x0,0x0,0x0,0x0,0xd7,0xd7,0xd8,0x10, + 0xfc,0xfc,0xfb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0xfe,0xfa,0x0, + 0x74,0x75,0x79,0xfb,0xd5,0xd5,0xd4,0xf7,0xf7,0xf7,0xf8,0xff,0x17,0x17,0x17,0x3, + 0xaa,0xaa,0xaa,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff, + 0x0,0xf6,0xde,0x99,0x5,0xa,0x22,0x67,0xfb,0x0,0x0,0x0,0x0,0x0,0xb9,0x3f, + 0x1,0x99,0x7e,0xe0,0x4,0x6b,0xcd,0xe5,0xfa,0xfc,0xdf,0xbe,0x0,0x0,0x1d,0x3a, + 0x0,0xf4,0x0,0x4,0x0,0xe8,0xe8,0xea,0x0,0xfa,0xf2,0xe7,0x0,0xf,0x6,0xf4, + 0x0,0xa,0xf2,0xdc,0x0,0x1,0xe1,0xd4,0x0,0xf4,0xd8,0xdc,0x0,0xd0,0xcd,0xe1, + 0x0,0xb1,0xd4,0xed,0x0,0x9f,0xd8,0xe5,0x0,0x0,0x0,0x0,0x0,0x66,0xd,0x1f, + 0x0,0x5e,0x21,0xc,0x0,0xf8,0xe,0x3,0x0,0x44,0xc4,0xd2,0x0,0x1a,0x14,0x17, + 0x0,0x77,0x4c,0x27,0x0,0x58,0x62,0x4f,0x0,0x13,0x19,0x1f,0x0,0x4,0x25,0x54, + 0x0,0x0,0x0,0x0,0x0,0x36,0x71,0x1c,0x0,0xf9,0x8,0xf9,0x0,0xf6,0x2,0xe8, + 0x0,0xdb,0x85,0x3,0x0,0xfc,0xfc,0xf6,0x0,0x0,0x0,0x6,0x0,0xff,0xff,0xfa, + 0x0,0x1,0x1,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x1,0xf4,0xe7, + 0xb2,0x8,0x1,0xf4,0xe0,0xfd,0xa,0x24,0x6d,0xfb,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0x0,0x0,0x0,0x0,0xc2,0x53, + 0x47,0x0,0x3a,0x6a,0x58,0x0,0x0,0x3f,0x4e,0x0,0xfc,0x0,0xf,0x0,0xe1,0xe8, + 0xea,0x0,0xed,0xe5,0xe0,0x0,0x9,0x6,0xf7,0x0,0x18,0x5,0xee,0x0,0x9,0xf0, + 0xd9,0x0,0xfb,0xd7,0xd2,0x0,0xe7,0xd8,0xe6,0x0,0xbb,0xdb,0xf0,0x0,0x73,0xb2, + 0xd4,0x0,0x5a,0x25,0x29,0x0,0xa6,0xdb,0xd7,0x0,0x41,0x2f,0x26,0x0,0x7b,0x57, + 0x2e,0x0,0x3c,0x4e,0x4f,0x0,0x4,0x1e,0x2f,0x0,0x4,0xe,0x2e,0x0,0x0,0x0, + 0x0,0x0,0x33,0x72,0x14,0x0,0xf9,0xed,0xf,0x0,0x1e,0x3f,0xfb,0x0,0x5,0xe6, + 0xe5,0x0,0xb1,0x7c,0xfd,0x0,0xfc,0xfc,0xf5,0x0,0x0,0x0,0x7,0x0,0x0,0x0, + 0x0,0x0,0xff,0xff,0xfd,0x0,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x4,0xff, + 0xfa,0xf7,0xa,0x1,0xff,0x4,0x13,0x0,0x0,0x0,0xdb,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0xfc,0xfc,0x1,0xad,0x5e,0x24,0x15,0x3e, + 0xa6,0xb9,0xea,0x0,0xad,0xb9,0x0,0xaf,0x45,0x3e,0x0,0x45,0x60,0x56,0x0,0x23, + 0x4e,0x4c,0x0,0x21,0x18,0x36,0x0,0xeb,0xfd,0xff,0x0,0xe3,0xd9,0xdb,0x0,0xfd, + 0x5,0x17,0x0,0x15,0x37,0x30,0x0,0x1f,0x37,0xe9,0x0,0x68,0xea,0xd9,0x0,0x61, + 0x51,0x29,0x0,0x12,0x61,0xab,0x0,0x3c,0x32,0x22,0x0,0x8e,0x75,0x4b,0x0,0x2d, + 0x42,0x4a,0x0,0xfe,0x7,0x19,0x0,0xaa,0xa5,0xaf,0x0,0x0,0x0,0x0,0x0,0x2f, + 0x6d,0x15,0x0,0xff,0xef,0x12,0x0,0x1,0x14,0xfe,0x0,0xfe,0xf6,0x3,0x0,0xee, + 0xca,0xc,0x0,0x0,0x0,0xf1,0x0,0xff,0xff,0x4,0x0,0x1,0x1,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, + 0xf2,0xdf,0xa9,0x5,0x5,0xf0,0xd5,0x0,0x8,0x30,0x81,0xfb,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbd,0x30,0x6, + 0xe7,0xf,0x25,0x34,0x1d,0x38,0xaf,0xc5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xe7,0x89,0x7e,0x0,0x15,0x4a,0x3e,0x0,0x0,0x29,0x34,0x0, + 0xf1,0x0,0xc,0x0,0xea,0xe9,0xf1,0x0,0xf5,0xed,0xe7,0x0,0xa,0xff,0xea,0x0, + 0xf,0xfa,0xe0,0x0,0x1b,0x35,0x62,0x0,0x0,0x0,0x0,0x0,0xfc,0xf2,0xc9,0x0, + 0xfa,0xfb,0x10,0x0,0xa,0x13,0x27,0x0,0x0,0x0,0x0,0x0,0x2c,0x6b,0x17,0x0, + 0x6,0xf3,0x10,0x0,0x3,0x11,0xff,0x0,0xe3,0xf3,0x2,0x0,0x33,0xf7,0x3,0x0, + 0xb5,0xa7,0xd5,0x0,0x0,0x0,0x0,0x0,0x6e,0x5c,0x44,0x0,0x8e,0xa0,0xb8,0x0, + 0x0,0x0,0x0,0x0,0xff,0xfe,0xfc,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0, + 0x2,0x0,0xfc,0xf5,0x1,0x8,0x30,0x81,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb7,0xbf,0xf9, + 0x17,0x1d,0x38,0xaf,0xb7,0x1a,0x47,0x24,0x0,0x26,0x7d,0x27,0x0,0x20,0x7e,0x26, + 0x0,0x36,0x56,0x12,0x0,0x19,0x77,0x82,0x0,0x4,0x2d,0x44,0x0,0xc6,0x5b,0x60, + 0x0,0xf,0xc3,0xad,0x0,0x25,0x17,0x1,0x0,0x28,0x2a,0x28,0x0,0xf,0x23,0x38, + 0x0,0xcd,0xe6,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf4,0xf1,0x4, + 0x0,0xa,0x13,0x27,0x0,0x0,0x0,0x0,0x0,0x2e,0x65,0x19,0x0,0xb,0xff,0x10, + 0x0,0xc,0x21,0xfd,0x0,0xe7,0xe4,0x1,0x0,0x11,0xca,0x0,0x0,0xb5,0xa7,0xd5, + 0x0,0x0,0x0,0x0,0x0,0x47,0x10,0x10,0x0,0x92,0xa4,0xbc,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xfe,0xfe,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x2,0x3,0xfa,0xf4,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x26,0x1d, + 0x8,0xe7,0x5e,0x51,0x2e,0xe,0xe6,0xb9,0xdc,0x0,0xda,0x83,0xd9,0x0,0xe0,0x82, + 0xda,0x0,0xd,0x2d,0x11,0x0,0x4a,0x96,0x22,0x0,0x3d,0x6f,0x1c,0x0,0x3e,0xa9, + 0xb0,0x0,0x4,0x41,0x57,0x0,0xa6,0x46,0x51,0x0,0xfb,0xa5,0x91,0x0,0x17,0x8, + 0xf6,0x0,0x38,0x43,0x3f,0x0,0x0,0x0,0x0,0x0,0xfb,0xed,0xd8,0x0,0x10,0x1d, + 0x33,0x0,0x1d,0x34,0xe,0x0,0x29,0x5d,0x19,0x0,0x12,0x5,0xf,0x0,0xf,0x1c, + 0xfc,0x0,0xe0,0xd6,0x4,0x0,0xa,0xd4,0x0,0x0,0xd7,0xd4,0xd8,0x0,0x88,0x17, + 0x25,0x0,0x27,0x8,0xd,0x0,0xb9,0xf0,0xf0,0x0,0x0,0x0,0x0,0x0,0x4d,0x49, + 0x43,0xf2,0x0,0x0,0x0,0x0,0xfd,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff, + 0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff, + 0xb4,0x33,0x5,0xff,0xd5,0x67,0x1c,0x3,0x3,0x3,0xff,0xad,0x92,0x67,0xff,0x3, + 0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x25,0x52,0x20,0xff,0x3d, + 0x81,0x27,0xff,0x3f,0x7c,0x22,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x8d, + 0x39,0x35,0xff,0xf6,0x9e,0x93,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3, + 0x3,0x3,0xff,0x2c,0x6a,0x1c,0xff,0x43,0x72,0x2a,0xff,0x4d,0x86,0x27,0xff,0x1c, + 0x4b,0x2c,0xff,0x2b,0x2b,0x2b,0xff,0x3,0x3,0x3,0xff,0x71,0x21,0x2a,0xff,0x3b, + 0x18,0x1c,0xff,0x3,0x3,0x3,0xff,0xac,0xa2,0xa0,0xff,0x3,0x3,0x3,0xff,0x3, + 0x3,0x3,0xff,0xf8,0xf7,0xf6,0xff,0xfc,0xfc,0xfd,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, + 0x7f,0x7f,0xff,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0xf5,0xf0,0xeb,0x0, + 0x7,0xff,0xe6,0x0,0xd9,0xc8,0xb5,0x0,0xbb,0xb6,0xbe,0x0,0x70,0x93,0xbc,0x0, + 0x0,0x0,0x0,0x0,0x1e,0x4e,0x1a,0x0,0x16,0x25,0xa,0x0,0xfe,0x1,0x0,0x0, + 0xce,0x8c,0xdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1a,0x37,0x13,0x0, + 0x14,0x3c,0x8,0x0,0x1d,0xa,0xb,0x0,0x2,0x4,0xfe,0x0,0xc9,0xc4,0x7,0x0, + 0x12,0xe8,0xfd,0x0,0xd8,0xd3,0xd8,0x0,0x5e,0x21,0x28,0x0,0xd8,0xf1,0xf4,0x0, + 0xca,0xee,0xe4,0x0,0xc6,0xa7,0x7b,0x0,0xb7,0xc7,0xff,0x0,0xf0,0xef,0x5,0x0, + 0x93,0xa3,0x81,0x0,0xe4,0xdf,0xe1,0x0,0x17,0x1d,0x1b,0x0,0x1,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x80,0x80,0x80,0x0,0x4,0xf9,0xd0,0x7e,0x2,0x7,0x30,0x82,0xfe,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0x0,0x0,0x0,0x0,0x7,0xc,0x11, + 0x0,0xee,0xf1,0x6,0x0,0x8,0x29,0x5a,0x0,0x66,0x2f,0x4b,0x0,0x6a,0x6e,0xdc, + 0x0,0xc3,0xbb,0xb6,0x0,0x43,0x6a,0x9d,0x0,0xe2,0x0,0x0,0x0,0x12,0x2f,0x19, + 0x0,0x32,0x61,0x27,0x0,0x4,0x5,0xfd,0x0,0x2,0xf5,0xff,0x0,0x14,0x22,0x4, + 0x0,0x8,0x9,0x0,0x0,0xf2,0xf3,0xfc,0x0,0xcf,0xc3,0x8,0x0,0x12,0xed,0xfd, + 0x0,0xd8,0xd3,0xd8,0x0,0x6d,0x23,0x29,0x0,0xd9,0xf2,0xf7,0x0,0xca,0xee,0xe4, + 0x0,0xb3,0x90,0x5f,0x0,0x0,0x0,0xd,0x0,0xec,0xef,0xe6,0x0,0x5,0x2,0x20, + 0x0,0x0,0x0,0x0,0x0,0x1,0x5,0x5,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x35,0x35,0x35,0x0,0x2,0xfe,0x7,0x12,0x19,0xf9,0xcf,0x7f,0x5,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4, + 0x4,0xff,0x4,0x4,0x4,0xff,0x18,0x28,0x1a,0xec,0x0,0x0,0x0,0x0,0x93,0xa0, + 0x75,0x0,0xfb,0xe8,0xb3,0x0,0x16,0x1,0xe3,0x0,0xd0,0xde,0xf3,0x0,0xc2,0xe8, + 0x1c,0x0,0x2d,0x4f,0x7a,0x0,0xfc,0xe9,0xc1,0x0,0xd5,0xa8,0x6f,0x0,0xee,0xd1, + 0xe7,0x0,0xce,0x9f,0xd9,0x0,0xea,0xd9,0x0,0x0,0x17,0x28,0xf,0x0,0x3d,0x32, + 0x19,0x0,0xa,0x7,0x3,0x0,0xcb,0xce,0x4,0x0,0x11,0xf0,0xfd,0x0,0xd9,0xd3, + 0xd8,0x0,0x79,0x22,0x29,0x0,0xfe,0xf7,0xfb,0x0,0xba,0xeb,0xe0,0x0,0x0,0x0, + 0x0,0x0,0x12,0x13,0x1f,0x0,0xc1,0xcf,0xe8,0x0,0x7,0x5,0x26,0x0,0x2d,0x2e, + 0x2c,0x0,0x0,0x0,0x0,0x0,0xfd,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x5a,0x5a,0x5a,0xf5,0x0,0x0,0x0,0x0,0x56,0x56, + 0x56,0xf4,0x63,0x63,0x62,0xf2,0x1,0xf4,0xdc,0x9d,0x1e,0x0,0xfb,0xf5,0xe7,0x1, + 0xfb,0xf5,0xff,0xa,0x12,0x4,0xff,0x0,0xf,0xfd,0x16,0xc1,0x93,0xb7,0x7,0x43, + 0x7d,0xc4,0xdf,0x9b,0x41,0x25,0x0,0x1d,0x1a,0x5,0x0,0x48,0xa5,0xd6,0x0,0x0, + 0x0,0x0,0x0,0x22,0x3c,0x1d,0x0,0xde,0xc4,0xe3,0x0,0xdf,0xce,0x97,0x0,0xc, + 0x4,0x15,0x0,0xdb,0xec,0x8,0x0,0xf7,0x9,0x1a,0x0,0x27,0x1e,0x13,0x0,0x18, + 0x2,0xdd,0x0,0xb3,0xa3,0x9b,0x0,0x6f,0x91,0xc0,0x0,0xe2,0xe5,0xe7,0x0,0x50, + 0x76,0x2b,0x0,0xd7,0xf4,0xfb,0x0,0x8,0xd6,0x2,0x0,0xd1,0xc0,0xd8,0x0,0x88, + 0x2d,0x28,0x0,0x7,0xf9,0xfd,0x0,0x71,0xda,0xdb,0x0,0x0,0x0,0x0,0x0,0xc4, + 0xa3,0x84,0x0,0xd1,0xdd,0xea,0x0,0xc4,0xc8,0xfb,0x0,0xa4,0xb5,0x94,0x0,0x0, + 0x0,0x0,0x0,0xfd,0xfd,0xfd,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x40,0x40,0x40,0xf1,0xd9,0xd9,0xd8,0x1,0xc,0xc,0xc,0xff,0xef, + 0xef,0xef,0x1,0xf3,0xf3,0xf3,0xea,0x4,0x1,0xa,0x18,0xe8,0xa,0x19,0x4a,0xfb, + 0x0,0x0,0x0,0x0,0x0,0xf1,0xad,0xe,0xb1,0x96,0xa8,0xe6,0x53,0x7d,0xc4,0x0, + 0x0,0x0,0x0,0x0,0xd3,0xec,0xfb,0x0,0xda,0xf4,0x0,0x0,0x84,0x34,0x27,0x0, + 0xf5,0xfa,0x0,0x0,0xd5,0xe0,0xf5,0x0,0xf7,0x13,0xd,0x0,0x21,0x32,0x69,0x0, + 0x82,0x85,0x57,0x0,0x57,0x40,0x38,0x0,0x21,0x17,0x0,0x0,0xe8,0xf0,0xfa,0x0, + 0xe1,0x3,0x11,0x0,0x23,0x32,0x51,0x0,0x42,0x3b,0xdd,0x0,0xc1,0xc7,0x4,0x0, + 0xb0,0x8a,0xd5,0x0,0x27,0x3f,0x28,0x0,0xd1,0xc1,0xd8,0x0,0x8b,0x31,0x27,0x0, + 0x23,0xa,0xfe,0x0,0xa1,0xe7,0xf8,0x0,0x0,0x0,0x0,0x0,0xc0,0xa4,0x89,0x0, + 0xe3,0xed,0xf4,0x0,0xb9,0xba,0xdf,0x0,0xb2,0xc6,0xb3,0x0,0xfd,0xfc,0xfc,0x0, + 0x2,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x7c,0x7c,0x7c,0xff,0xd0,0xd0,0xce,0x0,0xf2,0xf2,0xf3,0xb,0xed,0xed,0xec,0xe5, + 0xff,0xff,0x0,0xb0,0xfc,0xfc,0xfd,0x6f,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff, + 0x0,0xff,0xff,0xff,0x0,0x96,0x70,0x53,0x70,0x3,0x3,0x3,0xff,0x75,0x4d,0x34, + 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3, + 0xff,0x3,0x3,0x3,0xff,0x65,0x22,0x25,0xff,0x57,0x21,0x27,0xff,0x2d,0x1a,0x21, + 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x7e,0x81,0x56,0xff,0xd4,0xc7,0x8b, + 0xff,0xff,0xef,0xbb,0xff,0xff,0xed,0xbf,0xff,0x6f,0x71,0x40,0xff,0x3,0x3,0x3, + 0xff,0x21,0x29,0x28,0xff,0x3,0x3,0x3,0xff,0xa0,0x41,0x2c,0xff,0xbc,0x4d,0x29, + 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0xb7,0x9c,0x82,0xff,0xb8,0xa6,0x94, + 0xff,0x5a,0x44,0x4c,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0x1e,0x1e,0x1c,0xf0,0x1,0x1,0x1,0xfc,0x0,0x0,0x0,0x8,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xae,0xb9,0xd5,0x47,0x0,0x0,0x0,0x0,0x31,0x39, + 0x37,0x0,0xfc,0xaa,0x96,0x0,0xe6,0xca,0xc5,0x0,0xee,0xe3,0xdf,0x0,0xf0,0xe8, + 0xe8,0x0,0xdf,0xe2,0xeb,0x0,0x61,0x95,0xc2,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x49,0x1d,0x1b,0x0,0xdf,0xf7,0xfe,0x0,0x82,0x85,0xb9,0x0,0x85,0x82, + 0xad,0x0,0x57,0x71,0x42,0x0,0x35,0x25,0x23,0x0,0xd9,0xe3,0xf4,0x0,0x0,0x0, + 0x0,0x0,0xe2,0xda,0xdb,0x0,0xc0,0x4a,0x29,0x0,0x10,0x18,0x0,0x0,0x30,0x9e, + 0xda,0x0,0x0,0x0,0x0,0x0,0xaf,0x92,0x70,0x0,0xc,0x16,0x22,0x0,0xad,0xa9, + 0xb9,0x0,0x4a,0x54,0x5a,0x0,0xa6,0xbc,0xb4,0x0,0xff,0xff,0xff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0x55, + 0x55,0xf4,0xf3,0xf3,0xf3,0x0,0x2,0x2,0x2,0x8a,0xfd,0xfd,0xfd,0xf8,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0, + 0x0,0x0,0x0,0xef,0xdf,0xbf,0x2,0x77,0x3b,0x4d,0xc5,0x9b,0xe7,0xf5,0x38,0xc1, + 0xc5,0xbd,0x0,0x2d,0x32,0x40,0x0,0xe6,0xdf,0xd7,0x0,0xf7,0xf1,0xe6,0x0,0xff, + 0xf8,0xec,0x0,0x0,0xf8,0xec,0x0,0xf9,0xed,0xe3,0x0,0xf7,0xe9,0xe6,0x0,0x49, + 0x76,0xa8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x53,0x17,0x20,0x0,0x3a,0x1c,0x4,0x0,0x73,0xcd,0xdc,0x0,0x0, + 0x0,0x0,0x0,0xb3,0x97,0x6f,0x0,0x13,0x1e,0x35,0x0,0xca,0xc5,0xcb,0x0,0xc9, + 0xcc,0xf2,0x0,0xa4,0xb7,0x9c,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72,0x72,0x72,0xfb,0x9c, + 0x9c,0x9a,0xf5,0xff,0xff,0xfe,0xdd,0xf4,0xf4,0xf7,0x34,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xdd,0xfd,0xfd,0xfd,0x22, + 0x0,0x0,0x0,0x0,0xed,0xe1,0xc8,0x0,0x9,0xd,0x18,0x0,0x3,0x8,0xf,0x0, + 0xe9,0xf0,0xf6,0x0,0xf1,0xf1,0xf3,0x0,0xf7,0xf5,0xef,0x0,0xf4,0xee,0xe5,0x0, + 0xfd,0xf5,0xe6,0x0,0x2,0xf8,0xec,0x0,0xf9,0xee,0xe6,0x0,0xfe,0xf2,0xef,0x0, + 0x1,0xf5,0xf2,0x0,0xfc,0xef,0xf2,0x0,0x52,0x98,0xcc,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xa9,0x86,0x5e,0x0,0x1f,0x33,0x44,0x0,0xea,0xe7,0xed,0x0,0xad,0xae,0xd8,0x0, + 0xa1,0xb2,0x99,0x0,0xfc,0xfc,0xfc,0x0,0x0,0xff,0xfd,0x0,0x0,0x0,0x1,0x0, + 0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x76,0x76,0x76,0xfc,0x96,0x96,0x95,0xf4, + 0xfa,0xfa,0xfa,0x2,0xfb,0xfb,0xfc,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4, + 0xdd,0x0,0x0,0x0,0x0,0xfd,0xfd,0xfd,0x22,0x0,0x0,0x0,0x0,0xb8,0xa9,0x95, + 0x0,0x17,0x16,0x14,0x0,0x15,0x19,0x1b,0x0,0x1a,0x1e,0x23,0x0,0x1,0x9,0x12, + 0x0,0xf6,0xfa,0xfb,0x0,0xe9,0xe9,0xeb,0x0,0xe5,0xe3,0xde,0x0,0xef,0xe8,0xe0, + 0x0,0x6,0xfe,0xf3,0x0,0x5,0xfd,0xf3,0x0,0x6,0xf9,0xed,0x0,0x7,0xfb,0xf3, + 0x0,0x4,0xfe,0xfa,0x0,0xb,0x6,0x3,0x0,0xa3,0xb9,0xd3,0x0,0x0,0x7,0xc, + 0x0,0x4a,0x50,0x51,0x0,0x6,0xc,0xb,0x0,0xa7,0xa8,0xdb,0x0,0x90,0x9f,0x8d, + 0x0,0xfc,0xf5,0xbf,0x0,0x36,0x3d,0x72,0xf0,0xca,0xc9,0xc9,0x10,0x0,0x1,0x2, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x7c,0x7c,0x7c,0xff,0x8c,0x8c,0x8a,0xf1,0xfc,0xfc,0xfd, + 0x8,0xfd,0xfd,0xfe,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff, + 0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, + 0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0xdd,0xfd,0xfd, + 0xfd,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x3c,0x36,0xad,0x7b,0x72, + 0x65,0x53,0xe,0x10,0x14,0x0,0x10,0x13,0x16,0x0,0x1c,0x1f,0x20,0x0,0xa,0xf, + 0x10,0x0,0x0,0x0,0x0,0x0,0xef,0xef,0xf0,0x0,0xe4,0xdd,0xd6,0x0,0xf6,0xed, + 0xe4,0x0,0x5,0x1,0xf8,0x0,0x0,0xf0,0xe4,0x0,0xa2,0xa9,0xb6,0x0,0x1e,0x22, + 0x21,0x0,0x57,0x58,0x49,0x0,0xa8,0xb4,0xe0,0x0,0x77,0x83,0x88,0x0,0xfc,0xfa, + 0xc6,0x0,0x3b,0x3d,0x6f,0xf0,0xd9,0xd9,0xd6,0x1,0x41,0x41,0x46,0x3,0xab,0xab, + 0xab,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x60,0x60,0x5f,0xf6,0xa9,0xa9,0xa9,0xfa,0xfa,0xfa,0xfb,0xa,0xfe,0xfe, + 0xfe,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff, + 0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x6,0xd2,0xf8,0xf8,0xfa,0x2d,0x0, + 0x0,0x0,0x0,0x3,0x3,0x3,0x0,0xfd,0xfd,0xfd,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0xc1,0xbb,0xac,0x0,0x9,0xb,0xf,0x0,0x13,0x11,0xe,0x0,0x15, + 0x18,0x1c,0x0,0x9,0x9,0x8,0x0,0x4,0xf8,0xe8,0x0,0x9e,0x9b,0x9f,0x0,0x3, + 0x0,0xf2,0x0,0x17,0x1d,0x22,0x0,0x4c,0x5b,0x7b,0x0,0xfc,0xfb,0xce,0x0,0x0, + 0x1,0x2e,0x0,0x0,0x0,0xff,0x0,0x26,0x26,0x26,0xf1,0xfb,0xfb,0xfc,0x0,0xdf, + 0xdf,0xdf,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x26, + 0x26,0x25,0xf0,0xdb,0xdb,0xdd,0x8,0x2,0x2,0x0,0x1,0xfe,0xfe,0xff,0x8,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0, + 0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x7,0x7,0x5,0xbf, + 0x1,0x1,0x1,0xfa,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xfe,0x61,0x61,0x61,0xf5, + 0xff,0xff,0xfd,0xff,0xff,0xff,0xfc,0xff,0x4b,0x4b,0x47,0xf1,0x18,0x18,0x16,0xef, + 0x3,0x3,0x3,0xff,0x7,0x7,0x6,0xfd,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff, + 0x3,0x3,0x3,0xfe,0x0,0x0,0x0,0xff,0xc6,0xbf,0xb2,0xff,0xbb,0xb5,0xa5,0xff, + 0x78,0x74,0x64,0xff,0x3,0x3,0x3,0xff,0xff,0xfd,0xd5,0xff,0xfb,0xee,0xba,0xff, + 0xff,0xfe,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x79,0x79,0x79,0xfd, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0x12,0x11,0xf1, + 0x7,0x7,0x5,0xef,0x6,0x6,0x4,0xe0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff, + 0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x4,0x4,0x3,0xf0,0x1e,0x1e,0x1d, + 0xef,0x35,0x35,0x34,0xef,0x2c,0x2c,0x2b,0xef,0x1,0x1,0x1,0xfc,0x1b,0x1b,0x1b, + 0xf1,0x2f,0x2f,0x2e,0xef,0xf,0xf,0xe,0xf4,0x4,0x4,0x4,0xf4,0x46,0x46,0x45, + 0xf1,0xff,0xff,0xff,0xff,0x3b,0x3b,0x3b,0xf0,0x8,0x8,0x6,0xd5,0x2,0x2,0x2, + 0xf4,0x6,0x6,0x5,0xd9,0x3,0x3,0x3,0xee,0x0,0x0,0x0,0xff,0x0,0x0,0x0, + 0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x17,0x17,0x16,0xf1,0x50,0x4f,0x4c, + 0xf2,0xff,0xfe,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0x30,0x30,0x2f,0xef,0xd,0xd,0xb,0xef,0x12,0x12,0x11, + 0xf1,0x0,0x0,0x0,0x48,0xf6,0xf5,0xf1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd,0xa,0xc3,0x5,0x5,0x4,0x3,0x1f,0x1f, + 0x1f,0xfd,0xc2,0xc2,0xc3,0xf,0x2b,0x2b,0x2a,0xf0,0x1,0x1,0x1,0xf5,0xe6,0xe6, + 0xe6,0x7,0xea,0xea,0xe9,0xfb,0x1,0x1,0x1,0x0,0xfc,0xfc,0xfc,0x9,0xf6,0xf6, + 0xf6,0xf3,0x3a,0x3a,0x39,0xf0,0xe5,0xe5,0xe5,0x1,0xfd,0xfd,0xfe,0x1e,0x4,0x4, + 0x2,0xef,0x0,0x0,0xff,0xef,0xfe,0xfe,0xfe,0x1e,0x3,0x3,0x2,0xf7,0xb,0xb, + 0xb,0xfa,0xb,0xb,0xa,0x1,0xd,0xd,0xe,0xfe,0x17,0x16,0x15,0x1,0xa,0xb, + 0xe,0x3,0x0,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x60, + 0x5f,0xf6,0xb3,0xb3,0xb3,0xfc,0xf9,0xf9,0xf8,0x0,0xfb,0xfb,0xfb,0xeb,0xf3,0xf3, + 0xf5,0x54,0xf5,0xf4,0xf1,0xd2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1,0x1,0x1,0x16,0x1,0x1,0x1,0xe5,0x6,0x6,0x4,0xf5,0x23, + 0x23,0x24,0xff,0xf4,0xf4,0xf4,0x0,0xf9,0xf9,0xf8,0x4,0xe9,0xe9,0xeb,0x6c,0x0, + 0x0,0x0,0x21,0x7f,0x7f,0x7f,0x7f,0xdb,0xdb,0xdb,0xf5,0xc9,0xc9,0xc9,0xfc,0xf8, + 0xf8,0xf7,0x0,0xfb,0xfb,0xfc,0x1,0xf7,0xf7,0xf6,0xff,0xa,0xa,0xa,0x1,0xfb, + 0xfb,0xfb,0x0,0xff,0xff,0xff,0x0,0x6,0x6,0x7,0x0,0x12,0x12,0x11,0xfe,0x47, + 0x47,0x48,0xb,0x8f,0x8f,0x8f,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c,0x7c,0x7c,0xff,0x9a,0x9a,0x99,0xf3,0xf3, + 0xf3,0xf3,0xfe,0xf8,0xf8,0xf9,0x10,0x0,0x0,0x0,0x3a,0xff,0xff,0xff,0xc7,0xf7, + 0xf8,0xef,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0xff,0x0,0x9,0x9,0x12,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0, + 0x9,0x9,0x7,0xb3,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xff,0x9,0x9,0x6,0xd1, + 0x0,0x0,0x0,0x41,0x8,0x8,0x6,0xd0,0x7,0x7,0x5,0xef,0x8,0x8,0x6,0xef, + 0x4,0x4,0x3,0xe9,0x4d,0x4d,0x4d,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x54,0x54,0x54,0xf3,0x15,0x15,0x15,0xf1,0xd,0xd,0xb,0xef,0x4,0x4,0x3,0xf2, + 0x7,0x7,0x6,0xb1,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0xf7,0xf6,0xf1,0x2, + 0xf7,0xf6,0xf0,0x0,0xf6,0xf6,0xf1,0x0,0xf6,0xf6,0xf1,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1, + 0x47,0x1e,0x1e,0x1c,0xa8,0xe,0xe,0xf,0x0,0xf5,0xf5,0xf5,0x0,0xfe,0xfe,0xfd, + 0x0,0xe8,0xe8,0xe8,0xde,0xf9,0xf9,0xfb,0x74,0x0,0x0,0x0,0xfe,0x7,0x7,0x5, + 0x95,0xfa,0xfa,0xfc,0x26,0x14,0x14,0x13,0xf7,0x3,0x3,0x3,0x0,0x2,0x2,0x3, + 0xff,0x8,0x8,0x8,0x0,0x10,0x10,0x10,0xff,0x28,0x28,0x28,0x5,0xa5,0xa5,0xa5, + 0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x58,0x58,0x58,0xf4,0xcb,0xcb,0xca,0xfd,0xef,0xef,0xef, + 0x1,0xfb,0xfb,0xfb,0xff,0xf6,0xf6,0xf6,0xa,0x7,0x7,0x5,0xc6,0xf7,0xf7,0xfa, + 0x65,0xf0,0xef,0xed,0xdb,0x3,0x3,0x2,0x0,0x5,0x7,0x3,0x0,0xfc,0xfa,0xff, + 0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xe,0xf, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x4,0xf7,0xf6,0xf3,0x0,0x0,0x2,0x3,0x0,0x3,0x3, + 0x3,0x4,0xfd,0xfd,0xfe,0x1,0xd3,0xd3,0xd4,0xf,0x0,0x0,0x0,0x0,0x48,0x48, + 0x48,0xf2,0x0,0x0,0x1,0x22,0xa,0xa,0xa,0xae,0xde,0xde,0xdd,0xdf,0xf9,0xf9, + 0xfb,0x6e,0x1b,0x1b,0x1b,0xc7,0xe5,0xe5,0xe5,0x23,0x6,0x6,0x4,0x77,0x0,0x0, + 0x1,0x2d,0xfe,0xfe,0xfe,0x1a,0xe0,0xe0,0xdf,0xd,0xe6,0xe6,0xe5,0xfa,0x21,0x21, + 0x20,0xf1,0xf5,0xf5,0xf6,0x1,0xfa,0xfa,0xfa,0x0,0x3,0x3,0x3,0x0,0x5,0x5, + 0x5,0x0,0xfe,0xfe,0xfd,0x0,0xfd,0xfd,0xfd,0x0,0xef,0xef,0xf0,0xa,0x1,0x1, + 0x1,0xf5,0x3,0x3,0x1,0xa7,0xfe,0xfe,0xff,0x77,0xee,0xf0,0xeb,0xf3,0xff,0xfe, + 0x0,0x0,0xfa,0xf8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x1,0x1, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x1,0x0,0x4,0xff,0xfe,0xfe,0xfc,0xfd, + 0xfd,0xfd,0xf3,0xa,0xa,0xa,0xff,0x1a,0x1a,0x19,0xf0,0x20,0x20,0x20,0x1,0xc6, + 0xc6,0xc7,0xf,0x0,0x0,0x0,0x0,0x48,0x48,0x48,0xf2,0xd9,0xd9,0xd9,0x27,0x8, + 0x8,0x6,0xad,0xe6,0xe6,0xe6,0xd,0x6,0x6,0x5,0xcd,0xfa,0xfa,0xfb,0x41,0x0, + 0x0,0x0,0xf7,0xf7,0xf7,0xf2,0xff,0x1,0x1,0x0,0x0,0xe,0xe,0x13,0xbb,0xfb, + 0xfb,0xfc,0x41,0x6,0x6,0x5,0xfb,0x3,0x3,0x1,0xf9,0xf2,0xf2,0xfa,0xb,0x4, + 0x4,0x3,0xdf,0x1,0x1,0x1,0xdf,0xfc,0xfc,0xfd,0xd1,0xff,0xff,0xff,0x81,0xf4, + 0xf4,0xee,0xf5,0x0,0xff,0x3,0x0,0x1,0x2,0x1,0x0,0x0,0xff,0xfe,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xf8,0xf9,0xf4,0x0,0xfd,0xfc,0xff,0x0, + 0x1,0x1,0xfd,0x0,0xe,0xe,0x14,0x3f,0x3,0x3,0x2,0xa5,0xfe,0xfe,0xfe,0x12, + 0x1b,0x1b,0x1b,0xf9,0x3,0x3,0x4,0x0,0x8,0x8,0x8,0x0,0xd8,0xd8,0xd7,0xfb, + 0x2,0x2,0x2,0x6,0xfd,0xfd,0xfe,0x0,0xff,0xff,0xff,0xa,0x2,0x2,0x2,0x1, + 0x6,0x6,0x5,0x4,0xff,0xff,0x0,0xf8,0xf9,0xf9,0xf8,0x4,0x0,0x0,0x1,0xfd, + 0x3,0x3,0x2,0xed,0x2,0x2,0x2,0xbf,0xfa,0xfa,0xfb,0xa8,0xf7,0xf8,0xf3,0xb4, + 0x8,0x7,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0xfb,0xf1,0x0, + 0x0,0x1,0x1,0x0,0xfe,0xfa,0x2,0x0,0xff,0x0,0x0,0x0,0x2,0x3,0xfe,0x0, + 0xff,0xff,0x0,0x0,0xfa,0xf8,0xfc,0x0,0x3,0x3,0x2,0x0,0x5,0x6,0x3,0x0, + 0xfd,0xfc,0xff,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xc,0xd,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x18,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x3,0x0,0x0,0x0, + 0xbd,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdb,0x0,0x0,0x0, + 0xfe,0x0,0x0,0x0,0xf7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xff,0xff, + 0xab,0xb7,0x8a,0xde,0xc5,0x86,0xe7,0x5f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44, + 0xae,0x42,0x60,0x82, + +}; + +static const unsigned char qt_resource_name[] = { + // Icons + 0x0,0x5, + 0x0,0x4f,0xa6,0x53, + 0x0,0x49, + 0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x73, + // apunts.png + 0x0,0xa, + 0x5,0xbb,0x58,0xc7, + 0x0,0x61, + 0x0,0x70,0x0,0x75,0x0,0x6e,0x0,0x74,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, + +}; + +static const unsigned char qt_resource_struct[] = { + // : + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, + // :/Icons + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2, + // :/Icons/apunts.png + 0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, + +}; + +QT_BEGIN_NAMESPACE + +extern Q_CORE_EXPORT bool qRegisterResourceData + (int, const unsigned char *, const unsigned char *, const unsigned char *); + +extern Q_CORE_EXPORT bool qUnregisterResourceData + (int, const unsigned char *, const unsigned char *, const unsigned char *); + +QT_END_NAMESPACE + + +int QT_MANGLE_NAMESPACE(qInitResources_apunts)() +{ + QT_PREPEND_NAMESPACE(qRegisterResourceData) + (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_apunts)) + +int QT_MANGLE_NAMESPACE(qCleanupResources_apunts)() +{ + QT_PREPEND_NAMESPACE(qUnregisterResourceData) + (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_apunts)) + diff --git b/qrc_apunts.o a/qrc_apunts.o new file mode 100644 index 0000000..8576792 --- /dev/null +++ a/qrc_apunts.o diff --git b/ui_adddialog.h a/ui_adddialog.h new file mode 100644 index 0000000..9f2adfd --- /dev/null +++ a/ui_adddialog.h @@ -0,0 +1,170 @@ +/******************************************************************************** +** Form generated from reading UI file 'adddialog.ui' +** +** Created: Mon Nov 4 07:59:39 2013 +** by: Qt User Interface Compiler version 4.8.4 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_ADDDIALOG_H +#define UI_ADDDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_AddDialog +{ +public: + QGridLayout *gridLayout; + QSpacerItem *horizontalSpacer; + QVBoxLayout *verticalLayout; + QLabel *nameLabel; + QLineEdit *nameLineEdit; + QLabel *phoneLabel; + QLineEdit *phoneLineEdit; + QLabel *commentLabel; + CustomTextEdit *commentTextEdit; + QLabel *assignaturesLabel; + QTableView *assignaturesTableView; + QSpacerItem *horizontalSpacer_2; + QSpacerItem *verticalSpacer_2; + QDialogButtonBox *buttonBox; + QSpacerItem *verticalSpacer; + + void setupUi(QDialog *AddDialog) + { + if (AddDialog->objectName().isEmpty()) + AddDialog->setObjectName(QString::fromUtf8("AddDialog")); + AddDialog->resize(280, 500); + gridLayout = new QGridLayout(AddDialog); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + horizontalSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1); + + verticalLayout = new QVBoxLayout(); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + nameLabel = new QLabel(AddDialog); + nameLabel->setObjectName(QString::fromUtf8("nameLabel")); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(nameLabel->sizePolicy().hasHeightForWidth()); + nameLabel->setSizePolicy(sizePolicy); + + verticalLayout->addWidget(nameLabel); + + nameLineEdit = new QLineEdit(AddDialog); + nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit")); + + verticalLayout->addWidget(nameLineEdit); + + phoneLabel = new QLabel(AddDialog); + phoneLabel->setObjectName(QString::fromUtf8("phoneLabel")); + sizePolicy.setHeightForWidth(phoneLabel->sizePolicy().hasHeightForWidth()); + phoneLabel->setSizePolicy(sizePolicy); + + verticalLayout->addWidget(phoneLabel); + + phoneLineEdit = new QLineEdit(AddDialog); + phoneLineEdit->setObjectName(QString::fromUtf8("phoneLineEdit")); + + verticalLayout->addWidget(phoneLineEdit); + + commentLabel = new QLabel(AddDialog); + commentLabel->setObjectName(QString::fromUtf8("commentLabel")); + + verticalLayout->addWidget(commentLabel); + + commentTextEdit = new CustomTextEdit(AddDialog); + commentTextEdit->setObjectName(QString::fromUtf8("commentTextEdit")); + QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Maximum); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(commentTextEdit->sizePolicy().hasHeightForWidth()); + commentTextEdit->setSizePolicy(sizePolicy1); + commentTextEdit->setMaximumSize(QSize(16777215, 100)); + + verticalLayout->addWidget(commentTextEdit); + + assignaturesLabel = new QLabel(AddDialog); + assignaturesLabel->setObjectName(QString::fromUtf8("assignaturesLabel")); + sizePolicy.setHeightForWidth(assignaturesLabel->sizePolicy().hasHeightForWidth()); + assignaturesLabel->setSizePolicy(sizePolicy); + + verticalLayout->addWidget(assignaturesLabel); + + assignaturesTableView = new QTableView(AddDialog); + assignaturesTableView->setObjectName(QString::fromUtf8("assignaturesTableView")); + assignaturesTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + assignaturesTableView->setAlternatingRowColors(true); + assignaturesTableView->setSelectionMode(QAbstractItemView::MultiSelection); + assignaturesTableView->setSelectionBehavior(QAbstractItemView::SelectRows); + assignaturesTableView->setSortingEnabled(true); + assignaturesTableView->setCornerButtonEnabled(false); + assignaturesTableView->horizontalHeader()->setStretchLastSection(true); + assignaturesTableView->verticalHeader()->setVisible(false); + + verticalLayout->addWidget(assignaturesTableView); + + + gridLayout->addLayout(verticalLayout, 1, 1, 1, 1); + + horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(horizontalSpacer_2, 1, 2, 1, 1); + + verticalSpacer_2 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(verticalSpacer_2, 2, 1, 1, 1); + + buttonBox = new QDialogButtonBox(AddDialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + + gridLayout->addWidget(buttonBox, 3, 1, 1, 1); + + verticalSpacer = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(verticalSpacer, 0, 1, 1, 1); + + + retranslateUi(AddDialog); + + QMetaObject::connectSlotsByName(AddDialog); + } // setupUi + + void retranslateUi(QDialog *AddDialog) + { + AddDialog->setWindowTitle(QApplication::translate("AddDialog", "Afegir pr\303\251stec...", 0, QApplication::UnicodeUTF8)); + nameLabel->setText(QApplication::translate("AddDialog", "Nom i cognoms", 0, QApplication::UnicodeUTF8)); + phoneLabel->setText(QApplication::translate("AddDialog", "Tel\303\250fon", 0, QApplication::UnicodeUTF8)); + commentLabel->setText(QApplication::translate("AddDialog", "Comentari (M\303\240x 140 car\303\240cters)", 0, QApplication::UnicodeUTF8)); + assignaturesLabel->setText(QApplication::translate("AddDialog", "Assignatures", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class AddDialog: public Ui_AddDialog {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_ADDDIALOG_H diff --git b/ui_editdialog.h a/ui_editdialog.h new file mode 100644 index 0000000..08ee232 --- /dev/null +++ a/ui_editdialog.h @@ -0,0 +1,149 @@ +/******************************************************************************** +** Form generated from reading UI file 'editdialog.ui' +** +** Created: Mon Nov 4 07:59:39 2013 +** by: Qt User Interface Compiler version 4.8.4 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_EDITDIALOG_H +#define UI_EDITDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_EditDialog +{ +public: + QGridLayout *gridLayout; + QVBoxLayout *verticalLayout; + QLabel *nameLabel; + QLineEdit *nameLineEdit; + QLabel *phoneLabel; + QLineEdit *phoneLineEdit; + QLabel *commentLabel; + CustomTextEdit *commentTextEdit; + QLabel *assignaturaLabel; + QComboBox *assignaturaComboBox; + QSpacerItem *horizontalSpacer_2; + QDialogButtonBox *buttonBox; + QSpacerItem *verticalSpacer_3; + QSpacerItem *verticalSpacer_2; + QSpacerItem *horizontalSpacer; + + void setupUi(QDialog *EditDialog) + { + if (EditDialog->objectName().isEmpty()) + EditDialog->setObjectName(QString::fromUtf8("EditDialog")); + EditDialog->resize(280, 336); + gridLayout = new QGridLayout(EditDialog); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + verticalLayout = new QVBoxLayout(); + verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + nameLabel = new QLabel(EditDialog); + nameLabel->setObjectName(QString::fromUtf8("nameLabel")); + + verticalLayout->addWidget(nameLabel); + + nameLineEdit = new QLineEdit(EditDialog); + nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit")); + + verticalLayout->addWidget(nameLineEdit); + + phoneLabel = new QLabel(EditDialog); + phoneLabel->setObjectName(QString::fromUtf8("phoneLabel")); + + verticalLayout->addWidget(phoneLabel); + + phoneLineEdit = new QLineEdit(EditDialog); + phoneLineEdit->setObjectName(QString::fromUtf8("phoneLineEdit")); + + verticalLayout->addWidget(phoneLineEdit); + + commentLabel = new QLabel(EditDialog); + commentLabel->setObjectName(QString::fromUtf8("commentLabel")); + + verticalLayout->addWidget(commentLabel); + + commentTextEdit = new CustomTextEdit(EditDialog); + commentTextEdit->setObjectName(QString::fromUtf8("commentTextEdit")); + + verticalLayout->addWidget(commentTextEdit); + + assignaturaLabel = new QLabel(EditDialog); + assignaturaLabel->setObjectName(QString::fromUtf8("assignaturaLabel")); + + verticalLayout->addWidget(assignaturaLabel); + + assignaturaComboBox = new QComboBox(EditDialog); + assignaturaComboBox->setObjectName(QString::fromUtf8("assignaturaComboBox")); + + verticalLayout->addWidget(assignaturaComboBox); + + + gridLayout->addLayout(verticalLayout, 1, 1, 2, 3); + + horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum); + + gridLayout->addItem(horizontalSpacer_2, 1, 4, 1, 1); + + buttonBox = new QDialogButtonBox(EditDialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + + gridLayout->addWidget(buttonBox, 4, 3, 1, 1); + + verticalSpacer_3 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(verticalSpacer_3, 3, 3, 1, 1); + + verticalSpacer_2 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout->addItem(verticalSpacer_2, 0, 3, 1, 1); + + horizontalSpacer = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum); + + gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1); + + + retranslateUi(EditDialog); + QObject::connect(buttonBox, SIGNAL(accepted()), EditDialog, SLOT(accept())); + QObject::connect(buttonBox, SIGNAL(rejected()), EditDialog, SLOT(reject())); + + QMetaObject::connectSlotsByName(EditDialog); + } // setupUi + + void retranslateUi(QDialog *EditDialog) + { + EditDialog->setWindowTitle(QApplication::translate("EditDialog", "Editar pr\303\251stec...", 0, QApplication::UnicodeUTF8)); + nameLabel->setText(QApplication::translate("EditDialog", "Nom i cognoms", 0, QApplication::UnicodeUTF8)); + phoneLabel->setText(QApplication::translate("EditDialog", "Tel\303\250fon", 0, QApplication::UnicodeUTF8)); + commentLabel->setText(QApplication::translate("EditDialog", "Comentari (M\303\240x 140 car\303\240cters)", 0, QApplication::UnicodeUTF8)); + assignaturaLabel->setText(QApplication::translate("EditDialog", "Assignatura", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class EditDialog: public Ui_EditDialog {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_EDITDIALOG_H diff --git b/ui_mainwindow.h a/ui_mainwindow.h new file mode 100644 index 0000000..7696b80 --- /dev/null +++ a/ui_mainwindow.h @@ -0,0 +1,207 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created: Mon Nov 4 07:59:39 2013 +** by: Qt User Interface Compiler version 4.8.4 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralWidget; + QGridLayout *gridLayout_2; + QTableView *tableView; + QHBoxLayout *horizontalLayout_2; + QPushButton *addButton; + QPushButton *deleteButton; + QPushButton *editButton; + QSpacerItem *horizontalSpacer; + QPushButton *exitButton; + QSpacerItem *verticalSpacer_4; + QSpacerItem *horizontalSpacer_7; + QSpacerItem *verticalSpacer_2; + QSpacerItem *horizontalSpacer_2; + QSpacerItem *verticalSpacer_3; + QStatusBar *statusBar; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName(QString::fromUtf8("MainWindow")); + MainWindow->resize(800, 600); + QIcon icon; + icon.addFile(QString::fromUtf8(":/Icons/apunts.png"), QSize(), QIcon::Normal, QIcon::Off); + MainWindow->setWindowIcon(icon); + centralWidget = new QWidget(MainWindow); + centralWidget->setObjectName(QString::fromUtf8("centralWidget")); + gridLayout_2 = new QGridLayout(centralWidget); + gridLayout_2->setSpacing(6); + gridLayout_2->setContentsMargins(11, 11, 11, 11); + gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); + tableView = new QTableView(centralWidget); + tableView->setObjectName(QString::fromUtf8("tableView")); + tableView->setLocale(QLocale(QLocale::Spanish, QLocale::Spain)); + tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + tableView->setAlternatingRowColors(true); + tableView->setSelectionMode(QAbstractItemView::MultiSelection); + tableView->setSelectionBehavior(QAbstractItemView::SelectRows); + tableView->setShowGrid(true); + tableView->setGridStyle(Qt::SolidLine); + tableView->setSortingEnabled(true); + tableView->setCornerButtonEnabled(false); + tableView->horizontalHeader()->setStretchLastSection(true); + tableView->verticalHeader()->setVisible(false); + tableView->verticalHeader()->setStretchLastSection(false); + + gridLayout_2->addWidget(tableView, 2, 1, 1, 1); + + horizontalLayout_2 = new QHBoxLayout(); + horizontalLayout_2->setSpacing(6); + horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2")); + addButton = new QPushButton(centralWidget); + addButton->setObjectName(QString::fromUtf8("addButton")); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(addButton->sizePolicy().hasHeightForWidth()); + addButton->setSizePolicy(sizePolicy); + addButton->setMinimumSize(QSize(32, 32)); + addButton->setMaximumSize(QSize(32, 32)); + QIcon icon1; + QString iconThemeName = QString::fromUtf8("add"); + if (QIcon::hasThemeIcon(iconThemeName)) { + icon1 = QIcon::fromTheme(iconThemeName); + } else { + icon1.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off); + } + addButton->setIcon(icon1); + addButton->setIconSize(QSize(32, 32)); + + horizontalLayout_2->addWidget(addButton); + + deleteButton = new QPushButton(centralWidget); + deleteButton->setObjectName(QString::fromUtf8("deleteButton")); + sizePolicy.setHeightForWidth(deleteButton->sizePolicy().hasHeightForWidth()); + deleteButton->setSizePolicy(sizePolicy); + deleteButton->setMinimumSize(QSize(32, 32)); + deleteButton->setMaximumSize(QSize(32, 32)); + QIcon icon2; + iconThemeName = QString::fromUtf8("edit-delete"); + if (QIcon::hasThemeIcon(iconThemeName)) { + icon2 = QIcon::fromTheme(iconThemeName); + } else { + icon2.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off); + } + deleteButton->setIcon(icon2); + + horizontalLayout_2->addWidget(deleteButton); + + editButton = new QPushButton(centralWidget); + editButton->setObjectName(QString::fromUtf8("editButton")); + sizePolicy.setHeightForWidth(editButton->sizePolicy().hasHeightForWidth()); + editButton->setSizePolicy(sizePolicy); + editButton->setMinimumSize(QSize(32, 32)); + editButton->setMaximumSize(QSize(32, 32)); + QIcon icon3; + iconThemeName = QString::fromUtf8("text-editor"); + if (QIcon::hasThemeIcon(iconThemeName)) { + icon3 = QIcon::fromTheme(iconThemeName); + } else { + icon3.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off); + } + editButton->setIcon(icon3); + + horizontalLayout_2->addWidget(editButton); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + horizontalLayout_2->addItem(horizontalSpacer); + + exitButton = new QPushButton(centralWidget); + exitButton->setObjectName(QString::fromUtf8("exitButton")); + + horizontalLayout_2->addWidget(exitButton); + + + gridLayout_2->addLayout(horizontalLayout_2, 4, 1, 1, 1); + + verticalSpacer_4 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout_2->addItem(verticalSpacer_4, 5, 1, 1, 1); + + horizontalSpacer_7 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout_2->addItem(horizontalSpacer_7, 2, 0, 1, 1); + + verticalSpacer_2 = new QSpacerItem(20, 15, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout_2->addItem(verticalSpacer_2, 3, 1, 1, 1); + + horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout_2->addItem(horizontalSpacer_2, 2, 2, 1, 1); + + verticalSpacer_3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum); + + gridLayout_2->addItem(verticalSpacer_3, 0, 1, 1, 1); + + MainWindow->setCentralWidget(centralWidget); + statusBar = new QStatusBar(MainWindow); + statusBar->setObjectName(QString::fromUtf8("statusBar")); + MainWindow->setStatusBar(statusBar); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QApplication::translate("MainWindow", "Aplicaci\303\263 Apunts", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + addButton->setToolTip(QApplication::translate("MainWindow", "Afegeix pr\303\251stec", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + addButton->setText(QString()); +#ifndef QT_NO_TOOLTIP + deleteButton->setToolTip(QApplication::translate("MainWindow", "Esborra pr\303\251stec", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + deleteButton->setText(QString()); +#ifndef QT_NO_TOOLTIP + editButton->setToolTip(QApplication::translate("MainWindow", "Edita pr\303\251stec", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + editButton->setText(QString()); + exitButton->setText(QApplication::translate("MainWindow", "Sortir", 0, QApplication::UnicodeUTF8)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H