pax_global_header00006660000000000000000000000064146416113160014515gustar00rootroot0000000000000052 comment=92b0743160cc20f6f626e75b7c88cb318787b8f3 persepolisdm-persepolis-867ee76/000077500000000000000000000000001464161131600167635ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/.github/000077500000000000000000000000001464161131600203235ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/.github/ISSUE_TEMPLATE000066400000000000000000000010761464161131600224350ustar00rootroot00000000000000**System Details:** * Operating System: ? * Distro(For GNU/Linux and BSD users): ? * Desktop Environment(For GNU/Linux and BSD users): ? * Persepolis Version: ? * How do you install Persepolis? (Repositories, source, ...) * _Please attach log files if crash or paste error message_ **Issue Description and steps to reproduce:** #### Write in English language please, Thanks :) #### Feel free to edit or delete lines in this template if it is necessary. #### Please report only one Issue (Bug or feature request or ...) in one issue! and open new Issue for another one :) persepolisdm-persepolis-867ee76/.github/contributing.md000066400000000000000000000001701464161131600233520ustar00rootroot00000000000000Please read our [contribution instruction](https://github.com/persepolisdm/persepolis/wiki/Home-en#contributers-guide). persepolisdm-persepolis-867ee76/.gitignore000066400000000000000000000003401464161131600207500ustar00rootroot00000000000000__pycache__/ *.pyc .env *.orig root/ build/ builddir/ persepolis.egg-info/ man/persepolis.1.gz .idea/ .mypy_cache persepolis_wenv/ test/aria2c test/ffmpeg test/gost dist/ *.spec test/aria2c.exe test/ffmpeg.exe test/sthp.exe persepolisdm-persepolis-867ee76/.pep8000066400000000000000000000000741464161131600176410ustar00rootroot00000000000000[pycodestyle] max_line_length = 120 ignore = E501,E722,W503 persepolisdm-persepolis-867ee76/.travis.yml000066400000000000000000000014651464161131600211020ustar00rootroot00000000000000language: python dist: bionic sudo: required python: - "3.6" virtualenv: system_site_packages: true addons: apt: update: true packages: python3 aria2 sound-theme-freedesktop libnotify-bin libqt5svg5 python3-pyqt5.qtsvg python3-setuptools python3-pip python3-pyqt5 pulseaudio python3-psutil ffmpeg before_install: - sudo pip3 install youtube-dl requests setproctitle install: true script: - sudo python3 setup.py install - persepolis --version after_success: - pip3 install transifex-client==0.12.5 - sudo echo $'[https://www.transifex.com]\napi_hostname = https://api.transifex.com\nhostname = https://www.transifex.com\nusername = '"$TRANSIFEX_USER"$'\npassword = '"$TRANSIFEX_PASSWORD"$'\n' > ~/.transifexrc - tx push -s persepolisdm-persepolis-867ee76/.tx/000077500000000000000000000000001464161131600174745ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/.tx/config000066400000000000000000000003061464161131600206630ustar00rootroot00000000000000[main] host = https://www.transifex.com [persepolis-translations.ui] file_filter = resources/locales/ui_.ts minimum_perc = 0 source_file = resources/locales/ui.ts source_lang = en type = QT persepolisdm-persepolis-867ee76/LICENSE000066400000000000000000001045051464161131600177750ustar00rootroot00000000000000 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. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} 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: {project} Copyright (C) {year} {fullname} 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 . persepolisdm-persepolis-867ee76/README.md000066400000000000000000000126701464161131600202500ustar00rootroot00000000000000

Persepolis Download Manager

[![Latest stable release](https://img.shields.io/github/release/persepolisdm/persepolis.svg?maxAge=3600)](https://github.com/persepolisdm/persepolis/releases) [![Total downloads](https://img.shields.io/github/downloads/persepolisdm/persepolis/total.svg)](https://github.com/persepolisdm/persepolis) [![GitHub license](https://img.shields.io/github/license/persepolisdm/persepolis.svg)](https://github.com/persepolisdm/persepolis/blob/master/LICENSE) [![Build Status](https://travis-ci.org/persepolisdm/persepolis.svg?branch=master)](https://travis-ci.org/persepolisdm/persepolis) [![GitHub last commit](https://img.shields.io/github/last-commit/persepolisdm/persepolis.svg)](https://github.com/persepolisdm/persepolis/commits/master) [![GitHub contributors](https://img.shields.io/github/contributors/persepolisdm/persepolis.svg)](https://github.com/persepolisdm/persepolis/graphs/contributors) [![GitHub commit activity the past week, 4 weeks, year](https://img.shields.io/github/commit-activity/y/persepolisdm/persepolis.svg)](https://github.com/persepolisdm/persepolis/commits/master) [![AUR](https://img.shields.io/aur/version/persepolis-git.svg)](https://aur.archlinux.org/packages/persepolis-git) [![Twitter Follow](https://img.shields.io/twitter/follow/persepolisdm.svg?style=social&label=Follow)](https://twitter.com/persepolisdm) > **Content** > - [About](https://github.com/persepolisdm/persepolis#about) > - [How to install PersepolisDM](https://github.com/persepolisdm/persepolis/wiki) > - [FAQ](https://github.com/persepolisdm/persepolis#faq) > - [Screenshots](https://github.com/persepolisdm/persepolis#screenshots) > - [Credits](https://github.com/persepolisdm/persepolis#credits) ### **About** Persepolis is a download manager & a GUI for [Aria2](https://github.com/aria2/aria2). It's written in Python. Persepolis is a sample of free and open source software. It's developed for GNU/Linux distributions, BSDs, MacOS, and Microsoft Windows. ### **Features** - Multi-segment downloading - Scheduling downloads - Download queuing - Download video from youtube and ... - and many more! Demonstration clip: [![Demonstration video](https://img.youtube.com/vi/QHdMShFgzhQ/0.jpg)](https://www.youtube.com/watch?v=QHdMShFgzhQ) ### How to install PersepolisDM? > Please checkout Persepolis [wiki](https://github.com/persepolisdm/persepolis/wiki) ### **FAQ** > **Where does the name come from?** > > [From Wikipedia:](https://en.wikipedia.org/wiki/Persepolis) Persepolis (Greek: Περσέπολις Persépolis; "the Persian city") or Parsa (Old Persian: 𐎱𐎠𐎼𐎿 Pārsa; "Persia"), also known as Takht-e-Jamshid (Persian: تخت جمشيد‎‎ Taxt e Jamšid; "Throne of Jamshid"), was the ceremonial capital of the Achaemenid Empire (ca. 550–330 BC). Persepolis is situated 60 km northeast of the city of Shiraz in Fars Province, Iran. The earliest remains of Persepolis date back to 515 BC. It exemplifies the Achaemenid style of architecture. UNESCO declared the ruins of Persepolis a World Heritage Site in 1979. > **How can I install Persepolis?** > > Read [our wiki](https://github.com/persepolisdm/persepolis/wiki) or check [Persepolis website](https://persepolisdm.github.io) for more information. ### **Screenshots** |GNU/Linux|Mac OSX|Windows| |:---:|:---:|:---:| |![](https://persepolisdm.github.io/img/screen/persepolis.png)|![](https://persepolisdm.github.io/img/screen/mac_401.png)|![](https://persepolisdm.github.io/img/screen/windows.png)| ### Credits **Alireza Amirsamimi:** Persepolis lead developer and manager [GitHub](https://github.com/alireza-amirsamimi) | [E-mail](mailto:alireza.amirsamimi@gmail.com) **Mohammadreza Abdollahzadeh:** Arch Linux and BSD support [GitHub](https://github.com/morealaz) | [E-mail](mailto:morealaz@gmail.com) **Mostafa Asadi:** Ubuntu, Debian and Windows support [GitHub](https://github.com/mostafaasadi) | [E-mail](mailto:mostafaasadi73@gmail.com) **Sadegh Alirezaie:** Persepolis website support [GitHub](https://github.com/Alirezaies) | [E-mail](mailto:alirezaie@sadegh.org) **Jafar Akhondali:** Browsers add-ons support [GitHub](https://github.com/JafarAkhondali) | [E-mail](mailto:jafar.akhondali@yahoo.com) **Kia Hamedi:** Mac OSX support [GitHub](https://github.com/Kiahamedi) | [E-mail](mailto:me@kiahamedi.com) **H Rostami:** UI translation, Fedora & OpenSuse support [GitHub](https://github.com/hayyan71) | [E-mail](mailto:hayyan71@yahoo.com) **Ehsan Titish:** Mac OSX support [GitHub](https://github.com/Maders) | [E-mail](mailto:me@maders.ir) **MohammadAmin Vahedinia:** Mac OSX support [GitHub](https://github.com/Mr0Null) | [E-mail](mailto:persepolisdm@vahedinia.me) [Persepolis website (En)](https://persepolisdm.github.io/) | [Persepolis website (Fa)](https://persepolisdm.github.io/fa) | [Twitter](https://twitter.com/persepolisdm) | [Telegram Channel](https://telegram.me/persepolisdm) ### Acknowledgments: [Aria2c project](https://github.com/aria2/aria2) [YT-DLP project](https://github.com/yt-dlp/yt-dlp) [FFmpeg project](https://github.com/FFmpeg/FFmpeg) [Socks to http proxy](https://github.com/KaranGauswami/socks-to-http-proxy) [Gost project](https://github.com/ginuerzh/gost) --- _Is there any mistake in README.md? Report it in [issue tracker](https://github.com/persepolisdm/persepolis/issues) or correct it by yourself._ persepolisdm-persepolis-867ee76/check_dependencies.py000066400000000000000000000106051464161131600231220ustar00rootroot00000000000000#!/usr/bin/env python3 # coding: utf-8 # 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 . # import os import platform # finding os platform os_type = platform.system() # Checking dependencies! not_installed = '' # PyQt5 or PySide6 try: import PySide6 print('python3-pyside6 is found') pyside6_is_installed = True except: pyside6_is_installed = False if not(pyside6_is_installed): try: import PyQt5 print('python3-pyqt5 is found') except: print('Error : python3-pyqt5 or pyside6 must be installed!') not_installed = not_installed + '(PyQt5 or PySide6) ' # python3-requests try: import requests print('python3-requests is found!') except: print('Error : requests is not installed!') not_installed = not_installed + 'python3-requests, ' # python3-setproctitle try: import setproctitle print('python3-setproctitle is found!') except: print("Warning: setproctitle is not installed!") not_installed = not_installed + 'python3-setproctitle, ' # psutil try: import psutil print('python3-psutil is found!') except: print("Warning: python3-psutil is not installed!") not_installed = not_installed + 'psutil, ' # yt_dlp try: import yt_dlp print('yt-dlp is found') except: print('Warning: yt-dlp is not installed!') not_installed = not_installed + 'yt-dlp, ' # aria2 answer = os.system('aria2c --version 1>/dev/null') if answer != 0: print("Error aria2 not installed!") not_installed = not_installed + 'aria2c, ' else: print('aria2 is found!') # ffmpeg answer = os.system('ffmpeg -version 1>/dev/null') if answer != 0: print("Warning: ffmpeg not installed!") not_installed = not_installed + 'ffmpeg, ' else: print('ffmpeg is found!') # gost or sthp socks_to_http_convertor_is_installed = False answer = os.system('gost -V 1>/dev/null') if answer == 0: socks_to_http_convertor_is_installed = True else: answer = os.system('sthp -V 1>/dev/null') if answer == 0: socks_to_http_convertor_is_installed = True if socks_to_http_convertor_is_installed: print("gost or sthp is found!") else: print('socks to http convertor is not installed!') not_installed = not_installed + 'socks to http convertor' # sound-theme-freedesktop if os_type == 'Linux': notifications_path = '/usr/share/sounds/freedesktop/stereo/' elif os_type == 'FreeBSD' or os_type == 'OpenBSD': notifications_path = '/usr/local/share/sounds/freedesktop/stereo/' if os_type == 'Linux' or os_type == 'FreeBSD' or os_type == 'OpenBSD': if os.path.isdir(notifications_path): print('sound-theme-freedesktop is found!') else: print('Warning: sound-theme-freedesktop is not installed! you need this package for sound notifications!') not_installed = not_installed + 'sound-theme-freedesktop' # libnotify-bin answer = os.system('notify-send --version 1>/dev/null') if answer != 0: print("Error libnotify-bin is not installed!") not_installed = not_installed + 'libnotify-bin, ' else: print('libnotify-bin is found!') # paplay answer = os.system('paplay --version 1>/dev/null') if answer != 0: print("Warning: paplay not installed!You need pulseaudio for sound notifications!") not_installed = not_installed + 'paplay, ' else: print('paplay is found!') # show warning , if dependencies not installed! if not_installed != '': print('########################') print('####### WARNING ########') print('########################') print('Some dependencies are not installed .It causes some problems for persepolis! : \n') print(not_installed + '\n\n') print('Read this link for more information: \n') print('https://github.com/persepolisdm/persepolis/wiki/git-installation-instruction\n\n') persepolisdm-persepolis-867ee76/clear.py000077500000000000000000000053131464161131600204300ustar00rootroot00000000000000#!/usr/bin/env python3 # coding: utf-8 # 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 . # import os import warnings import sys import platform import shutil from persepolis.constants import OS # finding os platform os_type = platform.system() if os_type == 'Linux' or os_type == 'FreeBSD' or os_type == 'OpenBSD': print(os_type + " detected!") else: print('This script is only work for GNU/Linux or BSD!') sys.exit(1) # finding current directory cwd = os.path.abspath(__file__) setup_dir = os.path.dirname(cwd) # clearing __pycache__ src_pycache = os.path.join(setup_dir, 'persepolis', '__pycache__') gui_pycache = os.path.join(setup_dir, 'persepolis', 'gui', '__pycache__') scripts_pycache = os.path.join(setup_dir, 'persepolis', 'scripts', '__pycache__') constants_pycache = os.path.join(setup_dir, 'persepolis', 'constants', '__pycache__') for folder in [src_pycache, gui_pycache, scripts_pycache, constants_pycache]: if os.path.isdir(folder): shutil.rmtree(folder) print(str(folder) + ' is removed!') uid = os.getuid() if uid != 0: print('Run this script as root\n\ if you want to clean unwanted files that created by setup tools') sys.exit(1) # finding current directory cwd = os.path.abspath(__file__) setup_dir = os.path.dirname(cwd) # clearing __pycache__ src_pycache = os.path.join(setup_dir, 'persepolis', '__pycache__') gui_pycache = os.path.join(setup_dir, 'persepolis', 'gui', '__pycache__') scripts_pycache = os.path.join(setup_dir, 'persepolis', 'scripts', '__pycache__') constants_pycache = os.path.join(setup_dir, 'persepolis', 'constants', '__pycache__') for folder in [src_pycache, gui_pycache, scripts_pycache, constants_pycache]: if os.path.isdir(folder): shutil.rmtree(folder) print(str(folder) + ' is removed!') # clear unwanted files! for folder in ['build', 'dist', 'root', 'persepolis.egg-info']: if os.path.isdir(folder): shutil.rmtree(folder) print(str(folder) + ' is removed!') man_page = 'man/persepolis.1.gz' if os.path.isfile(man_page): os.remove('man/persepolis.1.gz') persepolisdm-persepolis-867ee76/man/000077500000000000000000000000001464161131600175365ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/man/meson.build000066400000000000000000000001411464161131600216740ustar00rootroot00000000000000# creating man page file persepolis_man_page='persepolis.1' install_man(persepolis_man_page) persepolisdm-persepolis-867ee76/man/persepolis.1000066400000000000000000000053031464161131600220060ustar00rootroot00000000000000.TH "Persepolis" "1" "April 18, 2024" "4.3.0" "persepolis" .SH NAME persepolis \- Persepolis Download Manager . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .\" Man page generated from reStructuredText. . .SH SYNOPSIS .sp \fBpersepolis\fP --link [] [] .SH DESCRIPTION .sp Persepolis Download Manager is a feature-full utility for easier and faster downloads with aria2. It support HTTP(S) & FTP.Persepolis configures aria2 automatically for maximum speed and it has a GUI for the ease of use. You can adjust start time and end time for downloads.Persepolis can shutdown system after download. You can integrate persepolis with your browser(read persepolis wiki on github page). .SH OPTIONS .SS Basic Options .INDENT 0.0 .TP .B \--link Your Download link.(Use "" for links) $ persepolis --link "https://www.google.com/images/srpr/logo11w.png" .UNINDENT .INDENT 0.0 .TP .B \--referrer Set an http referrer (Referer). This affects all http/https downloads. If * is given, the download URI is also used as the referrer. .UNINDENT .INDENT 0.0 .TP .B \--cookie Set cookie .UNINDENT .INDENT 0.0 .TP .B \--agent Set user agent for HTTP(S) downloads. Default: aria2/$VERSION, $VERSION is replaced by package version. .UNINDENT .INDENT 0.0 .TP .B \--headers Append HEADER to HTTP request header. .UNINDENT .INDENT 0.0 .TP .B \--name The file name of the downloaded file. .UNINDENT .INDENT 0.0 .TP .B \--default Restore default settings. .UNINDENT .INDENT 0.0 .TP .B \--clear Clear download list and user setting! .UNINDENT .INDENT 0.0 .TP .B \--tray Persepolis starts in tray icon. It's useful when you want to put persepolis in system's startup. .UNINDENT .INDENT 0.0 .TP .B \--version Showing persepolis version. .UNINDENT .INDENT 0.0 .TP .B \--help Persepolis help. .UNINDENT .INDENT 0.0 .TP .SH MORE HELP for configuration with firefox flashgot please see README.md file on github https://github.com/persepolisdm/persepolis .SH SEE ALSO aria2c(1) .SH AUTHOR .B AliReza AmirSamimi .UNINDENT .INDENT 0.0 .TP .B Github page https://github.com/persepolisdm/persepolis .UNINDENT .INDENT 0.0 .TP .B PersepolisDM Telegram Channel https://telegram.me/persepolisdm persepolisdm-persepolis-867ee76/meson.build000066400000000000000000000016051464161131600211270ustar00rootroot00000000000000project('persepolis', version: '4.3.0', meson_version: '>=0.61.2') python = import('python') python3 = python.find_installation('python3') if not python3.found() error('No valid python3 installation found!') endif # run dependency check script meson.add_install_script('check_dependencies.py') prefix = get_option('prefix') bindir = join_paths(prefix, get_option('bindir')) datadir = join_paths(prefix, get_option('datadir')) pythondir = join_paths(prefix, python3.get_path('purelib')) pkgdatadir = join_paths(datadir, meson.project_name()) pkgappid = 'com.github.persepolisdm.persepolis' appdatadir = join_paths(datadir, 'metainfo') desktopdir = join_paths(datadir, 'applications') persepolisdir = python3.get_install_dir(subdir: 'persepolis') icondir = join_paths(datadir, 'icons', 'hicolor', 'scalable', 'apps') subdir('persepolis') subdir('man') subdir('xdg') subdir('resources') persepolisdm-persepolis-867ee76/persepolis/000077500000000000000000000000001464161131600211505ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/persepolis/.pep8000066400000000000000000000000441464161131600220230ustar00rootroot00000000000000[pycodestyle] max_line_length = 120 persepolisdm-persepolis-867ee76/persepolis/Persepolis Download Manager.py000066400000000000000000000015071464161131600267350ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # this file is created for building persepolis with pyinstaller. import sys import os from persepolis.scripts import persepolis persepolis.main() persepolisdm-persepolis-867ee76/persepolis/__init__.py000066400000000000000000000013331464161131600232610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # import sys # sys.path.insert(1, '.') persepolisdm-persepolis-867ee76/persepolis/__main__.py000066400000000000000000000014061464161131600232430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . import sys import os from persepolis.scripts import persepolis persepolis.main() persepolisdm-persepolis-867ee76/persepolis/constants/000077500000000000000000000000001464161131600231645ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/persepolis/constants/Browser.py000066400000000000000000000017071464161131600251660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # class BROWSER: CHROME = 'chrome' CHROMIUM = 'chromium' OPERA = 'opera' VIVALDI = 'vivaldi' FIREFOX = 'firefox' BRAVE = 'brave' CHROME_FAMILY = [CHROME, CHROMIUM, VIVALDI, OPERA, BRAVE] LIST = [CHROME, CHROMIUM, OPERA, VIVALDI, FIREFOX, BRAVE] persepolisdm-persepolis-867ee76/persepolis/constants/Os.py000066400000000000000000000016671464161131600241310ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # class OS: LINUX = 'Linux' WINDOWS = 'Windows' FREE_BSD = 'FreeBSD' OPEN_BSD = 'OpenBSD' OSX = DARWIN = 'Darwin' BSD_FAMILY = [FREE_BSD, OPEN_BSD] UNIX_LIKE = BSD_FAMILY + [LINUX] LIST = [LINUX, WINDOWS, FREE_BSD, OPEN_BSD, OSX] persepolisdm-persepolis-867ee76/persepolis/constants/__init__.py000066400000000000000000000014141464161131600252750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # # import sys # sys.path.insert(1, '.') from .Os import OS from .Browser import BROWSER persepolisdm-persepolis-867ee76/persepolis/gui/000077500000000000000000000000001464161131600217345ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/persepolis/gui/.pep8000066400000000000000000000000441464161131600226070ustar00rootroot00000000000000[pycodestyle] max_line_length = 120 persepolisdm-persepolis-867ee76/persepolis/gui/__init__.py000066400000000000000000000013331464161131600240450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # # import sys # sys.path.insert(1, '.') persepolisdm-persepolis-867ee76/persepolis/gui/about_ui.py000066400000000000000000000344651464161131600241310ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtWidgets import QWidget, QTabWidget, QHBoxLayout, QVBoxLayout, QLabel, QTextEdit, QPushButton from PySide6.QtCore import Qt, QSize, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon, QFont pyside6_is_installed = True except: from PyQt5.QtWidgets import QWidget, QTabWidget, QHBoxLayout, QVBoxLayout, QLabel, QTextEdit, QPushButton from PyQt5.QtCore import Qt, QSize, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon, QFont pyside6_is_installed = False from persepolis.gui import resources if pyside6_is_installed is True: try: from PySide6 import QtSvgWidgets qtsvg_available = True except: qtsvg_available = False else: try: from PyQt5 import QtSvg as QtSvgWidgets qtsvg_available = True except: qtsvg_available = False class AboutWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setMinimumSize(QSize(545, 375)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) verticalLayout = QVBoxLayout(self) self.about_tabWidget = QTabWidget(self) # about tab self.about_tab = QWidget(self) about_tab_horizontalLayout = QHBoxLayout(self.about_tab) about_tab_verticalLayout = QVBoxLayout() # persepolis icon if qtsvg_available: persepolis_icon_verticalLayout = QVBoxLayout() self.persepolis_icon = QtSvgWidgets.QSvgWidget(':/com.github.persepolisdm.persepolis.svg') self.persepolis_icon.setFixedSize(QSize(64, 64)) persepolis_icon_verticalLayout.addWidget(self.persepolis_icon) persepolis_icon_verticalLayout.addStretch(1) about_tab_horizontalLayout.addLayout(persepolis_icon_verticalLayout) self.title_label = QLabel(self.about_tab) font = QFont() font.setBold(True) font.setWeight(QFont.Weight.Bold) self.title_label.setFont(font) self.title_label.setAlignment(Qt.AlignCenter) about_tab_verticalLayout.addWidget(self.title_label) self.version_label = QLabel(self.about_tab) self.version_label.setAlignment(Qt.AlignCenter) about_tab_verticalLayout.addWidget(self.version_label) self.site2_label = QLabel(self.about_tab) self.site2_label.setTextFormat(Qt.RichText) self.site2_label.setAlignment(Qt.AlignCenter) self.site2_label.setOpenExternalLinks(True) self.site2_label.setTextInteractionFlags( Qt.TextBrowserInteraction) about_tab_verticalLayout.addWidget(self.site2_label) self.telegram_label = QLabel(self.about_tab) self.telegram_label.setTextFormat(Qt.RichText) self.telegram_label.setAlignment(Qt.AlignCenter) self.telegram_label.setOpenExternalLinks(True) self.telegram_label.setTextInteractionFlags( Qt.TextBrowserInteraction) about_tab_verticalLayout.addWidget(self.telegram_label) self.twitter_label = QLabel(self.about_tab) self.twitter_label.setTextFormat(Qt.RichText) self.twitter_label.setAlignment(Qt.AlignCenter) self.twitter_label.setOpenExternalLinks(True) self.twitter_label.setTextInteractionFlags( Qt.TextBrowserInteraction) about_tab_verticalLayout.addWidget(self.twitter_label) about_tab_verticalLayout.addStretch(1) about_tab_horizontalLayout.addLayout(about_tab_verticalLayout) # developers_tab # developers self.developers_tab = QWidget(self) developers_verticalLayout = QVBoxLayout(self.developers_tab) self.developers_title_label = QLabel(self.developers_tab) font.setBold(True) font.setWeight(QFont.Weight.Bold) self.developers_title_label.setFont(font) self.developers_title_label.setAlignment(Qt.AlignCenter) developers_verticalLayout.addWidget(self.developers_title_label) self.name_label = QLabel(self.developers_tab) self.name_label.setAlignment(Qt.AlignCenter) developers_verticalLayout.addWidget(self.name_label) # contributors self.contributors_thank_label = QLabel(self.developers_tab) self.contributors_thank_label.setFont(font) self.contributors_thank_label.setAlignment(Qt.AlignCenter) developers_verticalLayout.addWidget(self.contributors_thank_label) self.contributors_link_label = QLabel(self.developers_tab) self.contributors_link_label.setTextFormat(Qt.RichText) self.contributors_link_label.setAlignment(Qt.AlignCenter) self.contributors_link_label.setOpenExternalLinks(True) self.contributors_link_label.setTextInteractionFlags( Qt.TextBrowserInteraction) developers_verticalLayout.addWidget(self.contributors_link_label) developers_verticalLayout.addStretch(1) # translators tab self.translators_tab = QWidget(self) translators_tab_verticalLayout = QVBoxLayout(self.translators_tab) # translators self.translators_textEdit = QTextEdit(self.translators_tab) self.translators_textEdit.setReadOnly(True) translators_tab_verticalLayout.addWidget(self.translators_textEdit) # License tab self.license_tab = QWidget(self) license_tab_verticalLayout = QVBoxLayout(self.license_tab) self.license_text = QTextEdit(self.license_tab) self.license_text.setReadOnly(True) license_tab_verticalLayout.addWidget(self.license_text) verticalLayout.addWidget(self.about_tabWidget) # Acknowledgments tab self.acknowledgments_tab = QWidget(self) acknowledgments_verticalLayout = QVBoxLayout(self.acknowledgments_tab) self.acknowledgments_title_label = QLabel(self.acknowledgments_tab) font.setBold(True) font.setWeight(QFont.Weight.Bold) self.acknowledgments_title_label.setFont(font) self.acknowledgments_title_label.setAlignment(Qt.AlignCenter) acknowledgments_verticalLayout.addWidget(self.acknowledgments_title_label) self.acknowledgments_aria2c_label = QLabel(self.acknowledgments_tab) self.acknowledgments_aria2c_label.setAlignment(Qt.AlignCenter) self.acknowledgments_ffmpeg_label = QLabel(self.acknowledgments_tab) self.acknowledgments_ffmpeg_label.setAlignment(Qt.AlignCenter) self.acknowledgments_ytdlp_label = QLabel(self.acknowledgments_tab) self.acknowledgments_ytdlp_label.setAlignment(Qt.AlignCenter) self.acknowledgments_sthp_label = QLabel(self.acknowledgments_tab) self.acknowledgments_sthp_label.setAlignment(Qt.AlignCenter) self.acknowledgments_gost_label = QLabel(self.acknowledgments_tab) self.acknowledgments_gost_label.setAlignment(Qt.AlignCenter) self.acknowledgments_aria2c_label.setFont(font) self.acknowledgments_ffmpeg_label.setFont(font) self.acknowledgments_ytdlp_label.setFont(font) self.acknowledgments_gost_label.setFont(font) acknowledgments_verticalLayout.addWidget(self.acknowledgments_aria2c_label) acknowledgments_verticalLayout.addWidget(self.acknowledgments_ytdlp_label) acknowledgments_verticalLayout.addWidget(self.acknowledgments_ffmpeg_label) acknowledgments_verticalLayout.addWidget(self.acknowledgments_sthp_label) acknowledgments_verticalLayout.addWidget(self.acknowledgments_gost_label) acknowledgments_verticalLayout.addStretch(1) # buttons button_horizontalLayout = QHBoxLayout() button_horizontalLayout.addStretch(1) self.pushButton = QPushButton(self) self.pushButton.setIcon(QIcon(icons + 'ok')) self.pushButton.clicked.connect(self.close) button_horizontalLayout.addWidget(self.pushButton) verticalLayout.addLayout(button_horizontalLayout) self.setWindowTitle(QCoreApplication.translate("about_ui_tr", "About Persepolis")) # about_tab self.title_label.setText(QCoreApplication.translate("about_ui_tr", "Persepolis Download Manager")) self.version_label.setText(QCoreApplication.translate("about_ui_tr", "Version 4.3.0", "TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART!")) self.site2_label.setText(QCoreApplication.translate("about_ui_tr", "https://persepolisdm.github.io", "TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART!")) self.telegram_label.setText(QCoreApplication.translate("about_ui_tr", "https://telegram.me/persepolisdm", "TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART!")) self.twitter_label.setText(QCoreApplication.translate("about_ui_tr", "https://twitter.com/persepolisdm", "TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART!")) # developers_tab self.developers_title_label.setText(QCoreApplication.translate('about_ui_tr', 'Acknowledgments:')) self.name_label.setText(QCoreApplication.translate("about_ui_tr", "\nAliReza AmirSamimi\nMohammadreza Abdollahzadeh\nSadegh Alirezaie\nMostafa Asadi\nJafar Akhondali\nKia Hamedi\nH.Rostami\nEhsan Titish\nMohammadAmin Vahedinia", "TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART!")) self.contributors_thank_label.setText(QCoreApplication.translate('about_ui_tr', 'Special thanks to:')) self.contributors_link_label.setText( "our contributors") # Acknowledgments self.acknowledgments_title_label.setText(QCoreApplication.translate('about_ui_tr', 'Acknowledgments:')) self.acknowledgments_aria2c_label.setText(QCoreApplication.translate("about_ui_tr", "Aria2c project")) self.acknowledgments_ytdlp_label.setText(QCoreApplication.translate("about_ui_tr", "YT-DLP project")) self.acknowledgments_ffmpeg_label.setText(QCoreApplication.translate("about_ui_tr", "FFmpeg project")) self.acknowledgments_sthp_label.setText(QCoreApplication.translate("about_ui_tr", "Socks to http proxy project")) self.acknowledgments_gost_label.setText(QCoreApplication.translate("about_ui_tr", "Gost project")) # License self.license_text.setPlainText(""" 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 http://www.gnu.org/licenses/. """) # tabs self.about_tabWidget.addTab(self.about_tab, QCoreApplication.translate("about_ui_tr", "About Persepolis")) self.about_tabWidget.addTab(self.developers_tab, QCoreApplication.translate("about_ui_tr", "Developers")) self.about_tabWidget.addTab(self.acknowledgments_tab, QCoreApplication.translate("about_ui_tr", "Acknowledgments")) self.about_tabWidget.addTab(self.translators_tab, QCoreApplication.translate("about_ui_tr", "Translators")) self.about_tabWidget.addTab(self.license_tab, QCoreApplication.translate("about_ui_tr", "License")) # button self.pushButton.setText(QCoreApplication.translate("about_ui_tr", "OK")) persepolisdm-persepolis-867ee76/persepolis/gui/addlink_ui.py000066400000000000000000000503421464161131600244150ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtWidgets import QTabWidget, QDoubleSpinBox, QPushButton, QComboBox, QSpinBox, QVBoxLayout, QHBoxLayout, QLabel, QWidget, QGridLayout, QCheckBox, QFrame, QLineEdit, QRadioButton from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PySide6 import QtCore from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QTabWidget, QDoubleSpinBox, QPushButton, QComboBox, QSpinBox, QVBoxLayout, QHBoxLayout, QLabel, QWidget, QGridLayout, QCheckBox, QFrame, QLineEdit, QRadioButton from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PyQt5 import QtCore from PyQt5.QtGui import QIcon from persepolis.gui import resources from persepolis.gui.customized_widgets import MyQDateTimeEdit class AddLinkWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) # get icons name icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setMinimumSize(QtCore.QSize(520, 425)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) # main layout window_verticalLayout = QVBoxLayout() # add link tab widget self.add_link_tabWidget = QTabWidget(self) window_verticalLayout.addWidget(self.add_link_tabWidget) # link tab self.link_tab = QWidget() link_tab_verticalLayout = QVBoxLayout(self.link_tab) link_tab_verticalLayout.setContentsMargins(21, 21, 21, 81) self.link_frame = QFrame(self.link_tab) self.link_frame.setFrameShape(QFrame.StyledPanel) self.link_frame.setFrameShadow(QFrame.Raised) horizontalLayout_2 = QHBoxLayout(self.link_frame) self.link_verticalLayout = QVBoxLayout() # link -> self.link_horizontalLayout = QHBoxLayout() self.link_label = QLabel(self.link_frame) self.link_horizontalLayout.addWidget(self.link_label) self.link_lineEdit = QLineEdit(self.link_frame) self.link_horizontalLayout.addWidget(self.link_lineEdit) self.link_verticalLayout.addLayout(self.link_horizontalLayout) horizontalLayout_2.addLayout(self.link_verticalLayout) link_tab_verticalLayout.addWidget(self.link_frame) # add change_name field -> self.change_name_horizontalLayout = QHBoxLayout() self.change_name_checkBox = QCheckBox(self.link_frame) self.change_name_horizontalLayout.addWidget(self.change_name_checkBox) self.change_name_lineEdit = QLineEdit(self.link_frame) self.change_name_horizontalLayout.addWidget(self.change_name_lineEdit) self.link_verticalLayout.addLayout(self.change_name_horizontalLayout) # add_category -> queue_horizontalLayout = QHBoxLayout() self.queue_frame = QFrame(self) self.queue_frame.setFrameShape(QFrame.StyledPanel) self.queue_frame.setFrameShadow(QFrame.Raised) add_queue_horizontalLayout = QHBoxLayout(self.queue_frame) self.add_queue_label = QLabel(self.queue_frame) add_queue_horizontalLayout.addWidget(self.add_queue_label) self.add_queue_comboBox = QComboBox(self.queue_frame) add_queue_horizontalLayout.addWidget(self.add_queue_comboBox) queue_horizontalLayout.addWidget(self.queue_frame) queue_horizontalLayout.addStretch(1) self.size_label = QLabel(self) queue_horizontalLayout.addWidget(self.size_label) link_tab_verticalLayout.addLayout(queue_horizontalLayout) link_tab_verticalLayout.addStretch(1) self.add_link_tabWidget.addTab(self.link_tab, '') # proxy tab self.proxy_tab = QWidget(self) proxy_verticalLayout = QVBoxLayout(self.proxy_tab) proxy_verticalLayout.setContentsMargins(21, 21, 21, 171) proxy_horizontalLayout = QHBoxLayout() self.proxy_checkBox = QCheckBox(self.proxy_tab) self.detect_proxy_pushButton = QPushButton(self.proxy_tab) self.detect_proxy_label = QLabel(self.proxy_tab) proxy_horizontalLayout.addWidget(self.proxy_checkBox) proxy_horizontalLayout.addWidget(self.detect_proxy_label) proxy_horizontalLayout.addWidget(self.detect_proxy_pushButton) proxy_verticalLayout.addLayout(proxy_horizontalLayout) self.proxy_frame = QFrame(self.proxy_tab) self.proxy_frame.setFrameShape(QFrame.StyledPanel) self.proxy_frame.setFrameShadow(QFrame.Raised) gridLayout = QGridLayout(self.proxy_frame) self.ip_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.ip_label, 0, 0, 1, 1) self.ip_lineEdit = QLineEdit(self.proxy_frame) self.ip_lineEdit.setInputMethodHints(QtCore.Qt.ImhNone) gridLayout.addWidget(self.ip_lineEdit, 0, 1, 1, 1) self.port_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.port_label, 0, 2, 1, 1) self.port_spinBox = QSpinBox(self.proxy_frame) self.port_spinBox.setMaximum(65535) self.port_spinBox.setSingleStep(1) gridLayout.addWidget(self.port_spinBox, 0, 3, 1, 1) self.proxy_user_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.proxy_user_label, 2, 0, 1, 1) self.proxy_user_lineEdit = QLineEdit(self.proxy_frame) gridLayout.addWidget(self.proxy_user_lineEdit, 2, 1, 1, 1) self.proxy_pass_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.proxy_pass_label, 2, 2, 1, 1) self.proxy_pass_lineEdit = QLineEdit(self.proxy_frame) self.proxy_pass_lineEdit.setEchoMode(QLineEdit.Password) gridLayout.addWidget(self.proxy_pass_lineEdit, 2, 3, 1, 1) proxy_verticalLayout.addWidget(self.proxy_frame) # type of proxy self.http_radioButton = QRadioButton(self.proxy_frame) gridLayout.addWidget(self.http_radioButton, 4, 0, 1, 1) self.https_radioButton = QRadioButton(self.proxy_frame) gridLayout.addWidget(self.https_radioButton, 5, 0, 1, 1) # hide this widget until https support self.https_radioButton.hide() self.socks5_radioButton = QRadioButton(self.proxy_frame) gridLayout.addWidget(self.socks5_radioButton, 6, 0, 1, 1) proxy_verticalLayout.addStretch(1) self.add_link_tabWidget.addTab(self.proxy_tab, '') # more options tab self.more_options_tab = QWidget(self) more_options_tab_verticalLayout = QVBoxLayout(self.more_options_tab) # download Username & Password -> download_horizontalLayout = QHBoxLayout() download_horizontalLayout.setContentsMargins(-1, 10, -1, -1) download_verticalLayout = QVBoxLayout() self.download_checkBox = QCheckBox(self.more_options_tab) download_verticalLayout.addWidget(self.download_checkBox) self.download_frame = QFrame(self.more_options_tab) self.download_frame.setFrameShape(QFrame.StyledPanel) self.download_frame.setFrameShadow(QFrame.Raised) gridLayout_2 = QGridLayout(self.download_frame) self.download_user_lineEdit = QLineEdit(self.download_frame) gridLayout_2.addWidget(self.download_user_lineEdit, 0, 1, 1, 1) self.download_user_label = QLabel(self.download_frame) gridLayout_2.addWidget(self.download_user_label, 0, 0, 1, 1) self.download_pass_label = QLabel(self.download_frame) gridLayout_2.addWidget(self.download_pass_label, 1, 0, 1, 1) self.download_pass_lineEdit = QLineEdit(self.download_frame) self.download_pass_lineEdit.setEchoMode(QLineEdit.Password) gridLayout_2.addWidget(self.download_pass_lineEdit, 1, 1, 1, 1) download_verticalLayout.addWidget(self.download_frame) download_horizontalLayout.addLayout(download_verticalLayout) # select folder -> self.folder_frame = QFrame(self.more_options_tab) self.folder_frame.setFrameShape(QFrame.StyledPanel) self.folder_frame.setFrameShadow(QFrame.Raised) gridLayout_3 = QGridLayout(self.folder_frame) self.download_folder_lineEdit = QLineEdit(self.folder_frame) gridLayout_3.addWidget(self.download_folder_lineEdit, 2, 0, 1, 1) self.folder_pushButton = QPushButton(self.folder_frame) gridLayout_3.addWidget(self.folder_pushButton, 3, 0, 1, 1) self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.folder_checkBox = QCheckBox(self.folder_frame) gridLayout_3.addWidget(self.folder_checkBox) self.folder_label = QLabel(self.folder_frame) self.folder_label.setAlignment(QtCore.Qt.AlignCenter) gridLayout_3.addWidget(self.folder_label, 1, 0, 1, 1) download_horizontalLayout.addWidget(self.folder_frame) more_options_tab_verticalLayout.addLayout(download_horizontalLayout) # start time -> time_limit_horizontalLayout = QHBoxLayout() time_limit_horizontalLayout.setContentsMargins(-1, 10, -1, -1) start_verticalLayout = QVBoxLayout() self.start_checkBox = QCheckBox(self.more_options_tab) start_verticalLayout.addWidget(self.start_checkBox) self.start_frame = QFrame(self.more_options_tab) self.start_frame.setFrameShape(QFrame.StyledPanel) self.start_frame.setFrameShadow(QFrame.Raised) horizontalLayout_5 = QHBoxLayout(self.start_frame) self.start_time_qDataTimeEdit = MyQDateTimeEdit(self.start_frame) self.start_time_qDataTimeEdit.setDisplayFormat('H:mm') horizontalLayout_5.addWidget(self.start_time_qDataTimeEdit) start_verticalLayout.addWidget(self.start_frame) time_limit_horizontalLayout.addLayout(start_verticalLayout) # end time -> end_verticalLayout = QVBoxLayout() self.end_checkBox = QCheckBox(self.more_options_tab) end_verticalLayout.addWidget(self.end_checkBox) self.end_frame = QFrame(self.more_options_tab) self.end_frame.setFrameShape(QFrame.StyledPanel) self.end_frame.setFrameShadow(QFrame.Raised) horizontalLayout_6 = QHBoxLayout(self.end_frame) self.end_time_qDateTimeEdit = MyQDateTimeEdit(self.end_frame) self.end_time_qDateTimeEdit.setDisplayFormat('H:mm') horizontalLayout_6.addWidget(self.end_time_qDateTimeEdit) end_verticalLayout.addWidget(self.end_frame) time_limit_horizontalLayout.addLayout(end_verticalLayout) # limit Speed -> limit_verticalLayout = QVBoxLayout() self.limit_checkBox = QCheckBox(self.more_options_tab) limit_verticalLayout.addWidget(self.limit_checkBox) self.limit_frame = QFrame(self.more_options_tab) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) horizontalLayout_4 = QHBoxLayout(self.limit_frame) self.limit_spinBox = QDoubleSpinBox(self.limit_frame) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) horizontalLayout_4.addWidget(self.limit_spinBox) self.limit_comboBox = QComboBox(self.limit_frame) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") horizontalLayout_4.addWidget(self.limit_comboBox) limit_verticalLayout.addWidget(self.limit_frame) time_limit_horizontalLayout.addLayout(limit_verticalLayout) more_options_tab_verticalLayout.addLayout(time_limit_horizontalLayout) # number of connections -> connections_horizontalLayout = QHBoxLayout() connections_horizontalLayout.setContentsMargins(-1, 10, -1, -1) self.connections_frame = QFrame(self.more_options_tab) self.connections_frame.setFrameShape(QFrame.StyledPanel) self.connections_frame.setFrameShadow(QFrame.Raised) horizontalLayout_3 = QHBoxLayout(self.connections_frame) self.connections_label = QLabel(self.connections_frame) horizontalLayout_3.addWidget(self.connections_label) self.connections_spinBox = QSpinBox(self.connections_frame) self.connections_spinBox.setMinimum(1) self.connections_spinBox.setMaximum(16) self.connections_spinBox.setProperty("value", 16) horizontalLayout_3.addWidget(self.connections_spinBox) connections_horizontalLayout.addWidget(self.connections_frame) connections_horizontalLayout.addStretch(1) more_options_tab_verticalLayout.addLayout(connections_horizontalLayout) more_options_tab_verticalLayout.addStretch(1) self.add_link_tabWidget.addTab(self.more_options_tab, '') # advance options self.advance_options_tab = QWidget(self) advance_options_tab_verticalLayout = QVBoxLayout(self.advance_options_tab) # referer referer_horizontalLayout = QHBoxLayout() self.referer_label = QLabel(self.advance_options_tab) referer_horizontalLayout.addWidget(self.referer_label) self.referer_lineEdit = QLineEdit(self.advance_options_tab) referer_horizontalLayout.addWidget(self.referer_lineEdit) advance_options_tab_verticalLayout.addLayout(referer_horizontalLayout) # header header_horizontalLayout = QHBoxLayout() self.header_label = QLabel(self.advance_options_tab) header_horizontalLayout.addWidget(self.header_label) self.header_lineEdit = QLineEdit(self.advance_options_tab) header_horizontalLayout.addWidget(self.header_lineEdit) advance_options_tab_verticalLayout.addLayout(header_horizontalLayout) # user_agent user_agent_horizontalLayout = QHBoxLayout() self.user_agent_label = QLabel(self.advance_options_tab) user_agent_horizontalLayout.addWidget(self.user_agent_label) self.user_agent_lineEdit = QLineEdit(self.advance_options_tab) user_agent_horizontalLayout.addWidget(self.user_agent_lineEdit) advance_options_tab_verticalLayout.addLayout(user_agent_horizontalLayout) # load_cookies load_cookies_horizontalLayout = QHBoxLayout() self.load_cookies_label = QLabel(self.advance_options_tab) load_cookies_horizontalLayout.addWidget(self.load_cookies_label) self.load_cookies_lineEdit = QLineEdit(self.advance_options_tab) load_cookies_horizontalLayout.addWidget(self.load_cookies_lineEdit) advance_options_tab_verticalLayout.addLayout(load_cookies_horizontalLayout) advance_options_tab_verticalLayout.addStretch(1) self.add_link_tabWidget.addTab(self.advance_options_tab, '') # ok cancel download_later buttons -> buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) self.download_later_pushButton = QPushButton(self) self.download_later_pushButton.setIcon(QIcon(icons + 'stop')) self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.download_later_pushButton) buttons_horizontalLayout.addWidget(self.cancel_pushButton) buttons_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) self.setLayout(window_verticalLayout) # labels -> self.setWindowTitle(QCoreApplication.translate("addlink_ui_tr", "Add Download Link")) self.link_label.setText(QCoreApplication.translate("addlink_ui_tr", "Download link: ")) self.add_queue_label.setText(QCoreApplication.translate("addlink_ui_tr", "Add to category: ")) self.change_name_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Change file name: ")) self.detect_proxy_pushButton.setText(QCoreApplication.translate("addlink_ui_tr", "Detect System Proxy Settings")) self.proxy_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Proxy")) self.proxy_pass_label.setText(QCoreApplication.translate("addlink_ui_tr", "Proxy password: ")) self.ip_label.setText(QCoreApplication.translate("addlink_ui_tr", "IP: ")) self.proxy_user_label.setText(QCoreApplication.translate("addlink_ui_tr", "Proxy username: ")) self.port_label.setText(QCoreApplication.translate("addlink_ui_tr", "Port:")) self.http_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "HTTP")) self.https_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "HTTPS")) self.socks5_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "SOCKS5")) self.download_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Download username and password")) self.download_user_label.setText(QCoreApplication.translate("addlink_ui_tr", "Download username: ")) self.download_pass_label.setText(QCoreApplication.translate("addlink_ui_tr", "Download password: ")) self.folder_pushButton.setText(QCoreApplication.translate("addlink_ui_tr", "Change Download Folder")) self.folder_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Remember this path")) self.folder_label.setText(QCoreApplication.translate("addlink_ui_tr", "Download Folder: ")) self.start_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Start time")) self.end_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "End time")) self.limit_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Limit speed")) self.limit_comboBox.setItemText(0, "KiB/s") self.limit_comboBox.setItemText(1, "MiB/s") self.connections_label.setText(QCoreApplication.translate("addlink_ui_tr", "Number of connections:")) self.cancel_pushButton.setText(QCoreApplication.translate("addlink_ui_tr", "Cancel")) self.ok_pushButton.setText(QCoreApplication.translate("addlink_ui_tr", "OK")) self.download_later_pushButton.setText(QCoreApplication.translate("addlink_ui_tr", "Download Later")) self.add_link_tabWidget.setTabText(self.add_link_tabWidget.indexOf( self.link_tab), QCoreApplication.translate("addlink_ui_tr", "Link")) self.add_link_tabWidget.setTabText(self.add_link_tabWidget.indexOf( self.proxy_tab), QCoreApplication.translate("addlink_ui_tr", "Proxy")) self.add_link_tabWidget.setTabText(self.add_link_tabWidget.indexOf( self.more_options_tab), QCoreApplication.translate("addlink_ui_tr", "More Options")) self.add_link_tabWidget.setTabText(self.add_link_tabWidget.indexOf( self.advance_options_tab), QCoreApplication.translate("addlink_ui_tr", "Advanced Options")) self.referer_label.setText(QCoreApplication.translate("addlink_ui_tr", 'Referrer: ')) self.header_label.setText(QCoreApplication.translate("addlink_ui_tr", 'Header: ')) self.load_cookies_label.setText(QCoreApplication.translate("addlink_ui_tr", 'Load cookies: ')) self.user_agent_label.setText(QCoreApplication.translate("addlink_ui_tr", 'User agent: ')) persepolisdm-persepolis-867ee76/persepolis/gui/after_download_ui.py000066400000000000000000000116741464161131600260040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtWidgets import QCheckBox, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QCheckBox, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon from persepolis.gui import resources class AfterDownloadWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) icons = ':/' + str(self.persepolis_setting.value('settings/icons')) + '/' self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.setWindowTitle(QCoreApplication.translate("after_download_ui_tr", "Persepolis Download Manager")) # complete_label window_verticalLayout = QVBoxLayout() window_verticalLayout.setContentsMargins(21, 21, 21, 21) self.complete_label = QLabel() window_verticalLayout.addWidget(self.complete_label) # file_name_label self.file_name_label = QLabel() window_verticalLayout.addWidget(self.file_name_label) # size_label self.size_label = QLabel() window_verticalLayout.addWidget(self.size_label) # link self.link_label = QLabel() window_verticalLayout.addWidget(self.link_label) self.link_lineEdit = QLineEdit() window_verticalLayout.addWidget(self.link_lineEdit) # save_as self.save_as_label = QLabel() window_verticalLayout.addWidget(self.save_as_label) self.save_as_lineEdit = QLineEdit() window_verticalLayout.addWidget(self.save_as_lineEdit) # open_pushButtun button_horizontalLayout = QHBoxLayout() button_horizontalLayout.setContentsMargins(10, 10, 10, 10) button_horizontalLayout.addStretch(1) self.open_pushButtun = QPushButton() self.open_pushButtun.setIcon(QIcon(icons + 'file')) button_horizontalLayout.addWidget(self.open_pushButtun) # open_folder_pushButtun self.open_folder_pushButtun = QPushButton() self.open_folder_pushButtun.setIcon(QIcon(icons + 'folder')) button_horizontalLayout.addWidget(self.open_folder_pushButtun) # ok_pushButton self.ok_pushButton = QPushButton() self.ok_pushButton.setIcon(QIcon(icons + 'ok')) button_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(button_horizontalLayout) # dont_show_checkBox self.dont_show_checkBox = QCheckBox() window_verticalLayout.addWidget(self.dont_show_checkBox) window_verticalLayout.addStretch(1) self.setLayout(window_verticalLayout) # labels self.open_pushButtun.setText(QCoreApplication.translate("after_download_ui_tr", " Open File ")) self.open_folder_pushButtun.setText(QCoreApplication.translate("after_download_ui_tr", "Open Download Folder")) self.ok_pushButton.setText(QCoreApplication.translate("after_download_ui_tr", " OK ")) self.dont_show_checkBox.setText(QCoreApplication.translate( "after_download_ui_tr", "Don't show this message again.")) self.complete_label.setText(QCoreApplication.translate("after_download_ui_tr", "Download Completed!")) self.save_as_label.setText(QCoreApplication.translate("after_download_ui_tr", "Save as: ")) self.link_label.setText(QCoreApplication.translate("after_download_ui_tr", "Link: ")) persepolisdm-persepolis-867ee76/persepolis/gui/customized_widgets.py000066400000000000000000000024441464161131600262260ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtWidgets import QDateTimeEdit from PySide6.QtCore import QSettings, Qt except: from PyQt5.QtWidgets import QDateTimeEdit from PyQt5.QtCore import QSettings, Qt # import persepolis_setting persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') # check ui_direction RTL or LTR ui_direction = persepolis_setting.value('ui_direction') class MyQDateTimeEdit(QDateTimeEdit): def __init__(self, parent=None): super().__init__(parent) # change ui direction from rtl to ltr if ui_direction == 'rtl': self.setLayoutDirection(Qt.LeftToRight) persepolisdm-persepolis-867ee76/persepolis/gui/log_window_ui.py000066400000000000000000000101261464161131600251530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # try: from PySide6.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QHBoxLayout, QPushButton from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon from PySide6 import QtCore except: from PyQt5.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QHBoxLayout, QPushButton from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon from PyQt5 import QtCore from persepolis.gui import resources class LogWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' # finding windows_size self.setMinimumSize(QtCore.QSize(620, 300)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) verticalLayout = QVBoxLayout(self) horizontalLayout = QHBoxLayout() horizontalLayout.addStretch(1) # text_edit self.text_edit = QTextEdit(self) self.text_edit.setReadOnly(True) verticalLayout.addWidget(self.text_edit) # clear_log_pushButton self.clear_log_pushButton = QPushButton(self) horizontalLayout.addWidget(self.clear_log_pushButton) # refresh_log_pushButton self.refresh_log_pushButton = QPushButton(self) self.refresh_log_pushButton.setIcon(QIcon(icons + 'refresh')) horizontalLayout.addWidget(self.refresh_log_pushButton) # report_pushButton self.report_pushButton = QPushButton(self) self.report_pushButton.setIcon(QIcon(icons + 'about')) horizontalLayout.addWidget(self.report_pushButton) self.copy_log_pushButton = QPushButton(self) # copy_log_pushButton self.copy_log_pushButton.setIcon(QIcon(icons + 'clipboard')) horizontalLayout.addWidget(self.copy_log_pushButton) # close_pushButton self.close_pushButton = QPushButton(self) self.close_pushButton.setIcon(QIcon(icons + 'remove')) horizontalLayout.addWidget(self.close_pushButton) verticalLayout.addLayout(horizontalLayout) # set labels self.setWindowTitle(QCoreApplication.translate("log_window_ui_tr", 'Persepolis Log')) self.close_pushButton.setText(QCoreApplication.translate("log_window_ui_tr", 'Close')) self.copy_log_pushButton.setText(QCoreApplication.translate("log_window_ui_tr", 'Copy Selected to Clipboard')) self.report_pushButton.setText(QCoreApplication.translate("log_window_ui_tr", "Report Issue")) self.refresh_log_pushButton.setText(QCoreApplication.translate("log_window_ui_tr", 'Refresh Log Messages')) self.clear_log_pushButton.setText(QCoreApplication.translate("log_window_ui_tr", 'Clear Log Messages')) persepolisdm-persepolis-867ee76/persepolis/gui/mainwindow_ui.py000066400000000000000000001107431464161131600251650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtWidgets import QHeaderView, QDoubleSpinBox, QPushButton, QComboBox, QMenu, QTreeView, QSplitter, QHBoxLayout, QVBoxLayout, QTableWidgetItem, QAbstractItemView, QToolBar, QMenuBar, QStatusBar, QTableWidget, QMainWindow, QWidget, QFrame, QCheckBox, QLabel from PySide6.QtGui import QShortcut, QAction, QCursor, QIcon, QStandardItemModel from PySide6.QtCore import QCoreApplication, QRect, Qt, QTranslator, QLocale except: from PyQt5.QtWidgets import QHeaderView, QShortcut, QDoubleSpinBox, QPushButton, QComboBox, QTreeView, QSplitter, QHBoxLayout, QVBoxLayout, QMenu, QTableWidgetItem, QAbstractItemView, QToolBar, QMenuBar, QStatusBar, QTableWidget, QAction, QMainWindow, QWidget, QFrame, QCheckBox, QLabel from PyQt5.QtGui import QCursor, QIcon, QStandardItemModel from PyQt5.QtCore import QCoreApplication, QRect, Qt, QTranslator, QLocale from persepolis.gui import resources from persepolis.gui.customized_widgets import MyQDateTimeEdit # align center for items in download table class QTableWidgetItem(QTableWidgetItem): def __init__(self, input): super().__init__(input) self.setTextAlignment(0x0004 | 0x0080) class MenuWidget(QPushButton): def __init__(self, parent): super().__init__() self.parent = parent icons = ':/' + \ str(self.parent.persepolis_setting.value('settings/icons')) + '/' # add support for other languages locale = str(self.parent.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.parent.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) # creating context menu self.menubar = QMenu(self) self.setMenu(self.menubar) self.setIcon(QIcon(icons + 'menu')) self.setStyleSheet("""QPushButton{border: none; background-color: transparent; padding: 0px}""") fileMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'File')) editMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Edit')) viewMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'View')) downloadMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Download')) queueMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Queue')) videoFinderMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Video Finder')) helpMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Help')) sortMenu = viewMenu.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Sort by')) videoFinderMenu.addAction(self.parent.videoFinderAddLinkAction) downloadMenu.addAction(self.parent.stopAllAction) sortMenu.addAction(self.parent.sort_file_name_Action) sortMenu.addAction(self.parent.sort_file_size_Action) sortMenu.addAction(self.parent.sort_first_try_date_Action) sortMenu.addAction(self.parent.sort_last_try_date_Action) sortMenu.addAction(self.parent.sort_download_status_Action) viewMenu.addAction(self.parent.trayAction) viewMenu.addAction(self.parent.showMenuBarAction) viewMenu.addAction(self.parent.showSidePanelAction) viewMenu.addAction(self.parent.minimizeAction) fileMenu.addAction(self.parent.addlinkAction) fileMenu.addAction(self.parent.addtextfileAction) fileMenu.addAction(self.parent.addFromClipboardAction) downloadMenu.addAction(self.parent.resumeAction) downloadMenu.addAction(self.parent.pauseAction) downloadMenu.addAction(self.parent.stopAction) downloadMenu.addAction(self.parent.propertiesAction) downloadMenu.addAction(self.parent.progressAction) fileMenu.addAction(self.parent.openFileAction) fileMenu.addAction(self.parent.openDownloadFolderAction) fileMenu.addAction(self.parent.openDefaultDownloadFolderAction) fileMenu.addAction(self.parent.exitAction) editMenu.addAction(self.parent.clearAction) editMenu.addAction(self.parent.removeSelectedAction) editMenu.addAction(self.parent.deleteSelectedAction) queueMenu.addAction(self.parent.createQueueAction) queueMenu.addAction(self.parent.removeQueueAction) queueMenu.addAction(self.parent.startQueueAction) queueMenu.addAction(self.parent.stopQueueAction) queueMenu.addAction(self.parent.moveUpSelectedAction) queueMenu.addAction(self.parent.moveDownSelectedAction) editMenu.addAction(self.parent.preferencesAction) helpMenu.addAction(self.parent.aboutAction) helpMenu.addAction(self.parent.issueAction) helpMenu.addAction(self.parent.logAction) helpMenu.addAction(self.parent.helpAction) # viewMenu submenus # DownloadTableWidget Class adds QMenu to QTableWidget Class class DownloadTableWidget(QTableWidget): def __init__(self, parent): super().__init__() # set ui direction ui_direction = parent.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) # creating context menu self.tablewidget_menu = QMenu(self) self.sendMenu = self.tablewidget_menu.addMenu('') # don't wrap items self.setWordWrap(False) def contextMenuEvent(self, event): self.tablewidget_menu.popup(QCursor.pos()) # CategoryTreeView Class adds QMenu to QTreeView class CategoryTreeView(QTreeView): def __init__(self, parent): super().__init__() # set ui direction ui_direction = parent.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) # creating context menu self.category_tree_menu = QMenu(self) # connecting activation event self.activated.connect(parent.categoryTreeSelected) self.pressed.connect(parent.categoryTreeSelected) def contextMenuEvent(self, event): self.category_tree_menu.popup(QCursor.pos()) class MainWindow_Ui(QMainWindow): def __init__(self, persepolis_setting): super().__init__() # MainWindow self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", "Persepolis Download Manager")) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.centralwidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.centralwidget) # enable drag and drop self.setAcceptDrops(True) # frame self.frame = QFrame(self.centralwidget) # download_table_horizontalLayout download_table_horizontalLayout = QHBoxLayout() horizontal_splitter = QSplitter(Qt.Horizontal) vertical_splitter = QSplitter(Qt.Vertical) # category_tree self.category_tree_qwidget = QWidget(self) category_tree_verticalLayout = QVBoxLayout() self.category_tree = CategoryTreeView(self) category_tree_verticalLayout.addWidget(self.category_tree) self.category_tree_model = QStandardItemModel() self.category_tree.setModel(self.category_tree_model) category_table_header = [QCoreApplication.translate("mainwindow_ui_tr", 'Category')] self.category_tree_model.setHorizontalHeaderLabels( category_table_header) self.category_tree.header().setStretchLastSection(True) self.category_tree.header().setDefaultAlignment(Qt.AlignCenter) # queue_panel self.queue_panel_widget = QWidget(self) queue_panel_verticalLayout_main = QVBoxLayout(self.queue_panel_widget) # queue_panel_show_button self.queue_panel_show_button = QPushButton(self) queue_panel_verticalLayout_main.addWidget(self.queue_panel_show_button) # queue_panel_widget_frame self.queue_panel_widget_frame = QFrame(self) self.queue_panel_widget_frame.setFrameShape(QFrame.StyledPanel) self.queue_panel_widget_frame.setFrameShadow(QFrame.Raised) queue_panel_verticalLayout_main.addWidget( self.queue_panel_widget_frame) queue_panel_verticalLayout = QVBoxLayout(self.queue_panel_widget_frame) queue_panel_verticalLayout_main.setContentsMargins(50, -1, 50, -1) # start_end_frame self.start_end_frame = QFrame(self) # start time start_verticalLayout = QVBoxLayout(self.start_end_frame) self.start_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.start_checkBox) self.start_frame = QFrame(self) self.start_frame.setFrameShape(QFrame.StyledPanel) self.start_frame.setFrameShadow(QFrame.Raised) start_frame_verticalLayout = QVBoxLayout(self.start_frame) self.start_time_qDataTimeEdit = MyQDateTimeEdit(self.start_frame) self.start_time_qDataTimeEdit.setDisplayFormat('H:mm') start_frame_verticalLayout.addWidget(self.start_time_qDataTimeEdit) start_verticalLayout.addWidget(self.start_frame) # end time self.end_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.end_checkBox) self.end_frame = QFrame(self) self.end_frame.setFrameShape(QFrame.StyledPanel) self.end_frame.setFrameShadow(QFrame.Raised) end_frame_verticalLayout = QVBoxLayout(self.end_frame) self.end_time_qDateTimeEdit = MyQDateTimeEdit(self.end_frame) self.end_time_qDateTimeEdit.setDisplayFormat('H:mm') end_frame_verticalLayout.addWidget(self.end_time_qDateTimeEdit) start_verticalLayout.addWidget(self.end_frame) self.reverse_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.reverse_checkBox) queue_panel_verticalLayout.addWidget(self.start_end_frame) # limit_after_frame self.limit_after_frame = QFrame(self) # limit_checkBox limit_verticalLayout = QVBoxLayout(self.limit_after_frame) self.limit_checkBox = QCheckBox(self) limit_verticalLayout.addWidget(self.limit_checkBox) # limit_frame self.limit_frame = QFrame(self) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) limit_verticalLayout.addWidget(self.limit_frame) limit_frame_verticalLayout = QVBoxLayout(self.limit_frame) # limit_spinBox limit_frame_horizontalLayout = QHBoxLayout() self.limit_spinBox = QDoubleSpinBox(self) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) limit_frame_horizontalLayout.addWidget(self.limit_spinBox) # limit_comboBox self.limit_comboBox = QComboBox(self) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") limit_frame_horizontalLayout.addWidget(self.limit_comboBox) limit_frame_verticalLayout.addLayout(limit_frame_horizontalLayout) # limit_pushButton self.limit_pushButton = QPushButton(self) limit_frame_verticalLayout.addWidget(self.limit_pushButton) # after_checkBox self.after_checkBox = QCheckBox(self) limit_verticalLayout.addWidget(self.after_checkBox) # after_frame self.after_frame = QFrame(self) self.after_frame.setFrameShape(QFrame.StyledPanel) self.after_frame.setFrameShadow(QFrame.Raised) limit_verticalLayout.addWidget(self.after_frame) after_frame_verticalLayout = QVBoxLayout(self.after_frame) # after_comboBox self.after_comboBox = QComboBox(self) self.after_comboBox.addItem("") after_frame_verticalLayout.addWidget(self.after_comboBox) # after_pushButton self.after_pushButton = QPushButton(self) after_frame_verticalLayout.addWidget(self.after_pushButton) queue_panel_verticalLayout.addWidget(self.limit_after_frame) category_tree_verticalLayout.addWidget(self.queue_panel_widget) # keep_awake_checkBox self.keep_awake_checkBox = QCheckBox(self) queue_panel_verticalLayout.addWidget(self.keep_awake_checkBox) self.category_tree_qwidget.setLayout(category_tree_verticalLayout) horizontal_splitter.addWidget(self.category_tree_qwidget) # download table widget self.download_table_content_widget = QWidget(self) download_table_content_widget_verticalLayout = QVBoxLayout( self.download_table_content_widget) # download_table self.download_table = DownloadTableWidget(self) vertical_splitter.addWidget(self.download_table) horizontal_splitter.addWidget(self.download_table_content_widget) self.download_table.setColumnCount(13) self.download_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.download_table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.download_table.verticalHeader().hide() # hide column of GID and column of link. self.download_table.setColumnHidden(8, True) self.download_table.setColumnHidden(9, True) download_table_header = [QCoreApplication.translate("mainwindow_ui_tr", 'File Name'), QCoreApplication.translate("mainwindow_ui_tr", 'Status'), QCoreApplication.translate("mainwindow_ui_tr", 'Size'), QCoreApplication.translate("mainwindow_ui_tr", 'Downloaded'), QCoreApplication.translate("mainwindow_ui_tr", 'Percentage'), QCoreApplication.translate("mainwindow_ui_tr", 'Connections'), QCoreApplication.translate("mainwindow_ui_tr", 'Transfer Rate'), QCoreApplication.translate("mainwindow_ui_tr", 'Estimated Time Left'), 'Gid', QCoreApplication.translate("mainwindow_ui_tr", 'Link'), QCoreApplication.translate("mainwindow_ui_tr", 'First Try Date'), QCoreApplication.translate("mainwindow_ui_tr", 'Last Try Date'), QCoreApplication.translate("mainwindow_ui_tr", 'Category')] self.download_table.setHorizontalHeaderLabels(download_table_header) # fixing the size of download_table when window is Maximized! self.download_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Interactive) self.download_table.horizontalHeader().setStretchLastSection(True) horizontal_splitter.setStretchFactor(0, 3) # category_tree width horizontal_splitter.setStretchFactor(1, 10) # ratio of tables's width # video_finder_widget self.video_finder_widget = QWidget(self) video_finder_horizontalLayout = QHBoxLayout(self.video_finder_widget) self.muxing_pushButton = QPushButton(self) self.muxing_pushButton.setIcon(QIcon(icons + 'video_finder')) video_finder_horizontalLayout.addWidget(self.muxing_pushButton) video_finder_horizontalLayout.addSpacing(20) video_audio_verticalLayout = QVBoxLayout() self.video_label = QLabel(self) video_audio_verticalLayout.addWidget(self.video_label) self.audio_label = QLabel(self) video_audio_verticalLayout.addWidget(self.audio_label) video_finder_horizontalLayout.addLayout(video_audio_verticalLayout) status_muxing_verticalLayout = QVBoxLayout() self.video_finder_status_label = QLabel(self) status_muxing_verticalLayout.addWidget(self.video_finder_status_label) self.muxing_status_label = QLabel(self) status_muxing_verticalLayout.addWidget(self.muxing_status_label) video_finder_horizontalLayout.addLayout(status_muxing_verticalLayout) vertical_splitter.addWidget(self.video_finder_widget) download_table_content_widget_verticalLayout.addWidget(vertical_splitter) download_table_horizontalLayout.addWidget(horizontal_splitter) self.frame.setLayout(download_table_horizontalLayout) self.verticalLayout.addWidget(self.frame) self.setCentralWidget(self.centralwidget) # menubar self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 600, 24)) self.setMenuBar(self.menubar) fileMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&File')) editMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Edit')) viewMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&View')) downloadMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Download')) queueMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Queue')) videoFinderMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'V&ideo Finder')) helpMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Help')) # viewMenu submenus sortMenu = viewMenu.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Sort by')) # statusbar self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.statusbar.showMessage(QCoreApplication.translate("mainwindow_ui_tr", "Persepolis Download Manager")) # toolBar self.toolBar2 = QToolBar(self) self.addToolBar(Qt.TopToolBarArea, self.toolBar2) # self.toolBar2.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", 'Menu')) self.toolBar2.setFloatable(False) self.toolBar2.setMovable(False) self.toolBar = QToolBar(self) self.addToolBar(Qt.TopToolBarArea, self.toolBar) # self.toolBar.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", 'Toolbar')) self.toolBar.setFloatable(False) self.toolBar.setMovable(False) # toolBar and menubar and actions self.persepolis_setting.beginGroup('settings/shortcuts') # videoFinderAddLinkAction self.videoFinderAddLinkAction = QAction(QIcon(icons + 'video_finder'), QCoreApplication.translate("mainwindow_ui_tr", 'Find Video Links...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Download video or audio from Youtube, Vimeo, etc.'), triggered=self.showVideoFinderAddLinkWindow) self.videoFinderAddLinkAction_shortcut = QShortcut(self.persepolis_setting.value( 'video_finder_shortcut'), self, self.showVideoFinderAddLinkWindow) videoFinderMenu.addAction(self.videoFinderAddLinkAction) # stopAllAction self.stopAllAction = QAction(QIcon(icons + 'stop_all'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop All Active Downloads'), self, statusTip='Stop All Active Downloads', triggered=self.stopAllDownloads) downloadMenu.addAction(self.stopAllAction) # sort_file_name_Action self.sort_file_name_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'File Name'), self, triggered=self.sortByName) sortMenu.addAction(self.sort_file_name_Action) # sort_file_size_Action self.sort_file_size_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'File Size'), self, triggered=self.sortBySize) sortMenu.addAction(self.sort_file_size_Action) # sort_first_try_date_Action self.sort_first_try_date_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'First Try Date'), self, triggered=self.sortByFirstTry) sortMenu.addAction(self.sort_first_try_date_Action) # sort_last_try_date_Action self.sort_last_try_date_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Last Try Date'), self, triggered=self.sortByLastTry) sortMenu.addAction(self.sort_last_try_date_Action) # sort_download_status_Action self.sort_download_status_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Download Status'), self, triggered=self.sortByStatus) sortMenu.addAction(self.sort_download_status_Action) # trayAction self.trayAction = QAction(QCoreApplication.translate("mainwindow_ui_tr", 'Show System Tray Icon'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Show/Hide system tray icon"), triggered=self.showTray) self.trayAction.setCheckable(True) viewMenu.addAction(self.trayAction) # showMenuBarAction self.showMenuBarAction = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Show Menubar'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Show Menubar'), triggered=self.showMenuBar) self.showMenuBarAction.setCheckable(True) viewMenu.addAction(self.showMenuBarAction) # showSidePanelAction self.showSidePanelAction = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Show Side Panel'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Show Side Panel'), triggered=self.showSidePanel) self.showSidePanelAction.setCheckable(True) viewMenu.addAction(self.showSidePanelAction) # minimizeAction self.minimizeAction = QAction(QIcon(icons + 'minimize'), QCoreApplication.translate("mainwindow_ui_tr", 'Minimize to System Tray'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Minimize to System Tray"), triggered=self.minMaxTray) self.minimizeAction_shortcut = QShortcut( self.persepolis_setting.value('hide_window_shortcut'), self, self.minMaxTray) viewMenu.addAction(self.minimizeAction) # addlinkAction self.addlinkAction = QAction(QIcon(icons + 'add'), QCoreApplication.translate("mainwindow_ui_tr", 'Add New Download Link...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Add New Download Link"), triggered=self.addLinkButtonPressed) self.addlinkAction_shortcut = QShortcut(self.persepolis_setting.value( 'add_new_download_shortcut'), self, self.addLinkButtonPressed) fileMenu.addAction(self.addlinkAction) # importText self.addtextfileAction = QAction(QIcon(icons + 'file'), QCoreApplication.translate("mainwindow_ui_tr", 'Import Links from Text File...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Create a text file and put links in it, line by line!'), triggered=self.importText) self.addtextfileAction_shortcut = QShortcut( self.persepolis_setting.value('import_text_shortcut'), self, self.importText) fileMenu.addAction(self.addtextfileAction) # importText From Clipboard self.addFromClipboardAction = QAction(QIcon(icons + 'clipboard'), QCoreApplication.translate("mainwindow_ui_tr", 'Import Links from Clipboard...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Import Links From Clipboard'), triggered=self.importLinksFromClipboard) fileMenu.addAction(self.addFromClipboardAction) # resumeAction self.resumeAction = QAction(QIcon(icons + 'play'), QCoreApplication.translate("mainwindow_ui_tr", 'Resume Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Resume Download"), triggered=self.resumeButtonPressed) downloadMenu.addAction(self.resumeAction) # pauseAction self.pauseAction = QAction(QIcon(icons + 'pause'), QCoreApplication.translate("mainwindow_ui_tr", 'Pause Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Pause Download"), triggered=self.pauseButtonPressed) downloadMenu.addAction(self.pauseAction) # stopAction self.stopAction = QAction(QIcon(icons + 'stop'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Stop/Cancel Download"), triggered=self.stopButtonPressed) downloadMenu.addAction(self.stopAction) # propertiesAction self.propertiesAction = QAction(QIcon(icons + 'setting'), QCoreApplication.translate("mainwindow_ui_tr", 'Properties'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Properties"), triggered=self.propertiesButtonPressed) downloadMenu.addAction(self.propertiesAction) # progressAction self.progressAction = QAction(QIcon(icons + 'window'), QCoreApplication.translate("mainwindow_ui_tr", 'Progress'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Progress"), triggered=self.progressButtonPressed) downloadMenu.addAction(self.progressAction) # openFileAction self.openFileAction = QAction(QIcon( icons + 'file'), QCoreApplication.translate("mainwindow_ui_tr", 'Open File...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open File...'), triggered=self.openFile) fileMenu.addAction(self.openFileAction) # openDownloadFolderAction self.openDownloadFolderAction = QAction(QIcon( icons + 'folder'), QCoreApplication.translate("mainwindow_ui_tr", 'Open Download Folder'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open Download Folder'), triggered=self.openDownloadFolder) fileMenu.addAction(self.openDownloadFolderAction) # openDefaultDownloadFolderAction self.openDefaultDownloadFolderAction = QAction(QIcon( icons + 'folder'), QCoreApplication.translate("mainwindow_ui_tr", 'Open Default Download Folder'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open Default Download Folder'), triggered=self.openDefaultDownloadFolder) fileMenu.addAction(self.openDefaultDownloadFolderAction) # exitAction self.exitAction = QAction(QIcon(icons + 'exit'), QCoreApplication.translate("mainwindow_ui_tr", 'Exit'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Exit"), triggered=self.closeAction) self.exitAction_shortcut = QShortcut(self.persepolis_setting.value('quit_shortcut'), self, self.closeAction) fileMenu.addAction(self.exitAction) # clearAction self.clearAction = QAction(QIcon(icons + 'multi_remove'), QCoreApplication.translate("mainwindow_ui_tr", 'Clear Download List'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Clear all items in download list'), triggered=self.clearDownloadList) editMenu.addAction(self.clearAction) # removeSelectedAction self.removeSelectedAction = QAction(QIcon(icons + 'remove'), QCoreApplication.translate("mainwindow_ui_tr", 'Remove Selected Downloads from List'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Remove Selected Downloads from List'), triggered=self.removeSelected) self.removeSelectedAction_shortcut = QShortcut( self.persepolis_setting.value('remove_shortcut'), self, self.removeSelected) editMenu.addAction(self.removeSelectedAction) self.removeSelectedAction.setEnabled(False) # deleteSelectedAction self.deleteSelectedAction = QAction(QIcon(icons + 'trash'), QCoreApplication.translate("mainwindow_ui_tr", 'Delete Selected Download Files'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Delete Selected Download Files'), triggered=self.deleteSelected) self.deleteSelectedAction_shortcut = QShortcut( self.persepolis_setting.value('delete_shortcut'), self, self.deleteSelected) editMenu.addAction(self.deleteSelectedAction) self.deleteSelectedAction.setEnabled(False) # moveSelectedDownloadsAction self.moveSelectedDownloadsAction = QAction(QIcon(icons + 'folder'), QCoreApplication.translate("mainwindow_ui_tr", 'Move Selected Download Files to Another Folder...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Move Selected Download Files to Another Folder'), triggered=self.moveSelectedDownloads) editMenu.addAction(self.moveSelectedDownloadsAction) self.moveSelectedDownloadsAction.setEnabled(False) # createQueueAction self.createQueueAction = QAction(QIcon(icons + 'add_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Create New Queue...'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Create new download queue'), triggered=self.createQueue) queueMenu.addAction(self.createQueueAction) # removeQueueAction self.removeQueueAction = QAction(QIcon(icons + 'remove_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Remove Queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Remove this queue'), triggered=self.removeQueue) queueMenu.addAction(self.removeQueueAction) # startQueueAction self.startQueueAction = QAction(QIcon( icons + 'start_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Start this queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Start Queue'), triggered=self.startQueue) queueMenu.addAction(self.startQueueAction) # stopQueueAction self.stopQueueAction = QAction(QIcon( icons + 'stop_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop this queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Stop Queue'), triggered=self.stopQueue) queueMenu.addAction(self.stopQueueAction) # moveUpSelectedAction self.moveUpSelectedAction = QAction(QIcon(icons + 'multi_up'), QCoreApplication.translate("mainwindow_ui_tr", 'Move Selected Items Up'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Move currently selected items up by one row'), triggered=self.moveUpSelected) self.moveUpSelectedAction_shortcut = QShortcut(self.persepolis_setting.value( 'move_up_selection_shortcut'), self, self.moveUpSelected) queueMenu.addAction(self.moveUpSelectedAction) # moveDownSelectedAction self.moveDownSelectedAction = QAction(QIcon(icons + 'multi_down'), QCoreApplication.translate("mainwindow_ui_tr", 'Move Selected Items Down'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Move currently selected items down by one row'), triggered=self.moveDownSelected) self.moveDownSelectedAction_shortcut = QShortcut(self.persepolis_setting.value( 'move_down_selection_shortcut'), self, self.moveDownSelected) queueMenu.addAction(self.moveDownSelectedAction) # preferencesAction self.preferencesAction = QAction(QIcon(icons + 'preferences'), QCoreApplication.translate("mainwindow_ui_tr", 'Preferences'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Preferences'), triggered=self.openPreferences, menuRole=QAction.MenuRole.PreferencesRole) editMenu.addAction(self.preferencesAction) # aboutAction self.aboutAction = QAction(QIcon( icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'About'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'About'), triggered=self.openAbout, menuRole=QAction.MenuRole.AboutRole) helpMenu.addAction(self.aboutAction) # issueAction self.issueAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Report an Issue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Report an issue'), triggered=self.reportIssue) helpMenu.addAction(self.issueAction) # logAction self.logAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Show Log File'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'), triggered=self.showLog) helpMenu.addAction(self.logAction) # helpAction self.helpAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Help'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'), triggered=self.persepolisHelp) helpMenu.addAction(self.helpAction) self.persepolis_setting.endGroup() self.qmenu = MenuWidget(self) self.toolBar2.addWidget(self.qmenu) # labels self.queue_panel_show_button.setText(QCoreApplication.translate("mainwindow_ui_tr", "Hide Options")) self.start_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Start Time")) self.end_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "End Time")) self.reverse_checkBox.setText(QCoreApplication.translate( "mainwindow_ui_tr", "Download bottom of\n the list first")) self.limit_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Limit Speed")) self.limit_comboBox.setItemText(0, "KiB/s") self.limit_comboBox.setItemText(1, "MiB/s") self.limit_pushButton.setText(QCoreApplication.translate("mainwindow_ui_tr", "Apply")) self.after_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "After download")) self.after_comboBox.setItemText(0, QCoreApplication.translate("mainwindow_ui_tr", "Shut Down")) self.keep_awake_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Keep System Awake!")) self.keep_awake_checkBox.setToolTip( QCoreApplication.translate("mainwindow_ui_tr", "

This option will prevent the system from going to sleep.\ It is necessary if your power manager is suspending the system automatically.

")) self.after_pushButton.setText(QCoreApplication.translate("mainwindow_ui_tr", "Apply")) self.muxing_pushButton.setText(QCoreApplication.translate("mainwindow_ui_tr", "Start Mixing")) self.video_label.setText(QCoreApplication.translate("mainwindow_ui_tr", "Video File Status: ")) self.audio_label.setText(QCoreApplication.translate("mainwindow_ui_tr", "Audio File Status: ")) self.video_finder_status_label.setText(QCoreApplication.translate("mainwindow_ui_tr", "Status: ")) self.muxing_status_label.setText(QCoreApplication.translate("mainwindow_ui_tr", "Mixing status: ")) persepolisdm-persepolis-867ee76/persepolis/gui/palettes.py000066400000000000000000000067201464161131600241340ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtGui import QPalette, QColor from PySide6.QtCore import Qt except: from PyQt5.QtGui import QPalette, QColor from PyQt5.QtCore import Qt class DarkFusionPalette(QPalette): def __init__(self): super().__init__() self.setColor(QPalette.Window, QColor(56, 56, 56)) self.setColor(QPalette.WindowText, Qt.white) self.setColor(QPalette.Base, QColor(56, 56, 56)) self.setColor(QPalette.AlternateBase, QColor(63, 63, 63)) self.setColor(QPalette.ToolTipBase, Qt.white) self.setColor(QPalette.ToolTipText, Qt.white) self.setColor(QPalette.Text, Qt.white) self.setColor(QPalette.Button, QColor(56, 56, 56)) self.setColor(QPalette.ButtonText, Qt.white) self.setColor(QPalette.BrightText, QColor(192, 24, 91)) self.setColor(QPalette.Link, QColor(42, 130, 218)) self.setColor(QPalette.Highlight, QColor(192, 24, 91)) self.setColor(QPalette.HighlightedText, Qt.white) self.setColor(QPalette.Disabled, QPalette.Window, QColor(51, 51, 51)) self.setColor(QPalette.Disabled, QPalette.ButtonText, QColor(111, 111, 111)) self.setColor(QPalette.Disabled, QPalette.Text, QColor(122, 118, 113)) self.setColor(QPalette.Disabled, QPalette.WindowText, QColor(122, 118, 113)) self.setColor(QPalette.Disabled, QPalette.Base, QColor(32, 32, 32)) class LightFusionPalette(QPalette): def __init__(self): super().__init__() # EFF0F1 self.setColor(QPalette.Window, QColor(239, 240, 241)) self.setColor(QPalette.WindowText, QColor(49, 54, 59)) self.setColor(QPalette.Base, QColor(239, 240, 241)) self.setColor(QPalette.AlternateBase, QColor(63, 63, 63)) self.setColor(QPalette.ToolTipBase, QColor(49, 54, 59)) self.setColor(QPalette.ToolTipText, QColor(49, 54, 59)) self.setColor(QPalette.Text, QColor(49, 54, 59)) self.setColor(QPalette.Button, QColor(239, 240, 241)) self.setColor(QPalette.ButtonText, QColor(49, 54, 59)) self.setColor(QPalette.BrightText, QColor(233, 30, 99)) self.setColor(QPalette.Link, QColor(42, 130, 218)) self.setColor(QPalette.Highlight, QColor(233, 30, 99)) self.setColor(QPalette.HighlightedText, Qt.white) self.setColor(QPalette.Disabled, QPalette.Window, QColor(227, 227, 227)) self.setColor(QPalette.Disabled, QPalette.ButtonText, QColor(111, 111, 111)) self.setColor(QPalette.Disabled, QPalette.Text, QColor(111, 111, 111)) self.setColor(QPalette.Disabled, QPalette.WindowText, QColor(111, 111, 111)) self.setColor(QPalette.Disabled, QPalette.Base, QColor(227, 227, 227)) persepolisdm-persepolis-867ee76/persepolis/gui/progress_ui.py000066400000000000000000000221051464161131600246470ustar00rootroot00000000000000 # -*- coding: utf-8 -*- # 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 . try: from PySide6.QtWidgets import QCheckBox, QProgressBar, QFrame, QDoubleSpinBox, QComboBox, QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale, QSize from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QCheckBox, QProgressBar, QFrame, QDoubleSpinBox, QComboBox, QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale, QSize from PyQt5.QtGui import QIcon from persepolis.gui import resources class ProgressWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting icons = ':/' + str(persepolis_setting.value('settings/icons')) + '/' # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) # window self.setMinimumSize(QSize(595, 284)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.setWindowTitle(QCoreApplication.translate("progress_ui_tr", "Persepolis Download Manager")) verticalLayout = QVBoxLayout(self) # progress_tabWidget self.progress_tabWidget = QTabWidget(self) # information_tab self.information_tab = QWidget() information_verticalLayout = QVBoxLayout(self.information_tab) # link_label self.link_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.link_label) # status_label self.status_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.status_label) # downloaded_label self.downloaded_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.downloaded_label) # rate_label self.rate_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.rate_label) # time_label self.time_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.time_label) # connections_label self.connections_label = QLabel(self.information_tab) information_verticalLayout.addWidget(self.connections_label) information_verticalLayout.addStretch(1) # add information_tab to progress_tabWidget self.progress_tabWidget.addTab(self.information_tab, "") # options_tab self.options_tab = QWidget() options_tab_verticalLayout = QVBoxLayout(self.options_tab) options_tab_horizontalLayout = QHBoxLayout() # options_tab_horizontalLayout.setContentsMargins(11, 11, 11, 11) # limit_checkBox self.limit_checkBox = QCheckBox(self.options_tab) limit_verticalLayout = QVBoxLayout() limit_verticalLayout.addWidget(self.limit_checkBox) # limit_frame self.limit_frame = QFrame(self.options_tab) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) limit_frame_verticalLayout = QVBoxLayout(self.limit_frame) limit_frame_horizontalLayout = QHBoxLayout() # limit_spinBox self.limit_spinBox = QDoubleSpinBox(self.options_tab) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) limit_frame_horizontalLayout.addWidget(self.limit_spinBox) # limit_comboBox self.limit_comboBox = QComboBox(self.options_tab) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") limit_frame_horizontalLayout.addWidget(self.limit_comboBox) # limit_pushButton self.limit_pushButton = QPushButton(self.options_tab) limit_frame_verticalLayout.addLayout(limit_frame_horizontalLayout) limit_frame_verticalLayout.addWidget(self.limit_pushButton) limit_verticalLayout.addWidget(self.limit_frame) limit_verticalLayout.setContentsMargins(11, 11, 11, 11) options_tab_horizontalLayout.addLayout(limit_verticalLayout) options_tab_verticalLayout.addLayout(options_tab_horizontalLayout) options_tab_verticalLayout.addStretch(1) # after_checkBox self.after_checkBox = QCheckBox(self.options_tab) after_verticalLayout = QVBoxLayout() after_verticalLayout.addWidget(self.after_checkBox) # after_frame self.after_frame = QFrame(self.options_tab) self.after_frame.setFrameShape(QFrame.StyledPanel) self.after_frame.setFrameShadow(QFrame.Raised) after_frame_verticalLayout = QVBoxLayout(self.after_frame) # after_comboBox self.after_comboBox = QComboBox(self.options_tab) self.after_comboBox.addItem("") after_frame_verticalLayout.addWidget(self.after_comboBox) # after_pushButton self.after_pushButton = QPushButton(self.options_tab) after_frame_verticalLayout.addWidget(self.after_pushButton) after_verticalLayout.addWidget(self.after_frame) after_verticalLayout.setContentsMargins(11, 11, 11, 11) options_tab_horizontalLayout.addLayout(after_verticalLayout) self.progress_tabWidget.addTab(self.options_tab, "") verticalLayout.addWidget(self.progress_tabWidget) # download_progressBar self.download_progressBar = QProgressBar(self) verticalLayout.addWidget(self.download_progressBar) self.download_progressBar.setTextVisible(False) # buttons button_horizontalLayout = QHBoxLayout() button_horizontalLayout.addStretch(1) # resume_pushButton self.resume_pushButton = QPushButton(self) self.resume_pushButton.setIcon(QIcon(icons + 'play')) button_horizontalLayout.addWidget(self.resume_pushButton) # pause_pushButton self.pause_pushButton = QPushButton(self) self.pause_pushButton.setIcon(QIcon(icons + 'pause')) button_horizontalLayout.addWidget(self.pause_pushButton) # stop_pushButton self.stop_pushButton = QPushButton(self) self.stop_pushButton.setIcon(QIcon(icons + 'stop')) button_horizontalLayout.addWidget(self.stop_pushButton) verticalLayout.addLayout(button_horizontalLayout) self.progress_tabWidget.setCurrentIndex(0) # labels self.link_label.setText(QCoreApplication.translate("progress_ui_tr", "Link: ")) self.status_label.setText(QCoreApplication.translate("progress_ui_tr", "Status: ")) self.downloaded_label.setText(QCoreApplication.translate("progress_ui_tr", "Downloaded:")) self.rate_label.setText(QCoreApplication.translate("progress_ui_tr", "Transfer rate: ")) self.time_label.setText(QCoreApplication.translate("progress_ui_tr", "Estimated time left:")) self.connections_label.setText(QCoreApplication.translate("progress_ui_tr", "Number of connections: ")) self.progress_tabWidget.setTabText(self.progress_tabWidget.indexOf( self.information_tab), QCoreApplication.translate("progress_ui_tr", "Download Information")) self.limit_checkBox.setText(QCoreApplication.translate("progress_ui_tr", "Limit speed")) self.after_checkBox.setText(QCoreApplication.translate("progress_ui_tr", "After download")) self.limit_comboBox.setItemText(0, "KiB/s") self.limit_comboBox.setItemText(1, "MiB/s") self.limit_pushButton.setText(QCoreApplication.translate("progress_ui_tr", "Apply")) self.after_comboBox.setItemText(0, QCoreApplication.translate("progress_ui_tr", "Shut Down")) self.progress_tabWidget.setTabText( self.progress_tabWidget.indexOf(self.options_tab), QCoreApplication.translate("progress_ui_tr", "Download Options")) self.resume_pushButton.setText(QCoreApplication.translate("progress_ui_tr", "Resume")) self.pause_pushButton.setText(QCoreApplication.translate("progress_ui_tr", "Pause")) self.stop_pushButton.setText(QCoreApplication.translate("progress_ui_tr", "Stop")) self.after_pushButton.setText(QCoreApplication.translate("progress_ui_tr", "Apply")) persepolisdm-persepolis-867ee76/persepolis/gui/resources.py000066400000000000000000034755201464161131600243400ustar00rootroot00000000000000# Resource object code (Python 3) # Created by: object code # Created by: The Resource Compiler for Qt version 5.15.14 # WARNING! All changes made in this file will be lost! try: from PySide6 import QtCore except: from PyQt5 import QtCore qt_resource_data = b"\ \x00\x00\x02.\ \x00\ \x00\x07\x84x\x9c\xbd\x95\xc9n\xdb@\x0c\x86\xefy\x0a\ bzi\x00i4\xe4\xec\xae\x9dK\xae\xe9\x0b\xf4f\ 8^\x04\xc8\x0bd!\xb6\xfb\xf4\xe5H^\x1b\xc7\x97\ \x00\x92\x04\x0dE\xf2\x9f\x8f\x1c\x10\xf6p\xfb1\x87\xfd\ \xb2ZmGb\xd14\x9bAQ\xecv;\xb9\xd3r\ ]\xcf\x0bRJ\x15\x9c!`W\xbe7\x8b\x91pF\ \xc0bZ\xce\x17Mg\x7fL\xebm\xb9^\x8d\x04\x8a\ \x97'\x18\xd6\xd3I\x03\xdb\xe6PMGb\xbd\x19O\ \xca\xe60P\x92\xcer\xeb.\xf2d\xefG\x22w(\ \xe0\x90V%\xa0f\x07\x05^\x0f\xdd\xda\xd4\xe3\xd5v\ \xb6\xae\x97#\xb1\x1c7u\xb9\xff\xa9\xb2\x1c\xd3\xa3\xd2\ \xfd,\x8a\xff\xa9\xb3\xb2\xaa\x06?\xa6c\x83\x06\x1fc\ \xd5w\xb1\xf3\xbb\x9d~\xd6R\xabJo|N\xa7\x04\ \xc3\xcd\xb8Y\xc0;'\x00\xda\x0c#L '\x89\x19\ \xc9\x009\xca\xe8\x83\x89!\xb3R\x91\xc6H)f3\ \x8e(\xe9\x95rd\xb2\x5cK\xb4\xce\x05\x97|\xfci\ \xe51)\x0fPA2\x94\xb4\xf0\xb7\xad\xf2\x1aF\xd4\ #\x0c\xb9]\xcd0\xe60\x0b!\x1e\x09\xd9\x89\x09H\ \x1c\xb0p\x06d'&\xe4Q\xf2qI6\x8e9\x15\ \xa8D\xa4;\xa4\xdf\x89\xe4\xe0\x95\xb7cR`\x12\x9e\ Q\xfe\x84\xe2\xce\x03k1\xc8`\xb4F\x931\xa0C\ \x1dU\xb1\xad\x17\xe1\x8d\xd7t\x00\x9c\xfc\xe73\x88X\ gU\xbat\x02\x1a\x96\x22J\x07\xe8\xcf\xcd\xa14G\ $\xefG\xe9\xb0\xef\xb4gO\xed\x85\xb6\xbb\xb7T\x85\ M\xe9\x1dsX\xcco\xe6\xab\x9b\xe9Y{\xdd\x0c\xd8\ v2\xae\xa6<_t=WwE\xbd\x0e\xdb\xd7\x15\ \xf45\x81\x0f\xce\xa0\x8f\xb1\xfc\x0a\xdf\xcf\xac>\xa0\xf7\ ;\xc0\xd7\xd5\x5c\xfdF\xfe\xbaS\x99&0\xa9\x22'\ M\x08l\x9a\x8b\xc9\xa1\xd7v\x91\x88\xdaX0R!\ RP6\xb9\x88\x0c{[\x9f\xb7>`\xf2im\xa3\ \x0eI$\xb5\x8bH\x1c\xe7\xfeX\x8b\x1c\xe7m=*\ O\x01\x92\x9e_\x9c\xe6%\x85H>}\xd9(\x9dV\ \xc1\xc7+\x09\xfbb Ct\xb3y\xeb\x0d\x9e\xae\xaa\ p\xeaReks\x1a\xaf\xa7N\xbc\xb4H]C\xa6\ \x9b\x97a\xfao}y\xfa\x07\x8a\xd4\xbaa\ \x00\x00\x08\x86\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2224\ \x22 height=\x2224\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a \x0a \x0a \ \x0a \ \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x07d\ \x00\ \x00\x1fax\x9c\xadYYo\xdb8\x10~\xae\x7f\xc5\ ,\xf6e\x1b\xc4W\xb2iZe\xb1@\xd2\xed\x11\xa0\ G\x9a\xb8[\xf4\xa9\xa0$\xcab#\x8bZ\x92\x8a\xe3\ \x06\xfd\xef;\xa4.\xear\xe4&1\x10\xd8\xe4\x1c\xdf\ \x9c\x1cJ\xd3\xbd\xd1\x1e\x00\x98\x7f\x8b\x90IH\x04_\ \x0a\xb2\x02\xfc\x1a\x08JA\xf2@\xad\x89\xa0\x0elx\ \x0a\x1e\x89AP\x9fI%\x98\x9b*\x0aL\x01\x89\xfd\ )\x17\xb0\xe2>\x0b6F\x10.\xa6\xb1O\x05\xa8\x90\ \x82\xa2b%\x81\x07\xe6\xc7\x9b\x0f\x9f\xe1\x0d\x8d\xa9 \ \x11\x5c\xa4n\xc4E\xc4\x1b\x88\x88\xaax'\xa3\xbdN\x0fT\x86\xfa\ \xc0b#<\xe4\x09\xda\x14\xa2H\xb4r\xcd\xa2\x08\x5c\ \x0a\xa9\xa4A\x1a\xed\x1b\x19H\x0d_\xce\x17o?~\ ^\xc0\xe9\x87\xaf\xf0\xe5\xf4\xf2\xf2\xf4\xc3\xe2\xeb\x09R\ \xab\x90\xe3.\xbd\xa1\x99,\xb6J\x22\x86\xa2\xd12A\ b\xb5A\x03\x8c\x88\xf7\xaf._\xbeE\x9e\xd3\xb3\xf3\ w\xe7\x8b\xafh\x07\xbc>_|xuu\x05\xaf?\ ^\xc2)\x5c\x9c^.\xce_~~wz\x09\x17\x9f\ //>^\xbd\x9a\x00\x5cQ\x0d\x8c\x1a\x09[\xfc\x1c\ \x98X\xa1+}\xaa\x08\x8bda\xfbW\x0c\xafD|\ \x91\x0f!\xb9\xa1\x18f\x8f\xb2\x1bDG\xc0\xe3\xc9\xe6\ \xfe\x08\x1a)$\xe2\xf1\xd2X\x8a\xd4\x953\x11\xdey\ \x001W\xfb \x11\xe6_\xa1R\x893\x9d\xae\xd7\xeb\ \xc92N'\x5c,\xa7Q&EN\xff6\x88\xc6\x8f\ \xf4gPe\xf1\xd1`\xbeSOI\x08i\x94\xc0*\ \xf3\xc5Z0\xc5\x10\xb3\x81\x1b\xb0\x88:\x86E#\x94\ \x08q\x89\xa6\xa4\xee\xc4\xe3\xab\xe9iDo\xc3T\xfe\ \xcbpz\x86Y\xf9\x83^\xa9MD\xafBJ\x95\ \xeccJ\x9fK] g\xe4\x9a\x8c\xdf_DdC\ E\x8d\xd4\xe7\xde\xe4?5a|\xfa\x9f\x1a\x1fM\xa5\ \x96(\xb5\xc41\xbd%\x98\x1fTNB\xb5\x8a\xb4K\ F{\xd3\xd1\xe8\xd3{\x1a\xa7\x8e\xc3\x14]9\x92F\ h\x0e\xf5Gw0\x02\x9dz\xc4\xbb^\x0a]!c\ \x8fGh\x9b\x03\xbf{\x07\xf3\xe7G\xee\x89\xd9/\x16\ \xd7!\xb2\x8f~\xa2\xb0\x05\xe7\xd1\x82%\x85\x00C\x90\ \xef\x9ft\xcbD\x91\x87\xcf\xf5'\x13\xe9r\x81\x85\xee\ \xc0<\xb9\xc5V\x111?g\x1e\xfd\x04-\x9e\xb8_\ \x98\xbf\xa4\xcaq\x12\x12\xd3\xd1]C\xe4\xbd\xc20w\ 6\xf6\xdeX\x10\x9f\xa5\xd2\x81\x83\xe4\xf6$\xb3\x80\xb8\ gD8\x8e\x22.\xdc\x8d\x9e\xe4d\xc6\x8d\x0e&\x5c\ \x8cP\x9e$\xc4\xf71\xc4c\x97+\xc5W\x0e\x1ci\ \xe6'+\x16\x8f\xd7\xccW!*\x9c\xcd\xf4\x92\xd6\xa3\ WC\xca\x96\xa1B%G\xc5j!!\xa2\x81\xca\xf9\ \xede\x91\xd1\x1fu\x80*\x83\x04w\xb6\x1d\x05\x94\x83\ \xd2\xd4Z\xa4\xba\x11\x07\x11\xd7\x10\ \xa4\xba\xffN\x0d\xe97C:\x917\xcb\xa7'\xfd\x89\ \xd2\xa7M\x87f\x982M\xf90]\x96e\x0e\x9e\x11\ \xc4\x8dt\x11\x0e6\xf1[\xc1\xf3p[\x07\xab\xaf\x8c\ \xdeI\xfbE*\xc3L\xeb>|z\xc9W.?\xe3\ \xb7\xc3\xea\xb8^\xabEm\xe5\x15w\xfc\xac\xab\xe0\xe6\ \xc7\x8d\xcar\xe0O\xcc7Ck\x1aJ\x05\xc7\xa1\xb1\ 1\xc2\x82U,\x8d\xee\xb6v\x93\xbaYY\xae\xdbR\ \xccB\xaf\x0c+\xeb\xb7\xfa\xe3\xc0\xd5\x9f\xcc\x98\xac(\ 1\x0a\xe3\x8en\xda!\xcf\x09\xb8\x97\xca\xaa\x9d\xf5V\ ]\xc9\xe0\xf8\x82'c\x9f\xaf\xe3\xbcje\xeazX\ \xfe\x82Gc\x8e\x99\xc7b\xa7p\xe9Is?\xe1\x92\ ip\x0e(\x9e\x80I\xd3\x8c\xa6h\x8ee\xbb\xcb\xe3\ j\xb2\xaf\xd8\xec\xda\xcbMk5o\xb3\x99\xb7fc\ \xcd\x09L\xf7\xe0{*q\x88\x04\x89\xd8\x22\x0a\x11\x8b\ )\xe0Ag\xb1!\xac\xac\xc3\x96\x19u\x88Z5\xab\ $x\x88g\x8bz~\xd4\xf3I\xe9\x93\x86\x90\xac\x7f\ u\xc8\xa99\xde\xd1.,\xbb\x88\xcd\xdf[X\x9a\xa3\ \xbf\xb0r7\xcd&/h\xee\xa8\x22\xd7g\x93g4\ k\xbd\xa3OW\x09\x8b\xad\x04\xde\x1f}\xfa\x87\xe3l\ E\xdb\xeb\xef\xd0=\xaf|\xa6lR\x9cd\x17lU\ [\xbe\xa7\x04:\xce\xae\xf9\xe4\xa8@\xd8\x99\xc7?-\ \x98y\xcd4QV\xcb6\xa2\xa1\xf5d4\xd49\xd3\ d\xecf\xbd\xc7\xd2m/6\xf4\x97[\xa3\xde\x22\xd0\ \xbfi\xac\xb6\x14\x81\xf1\x87.\x85\x93Q\xad\x0a\xb2p\ Y\x19Q\x86v\x9e\xc7\xb1\x8d\xde\xa4E\x03|\xb1\xd6\ \xc6n\x1f^\xf7e]\x9a\xb4N\xb0!\xa9\xd6\x03\xb1\ /t\xe5~\x22\xa8\x94&\xdbZ\x80K\xd6\xf6N\xc5\ \xd5cl_\x225%\xec\xe8\x94oF\xec#\xb9\xa6\ (\xea~\xe7\xf0 \xe84\xdf\xe2lofL}v\ \xdbJ{HP@\xe6\x96\xc1^i\xb4\xa7\xb6\xcd\xa6\ \xf9\xb5+\xae\xbe\xdc\xc0cm>\xbc\xea\xb2&\xfd\xd0\ \xc2\xabzx\xcb\x8a\x9e\xe2\xabu\xfd\xdd\x9a\xfe\xc3\xb2\ \xacR\xdcS\x81\x16AG\x0dv\xb0w\xed\xf5\xd6a\ \x97\xfa^\x8a\xddj\xd1:\x16\x1f\xa1\x1a-\x18]U\ 5|\xbb\xb3\xec\xba\xd9\xfb\x89\x06\x97^\xfflP\x5c\ \xbe\xcf\xec\xcaiO\x87J\x90X&D\x94\xc5S\x1c\ \xa0\xd9\xcd\xd6\xcc\xcf\xe6>\xa7}wH\x9b\xc3\xf3,\ ;\xd4\xeb\xca\xea\x07\xf2p\x95\xa6\xde\xba.\xab\x8dq\ \x7f69(\x80\xec\x82\x8d4g\x84L\x9f\x05\x07/\ \x19/\xacK\x865\xa5\xd4\xa0\xd97\x91\xce\x1bs\xa5\ \xd1\xc1\xdb9\xca&\x0a\x0d\x0f\xb1Y\xfd@r\x12u\ \x8c\xf3fl\x82Z[J\x1a\xb9[Y\xa3\xe3\xfc/\ \xa3k\xbcT,\x045_;MkNdK\xc1|\ =\xfeV\x0fZ\xe6\x87\xcf\x0e\xdd\xa6\xb9\xe5\xb6=\x9a\ \x95J\xcbB.T\x97\x0b\xe5\xe88\xf8\x82\x83r\xdf\ R\x82\xfb\xb6\x09\xc3\x9e\x07\xb5\x82\xd7\x9d*I3Q\ Z\xf7?\xb3bL\xac\xa0\xe8\xb0\x99\xfb\xd40L\xc5\ \x1a\x0d\x82Y0\xefO\xea\xde\x87M%*Eo\xf1\ \xde\x1d\xb1\xa5>\xd3\xd0(*\xf2{XH\xbd\xeb\xea\ \x22\x88&{v\x8e\xeb5\x9e*\x1d[\xbbr\xbbp\ 5\x9e\xceX\xb5\xc4\xb5P\xb5\xc1\xeb\xf4lV\xd7\xda\ |\x06P\xc8=~v\xfc\xe2\xd8\xcbh\xdf\xa0{\x12\ \xd3\xc7X\xec3Og|N\x9dk\xcc\x9el\xe5\xfa\ j\xd2+\x0e'\x8d=\xbdj\xda\xe3\xd6\xfd\xec\x06;\ \xf0\xa80<.\xbf\xfdV\xb2wu\xcb\xed\xfa\x8a$\ \xdfNU\x1d\x84\x1d\xfe\xe8\x90\xb6\x9d\xca\xd8x/U\ \xd7\xb1ig\xc1\xee\xde\xb9\xc7)9\xd5\xae\xce\xdfI\ \xf8V\x7f7\xfd\xb3\x8df{D\x86\xc4cH4\x1e\ =\x16\xc3\x9c\x85\xdf\xa8~\xfd\xc5b\x1cfv\x8dG\ \x8dy\x17E[\xfd^\xa7\xdc\x16\xc5:\xe5n\xc3\xdf\ #\x18\xd1\xe8i\xbf\xa6qh\x1f)\xf2\xc3\x9a\xfe\xb6\ \xa5\xd1\xafb\xfb\xe5\xeev\x0f\xae6\xe1\xa3v\xde\x0b\ \xfd\x0e\x0f\xc3o\x8dh\xfd\xc3H\xf7P\xd1\x7f\xb4V\ \x93a\xf9\xd6e\xdbik\x9dX\x8a'\xa8\xa2>j\ V\xaf)\xda\xf3f\xf1\xa2\xc32\xc7\xc1\x90\xa6\xf1u\ \xbfU\xed1\xd7\x08\xba\x7f\xb0\xc9\xccBu\xff\x03\xfe\ 5O\xc2\ \x00\x00\x0c\xc0\ A\ rabic:\x0d\x0aMajdi So\ bain MajdiSobain\ \x0d\x0aSaleh Alanazi \ Sal7_one\x0d\x0aRayan \ M rayanm\x0d\x0aRex_sa\ rex07 \x0d\x0aSimo si\ monetworking\x0d\x0a\xe6\x98\ \x8e \xe5\xbc\xa0 zhuangsha1\ 9740612 \x0d\x0a\x0d\x0a\x0d\x0aCh\ inese (China): \x0d\ \x0a0day 0 0day\x0d\x0azy\ ppe 210hcl\x0d\x0a\xe5\x93\xa5\xe5\ \x93\xa5 \xe5\xa5\xbd 485250464\ \x0d\x0a\xe6\xb1\x9f \xe7\x8e\x8b 664766\ 245\x0d\x0ax x 7315157\ 13\x0d\x0aCharley Yang\ CharleyY\x0d\x0aAlan \ Yee Choyee\x0d\x0aYong\ hui Chen ColoPau\ l\x0d\x0aSY C DarciaLe\ e_066\x0d\x0aHiyool\x0d\x0aJ\ L JULIANLEEEEE\x0d\ \x0aJack Su JackSu\x0d\ \x0a\xe5\xbf\xab\xe4\xb9\x90\xe7\x9a\x84\xe8\x80\x81\xe9\xbc\xa0\ \xe5\xae\x9d\xe5\xae\x9d LaoShuBab\ y\x0d\x0ahaonan li Li_\ haonan\x0d\x0aLiro Liu\ Liro\x0d\x0a\xe6\x98\x8e\xe9\x98\xb3 \xe8\x92\ \x8b Lotumn\x0d\x0aAllure\ R Riseup\x0d\x0aVento\ Fang Vento8866\x0d\ \x0a\xe5\xae\x89\xe5\xa1\x9e\xe6\x96\xaf\xe5\xa1\x94 \xe8\x96\ \x87\xe8\x96\x87\xe5\xae\x89 VivianAn\ cestor\x0d\x0aYe Wehch\ s WehchsYe\x0d\x0aK X \ X_K\x0d\x0aing YIn YIn\ ing\x0d\x0ayyy zzz ZZy\ yy\x0d\x0a\xe9\xb9\x8f \xe5\xbc\xa0 a535\ 7663\x0d\x0ayongkang y\ ang acme96929042\ 2\x0d\x0aAliReza AmirS\ amimi alireza_am\ irsamimi\x0d\x0aaltria\ morgan altria06\ 6\x0d\x0aanakin michea\ l anakinlt\x0d\x0aarth\ ur \xe9\x9f\xa9 arthurh\x0d\x0a\ Leon Chen bioleo\ n\x0d\x0aGabrielle Cho\ u canonlayido\x0d\x0a\xe7\ \xa6\x85\xe5\x92\x8c \xe6\x9d\x8e cc379\x0d\ \x0aSheng Cheng cs5\ 4ysm\x0d\x0aDavin davi\ nma\x0d\x0adrhenk Dai \ drhenkdss\x0d\x0aZHAN \ Dr dts0080\x0d\x0adan \ chin egg233\x0d\x0ache\ n chen false\x0d\x0ayi\ ning fan fan2112\ 10\x0d\x0akoishi a gho\ stxt0\x0d\x0aZARK LEE \ godiamguilty\x0d\x0aji\ angsheng hong ho\ ngjiangsheng\x0d\x0adp\ h huangdp\x0d\x0aJack\ son Hu huming220\ 7\x0d\x0aW Z icwaos\x0d\x0ax\ iang wang ifoanl\ e\x0d\x0a\xe6\xb5\xb7\xe9\xbe\x99 \xe6\xb1\x9f ji\ anghailong\x0d\x0ahaha\ ha jiangweiyang\ 336\x0d\x0a\xe5\xae\xb6\xe4\xbf\x8a \xe9\xbb\x84 \ jiayezhang22\x0d\x0ali\ u li kulierhao\x0d\x0a\ k y kyalt\x0d\x0aleo x\ xx leoxxx\x0d\x0a\xe6\xb9\x96\xe5\xb9\ \xbf \xe5\xbb\x96 liaohuguan\ g\x0d\x0alei li lilei9\ 587\x0d\x0a\xe6\x97\xad\xe9\xba\x92 \xe5\x88\x98 \ liuxuqi\x0d\x0a\xe6\x88\x88\xe6\x89\xac \ \xe8\xb5\xb5 lucius.z\x0d\x0aqi\ hao mao maoqihao\ \x0d\x0amonowolf Lucas\ monowolf\x0d\x0au mug\ uo muguou\x0d\x0aeo L \ nbnatcom\x0d\x0aOra Pr\ inzing prinzingo\ ra\x0d\x0as k qqwwee\x0d\x0a\ \xe6\x96\x8c \xe7\x86\x8a qw711115\ 20\x0d\x0aJane Yang qw\ e866zxc\x0d\x0aMinagaw\ a Hifumi reeeali\ n\x0d\x0a354 6548 rich\ ard954\x0d\x0arose tif\ fany rose_tiffan\ y\x0d\x0aCUI SAN sanc1\ 63sa\x0d\x0a\xe4\xbd\xb3 \xe4\xba\x8e sh\ eena.ringo\x0d\x0aSin \ Qiu sino1641\x0d\x0agi\ ga d togiga\x0d\x0a\xe6\x80\x9d\ \xe6\x95\x8f \xe9\xb2\x8d tulipask\ y\x0d\x0a\xe5\x88\x98 \xe4\xbf\x8a\xe5\x90\x9b tu\ sks\x0d\x0awang yuehu \ wangyuehu\x0d\x0axinpu\ wei weixinpu\x0d\x0am\ ike williams wil\ liamsguo\x0d\x0aT W wt\ 1182657346\x0d\x0axiao\ wu wu12138\x0d\x0awwj\ 402\x0d\x0acq n xiaolu\ \x0d\x0ayin xiao xiaoy\ inge\x0d\x0a\xe4\xb8\x80\xe5\xbc\x98 \xe9\x83\x91\ yihong2018\x0d\x0ayou\ ngcrazyboy\x0d\x0a\xe5\x8d\x93\xe7\ \x90\xaa \xe5\x88\x98 you\xe5\xbf\x97\xe8\x80\x85\ \x0d\x0aan mu zhenlail\ u\x0d\x0along long zql\ 00l\x0d\x0a\xe9\xaa\x8f\xe4\xb8\x80 \xe6\x88\x9a \ zsns1994\x0d\x0a\xe5\xbe\x90 \xe5\xa4\ \xa7\xe4\xbe\xa0 \xe4\xbc\x8f\xe5\x9f\x8e\x0d\x0a\xe4\xb9\xa6\ \xe7\xbd\x95 \xe5\x90\x91 \xe5\xa2\xa8\xe5\xa2\xa8\xe5\xa2\ \xa8\xe5\xa2\xa8\xe5\xa2\xa8\x0d\x0achuanto\ ng xu \xe5\xbe\x90\xe4\xbc\xa0\xe7\xbb\x9f\x0d\ \x0a00 000 \xe6\x95\xb7\xe8\xa1\x8d\xe4\xbc\ \xa4\xe6\x83\x85\x0d\x0a\xe8\x8a\xb1\xe5\x8d\xb7 \xe6\x98\xa5\ \xe6\x98\xa5\xe8\x8a\xb1\xe5\x8d\xb7 \x0d\x0a\x0d\x0a\x0d\ \x0aGerman (de):\x0d\x0aP\ atrick Meier Son\ Arc\x0d\x0aAndreas Mue\ ller anzbert \x0d\x0a\x0d\ \x0a\x0d\x0aDutch (Nether\ lands): \x0d\x0aHeimen\ Stoffels Vistau\ s \x0d\x0a\x0d\x0a\x0d\x0aFrench (\ France):\x0d\x0aCwpute\ BipBoup cwpute \ \x0d\x0aSimon Porte sp\ orte \x0d\x0a\x0d\x0a\x0d\x0aHunga\ rian:\x0d\x0aTotya Tot\ ya \x0d\x0a\x0d\x0a\x0d\x0aKorean:\ \x0d\x0aJungHee Lee Ma\ rongHappy\x0d\x0a\x0d\x0aPer\ sian (Iran):\x0d\x0aAl\ iReza AmirSamimi\ alireza_amirsam\ imi\x0d\x0ah_r 71 hayy\ an711\x0d\x0aMostafa B\ odagh mosi2772\x0d\x0a\ Mostafa Asadi mo\ stafaasadi\x0d\x0a\x0d\x0a\x0d\x0a\ Polish (Poland):\ \x0d\x0aFadeMind\x0d\x0aMau\ rycy B\xc5\x82aszczak \ LuxF3rre\x0d\x0aArkadi\ usz Rog\xc3\xb3\xc5\xbc arci\ o \x0d\x0a\x0d\x0a\x0d\x0aPortugue\ se:\x0d\x0aAntonio Bar\ bosa AlvoErrado2\ \x0d\x0a\x0d\x0a\x0d\x0aPortugues\ e (Brazil): \x0d\x0aCi\ rnos Gersonzao \x0d\ \x0aCarlos Henrique\ De Freitas Ferr\ eira Neocazen\x0d\x0aT\ hiago Schuch Thi\ gSchuch\x0d\x0aeltonfa\ bricio10\x0d\x0aMarli \ Masa marlimasa \x0d\ \x0a\x0d\x0a\x0d\x0aRussian:\x0d\x0aV\ ictor ViktorOnli\ n\x0d\x0a\xd0\x9c\xd0\xb8\xd1\x85\xd0\xb0\xd0\xb8\xd0\xbb \ \xd0\xa1\xd0\xbe\xd0\xbc\xd0\xbe\xd0\xb2 belli\ ric300\x0d\x0aNikita P\ aseka deadman198\ 7\x0d\x0aPavel irbinix\ \x0d\x0aSergey Suhih l\ inuxmasterclub \x0d\ \x0a\x0d\x0a\x0d\x0aSpanish (Sp\ ain):\x0d\x0aEdgardo C\ astro Castro edd\ y9305\x0d\x0aJose G. J\ imenez S. josegj\ imenez\x0d\x0aJuan Man\ uel ptero.4\x0d\x0aRub\ \xc3\xa9n Fern\xc3\xa1ndez r\ ubenterco\x0d\x0aToni \ Est\xc3\xa9vez toniem \ \x0d\x0a\x0d\x0a\x0d\x0aTurkish (T\ urkey):\x0d\x0aO\xc4\x9fuzha\ n Aksoy OnePage\x0d\ \x0aabc Def abcmen\x0d\ \x0aYa\xc5\x9far \xc3\x87iv yas\ arciv67 \x0d\x0a\x0d\x0a\x0d\x0aCh\ inese (Taiwan):\x0d\ \x0aEnfeng Tsao 5id\ erealArt\x0d\x0aSr R s\ r3296001\x0d\x0aqge ha\ o \xe9\xb8\x9f\xe8\xaf\xad\xe8\x8a\xb1\xe9\xa6\x99 \x0d\ \x0a\x0d\x0a\x0d\x0aPortuguese:\ \x0d\x0aAntonio Barbos\ a AlvoErrado2 \x0d\x0a\ \x0d\x0a\x0d\x0aSwedish:\x0d\x0aKr\ istoffer Grundst\ r\xc3\xb6m Umeaboy \x0d\x0a\ \x00\x00\x07n\ \x00\ \x00\x1f\xe1x\x9c\xadYYo\xdb8\x10~\xae~\xc5\ ,\xfa\xd2\x0d\xe2\xab\xde\xa4\xad\xbcX \xc9&m\x80\ 6\xcd\xe1l\xd1\xa7\x82\xb6h\x8b\xad,\xaa$\x15'\ \x0d\xf2\xdfwH]\xd4\xe5\xc8Mb \xb0\xc99\xbe\ 99\x94\x06;\xce\x0e\x00\x98\x7fS\x9fI\x88\x04_\ \x0a\xb2\x02\xfc\xba\x10\x94\x82\xe4\x0b\xb5&\x82\xbap\xc7\ c\x98\x93\x10\x04\xf5\x98T\x82\xcdbE\x81) \xa1\ 7\xe0\x02V\xdcc\x8b;#\x08\x17\xe3\xd0\xa3\x02\x94\ OAQ\xb1\x92\xc0\x17\xe6\xc7\xfb\xb3kxOC*\ H\x00\xe7\xf1,`s\xf8\xc8\xe64\x94\x14\x08\xea\xd6\ +\xd2\xa7\x1e\xcc\x12A\x9a\xe5D\xa3\xb8JQ\xc0\x09\ G\xc9D1\x1e\xee\x02e\xb8/\xe0\x86\x0a\x89\xbfa\ \x9c)I%\xee\x02\x17F\xca+\xa24x\x01<\xd2\ \x8c\x7f\x22\xe2;\x08\x88*x\xfb\xceN\xa3\x07\x0aC\ =`\xa1\x11\xee\xf3\x08m\xf2Q$Z\xb9fA\x00\ 3\x0a\xb1\xa4\x8b8\xd852\x90\x1a\xbe\x9cN?|\ \xbe\x9e\xc2\xc1\xd9W\xf8rpyyp6\xfd:A\ j\xe5s\xdc\xa574\x91\xc5VQ\xc0P4Z&\ H\xa8\xee\xd0\x00#\xe2\xd3\xf1\xe5\xd1\x07\xe498<\ \xfdx:\xfd\x8av\xc0\xc9\xe9\xf4\xec\xf8\xea\x0aN>\ _\xc2\x01\x9c\x1f\x5cNO\x8f\xae?\x1e\x5c\xc2\xf9\xf5\ \xe5\xf9\xe7\xab\xe3>\xc0\x15\xd5\xc0\xa8\x91\xb0\xc1\xcf\x0b\ \x13+t\xa5G\x15a\x81\xccl\xff\x8a\xe1\x95\x88/\ \xf0\xc0'7\x14\xc3<\xa7\xec\x06\xd1\x11\x98\xf3\xe8\xee\ \xf1\x08\x1a)$\xe0\xe1\xd2X\x8a\xd4\x853\x11\xde\xe9\ \x02B\xaevA\x22\xcc\xbf}\xa5\x22w0X\xaf\xd7\ \xfde\x18\xf7\xb9X\x0e\x82D\x8a\x1c\xfcc\x10\xf5\x9e\ \xe9\xcf\xa0J\xe2\xa3\xc1|\xa7s%\xc1\xa7A\x04\xab\ \xc4\x17k\xc1\x14C\xcc\x06\xee\x82\x05\xd45,\x1a\xa1\ D\x88K4%\x9e\xf5\xe7|58\x08\xe8\xad\x1f\xcb\ _d\xe9\x0f\x0e1+\x7f\xd1+u\x17\xd0+\x9fR\ %\xdb\x98\xe2\xb7R\x17\xc8!\xf9Az\x9f\xce\x03r\ GE\x89\xd4\xe3\xf3\xfeO\xd5g|\xf0S\xf5\xf6\x06\ RK\x94Zb\x8f\xde\x12\xcc\x0f*\xfb\xbeZ\x05\xda\ %\xce\xce\xc0q.>\xd10v\xee\x1d\xd0\xa9F\xe6\ ?\x96BWDo\xce\x03\xb4\xc5\x85\x97\xc7''\xc3\ \x93\xd1\x04\x12\x02.\xb0\x0c]\x18E\xb7X\xc8\x01\xf3\ \xe0\xe5\xe1\x91\xfeL\x1c\xe7!\x95\xe5\xbaL\xd1\x95+\ i\x80\xae\xa1\x9es\x0f\xad\xb2\xe9\xbb\x11\xdd\x1fO\xcc\ ~\xbe\xb80\x7fF\xdc\x94\xf3`\xca\xa2L\x84!A\ \x8a\xf1h\xbc?\x9eM\x9a\xe5\x16\x90\xdb\x10\x1f\x8f\xf5\ g\xe2<\x80VAf_\x98\xb7\xa4\xcau#\x12\xd2\ \x9a#\xba\x8b+\xb6{\x82x,\x96.\xbc\x8en'\ \x89!dvH\x84\xeb*2\x83{\xe7EJfb\ \xe3b\x16\x87t\xe2\xbc\x88\x88\xe7a\xde\xf4f\x5c)\ \xberaO3\xbfX\xb1\xb0\xb7f\x9e\xf2Q\xe7p\ \xa8\x97\xb4\x1e\xbd\xeaS\xb6\xf4\x15*\xd9\xcbV3\x09\ \x01]\xa8\x94\xdf^\x16\x09\xfd^\x03\xa8J\xd5t\x82\xdai\xf0\x1b\ \xeey\xc4+)\xd5\xd6\xee\xdfJ\xfaF\x8fW=\xb4\ \x89fsL\xbaD\xa4K<\x9e?\x1a\xdd\xbc\x85\xdf\ \xa8~\xed\xc6B\x9cl\xb6\x8eH\x89{\x1bM\x1b=\ _\xa6\xdc\x14\xc72\xe5\x96\xb3\xe03XQ\xe9l\xbf\ \xa9\xb2k7\xc9r\xc4\x9a\x067\xa5\xd2o\x83\xfb\xed\ &\xf7\x08\xb0:\xe1\xf3v\xe0s\xfd\x02\x11S\xc0\x9a\ \xd9\xda\xe7\x92\x96\xf9b\xd31[L\x8b\xf9\x0b\x9aM\ '\xafuz)\x1e\xa1\x96\xf2\xf8Y\xbc\xd1\xa8\xcf\xa0\ \xd9;\x11\xcb\x22\x17\xe3\x1a\x87?\xda\x0d\xab\x8f\xbeF\ \xd0\xe3sNb\x16\xaa\xfb\x1fd3m\x1f\ \x00\x00\x02\x1f\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x01\xcf\ <\ svg width=\x226\x22 he\ ight=\x229\x22>\x0a \x0a\x0a\ \x00\x00\x01J\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a \x0a\x0a\ \x00\x00\x02'\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a<\ /svg>\x0a\ \x00\x00\x01\xec\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a \x0a \x0a <\ path d=\x22M13,5 L \ 5,13 v-8 h8 z\x22 f\ ill=\x22#c8c9ca\x22 fi\ ll-rule=\x22evenodd\ \x22/>\x0a\x0a\ \x00\x00\x02-\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x226px\x22 \ height=\x229px\x22 vie\ wBox=\x220 0 6 9\x22 e\ nable-background\ =\x22new 0 0 6 9\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x02*\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x07\x83\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0aimage/s\ vg+xml\ \x0a \x0a\x0a\ \x00\x00\x06\x92\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ image/svg+xml\ \x0a \x0a <\ path\x0a d=\x22M16,1\ 6 h-14 v-14 h0.9\ v13.1 h13.1 z\x22\x0a\ fill=\x22#58d3ff\ \x22\x0a id=\x22path4\x22\x0a\ style=\x22fill:#\ e91e63;fill-opac\ ity:1\x22 />\x0a\ \x0a\ \x00\x00\x02*\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x226px\x22 \ height=\x229px\x22 vie\ wBox=\x220 0 6 9\x22 e\ nable-background\ =\x22new 0 0 6 9\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x07\x98\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ image/sv\ g+xml<\ /metadata>\x0a \x0a \x0a \x0a\ \x0a\ \x00\x00\x07q\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a<\ cc:Work\x0a r\ df:about=\x22\x22>image/svg\ +xml\ <\ sodipodi:namedvi\ ew\x0a pagecolor=\ \x22#ffffff\x22\x0a bor\ dercolor=\x22#66666\ 6\x22\x0a borderopac\ ity=\x221\x22\x0a objec\ ttolerance=\x2210\x22\x0a\ gridtolerance\ =\x2210\x22\x0a guideto\ lerance=\x2210\x22\x0a \ inkscape:pageopa\ city=\x220\x22\x0a inks\ cape:pageshadow=\ \x222\x22\x0a inkscape:\ window-width=\x2213\ 66\x22\x0a inkscape:\ window-height=\x227\ 42\x22\x0a id=\x22named\ view6\x22\x0a showgr\ id=\x22false\x22\x0a in\ kscape:zoom=\x2237.\ 111111\x22\x0a inksc\ ape:cx=\x224.5\x22\x0a \ inkscape:cy=\x223\x22\x0a\ inkscape:wind\ ow-x=\x220\x22\x0a inks\ cape:window-y=\x222\ 6\x22\x0a inkscape:w\ indow-maximized=\ \x221\x22\x0a inkscape:\ current-layer=\x22s\ vg4\x22 />\x0a \x0a\x0a\ \ \x00\x00\x01\xcc\ <\ svg width=\x226\x22 he\ ight=\x229\x22>\x0a \x0a\x0a\ \x00\x00\x08?\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0aimage/svg+\ xml<\ dc:type\x0a \ rdf:resource=\x22h\ ttp://purl.org/d\ c/dcmitype/Still\ Image\x22 /><\ sodipodi:namedvi\ ew\x0a pagecolor=\ \x22#ffffff\x22\x0a bor\ dercolor=\x22#66666\ 6\x22\x0a borderopac\ ity=\x221\x22\x0a objec\ ttolerance=\x2210\x22\x0a\ gridtolerance\ =\x2210\x22\x0a guideto\ lerance=\x2210\x22\x0a \ inkscape:pageopa\ city=\x220\x22\x0a inks\ cape:pageshadow=\ \x222\x22\x0a inkscape:\ window-width=\x2213\ 66\x22\x0a inkscape:\ window-height=\x227\ 42\x22\x0a id=\x22named\ view14\x22\x0a showg\ rid=\x22false\x22\x0a i\ nkscape:zoom=\x2213\ .111111\x22\x0a inks\ cape:cx=\x229\x22\x0a i\ nkscape:cy=\x229\x22\x0a \ inkscape:windo\ w-x=\x220\x22\x0a inksc\ ape:window-y=\x2226\ \x22\x0a inkscape:wi\ ndow-maximized=\x22\ 1\x22\x0a inkscape:c\ urrent-layer=\x22sv\ g12\x22 />\x0a \x0a \ \x0a \x0a\ \x0a\ \x0a\x0a\ \x00\x00\x01\x04\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a\x0a\ \x00\x00\x02\x22\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\ \x0a\ \x00\x00\x05_\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\ \x0a\x0a\ \x00\x00\x01%\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xd1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x01\xcd\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a \x0a \ .ColorScheme-T\ ext { color:#313\ 63b; } .ColorSch\ eme-Highlight { \ color:#3daee9; }\ \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x022\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\ \x0a\ \x00\x00\x02\xd0\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 ve\ rsion=\x221.1\x22>\x0a \x0a\x0a\ \x00\x00\x02R\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a \x0a\ \x0a\ \x00\x00\x01\xb5\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02$\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\xaa\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01Z\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\x1b\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\x7f\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02T\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02\x81\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x019\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x03\x96\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x00\xa4\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02\xd0\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xa1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x019\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x02\x80\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xc6\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x03`\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x03D\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02%\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02\xd9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \ \x0a\x0a\ \x00\x00\x01\x81\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x02\xab\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xaf\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02 \ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01I\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x05_\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\ \x0a\x0a\ \x00\x00\x01%\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xd1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x01\xcd\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a \x0a \ .ColorScheme-T\ ext { color:#d3d\ ae3; } .ColorSch\ eme-Highlight { \ color:#5294e2; }\ \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x022\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\ \x0a\ \x00\x00\x02\xd0\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 ve\ rsion=\x221.1\x22>\x0a \x0a\x0a\ \x00\x00\x02R\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a \x0a\ \x0a\ \x00\x00\x01\xb5\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02$\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\xaa\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01Z\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\x1b\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01\x7f\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02T\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02\x81\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x019\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x03\x96\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x00\xa4\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02\xd0\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xa1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x019\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x02\x80\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xc6\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x03`\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x03D\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02%\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \x0a\x0a\ \x00\x00\x02\xd9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \ \x0a\x0a\ \x00\x00\x01\x81\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \ \x00\x00\x02\xab\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x00\xaf\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x02 \ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2216\ \x22 height=\x2216\x22 vi\ ewBox=\x220 0 16 16\ \x22>\x0a \x0a\x0a\ \x00\x00\x01I\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2216\x22 heig\ ht=\x2216\x22 version=\ \x221.1\x22 viewBox=\x220\ 0 16 16\x22>\x0a \ \x0a\x0a\ \x00\x00\x02\x22\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\ \x0a\ \x00\x00\x01\xcf\ <\ svg width=\x226\x22 he\ ight=\x229\x22>\x0a \x0a\x0a\ \x00\x00\x01J\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a \x0a\x0a\ \x00\x00\x02*\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x01\xec\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a \x0a \x0a <\ path d=\x22M13,5 L \ 5,13 v-8 h8 z\x22 f\ ill=\x22#31363B\x22 fi\ ll-rule=\x22evenodd\ \x22/>\x0a\x0a\ \x00\x00\x02-\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x226px\x22 \ height=\x229px\x22 vie\ wBox=\x220 0 6 9\x22 e\ nable-background\ =\x22new 0 0 6 9\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x02*\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x07\x83\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0aimage/s\ vg+xml\ \x0a \x0a\x0a\ \x00\x00\x06\x92\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ image/svg+xml\ \x0a \x0a <\ path\x0a d=\x22M16,1\ 6 h-14 v-14 h0.9\ v13.1 h13.1 z\x22\x0a\ fill=\x22#58d3ff\ \x22\x0a id=\x22path4\x22\x0a\ style=\x22fill:#\ e91e63;fill-opac\ ity:1\x22 />\x0a\ \x0a\ \x00\x00\x02-\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x226px\x22 \ height=\x229px\x22 vie\ wBox=\x220 0 6 9\x22 e\ nable-background\ =\x22new 0 0 6 9\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x07\x98\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ image/sv\ g+xml<\ /metadata>\x0a \x0a \x0a \x0a\ \x0a\ \x00\x00\x07q\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a<\ cc:Work\x0a r\ df:about=\x22\x22>image/svg\ +xml\ <\ sodipodi:namedvi\ ew\x0a pagecolor=\ \x22#ffffff\x22\x0a bor\ dercolor=\x22#66666\ 6\x22\x0a borderopac\ ity=\x221\x22\x0a objec\ ttolerance=\x2210\x22\x0a\ gridtolerance\ =\x2210\x22\x0a guideto\ lerance=\x2210\x22\x0a \ inkscape:pageopa\ city=\x220\x22\x0a inks\ cape:pageshadow=\ \x222\x22\x0a inkscape:\ window-width=\x2213\ 66\x22\x0a inkscape:\ window-height=\x227\ 42\x22\x0a id=\x22named\ view6\x22\x0a showgr\ id=\x22false\x22\x0a in\ kscape:zoom=\x2237.\ 111111\x22\x0a inksc\ ape:cx=\x224.5\x22\x0a \ inkscape:cy=\x223\x22\x0a\ inkscape:wind\ ow-x=\x220\x22\x0a inks\ cape:window-y=\x222\ 6\x22\x0a inkscape:w\ indow-maximized=\ \x221\x22\x0a inkscape:\ current-layer=\x22s\ vg4\x22 />\x0a \x0a\x0a\ \ \x00\x00\x02*\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x226px\x22 \ height=\x229px\x22 vie\ wBox=\x220 0 6 9\x22 e\ nable-background\ =\x22new 0 0 6 9\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\x0a\ \x00\x00\x08?\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0aimage/svg+\ xml<\ dc:type\x0a \ rdf:resource=\x22h\ ttp://purl.org/d\ c/dcmitype/Still\ Image\x22 /><\ sodipodi:namedvi\ ew\x0a pagecolor=\ \x22#ffffff\x22\x0a bor\ dercolor=\x22#66666\ 6\x22\x0a borderopac\ ity=\x221\x22\x0a objec\ ttolerance=\x2210\x22\x0a\ gridtolerance\ =\x2210\x22\x0a guideto\ lerance=\x2210\x22\x0a \ inkscape:pageopa\ city=\x220\x22\x0a inks\ cape:pageshadow=\ \x222\x22\x0a inkscape:\ window-width=\x2213\ 66\x22\x0a inkscape:\ window-height=\x227\ 42\x22\x0a id=\x22named\ view14\x22\x0a showg\ rid=\x22false\x22\x0a i\ nkscape:zoom=\x2213\ .111111\x22\x0a inks\ cape:cx=\x229\x22\x0a i\ nkscape:cy=\x229\x22\x0a \ inkscape:windo\ w-x=\x220\x22\x0a inksc\ ape:window-y=\x2226\ \x22\x0a inkscape:wi\ ndow-maximized=\x22\ 1\x22\x0a inkscape:c\ urrent-layer=\x22sv\ g12\x22 />\x0a \x0a \ \x0a \x0a\ \x0a\ \x0a\x0a\ \x00\x00\x01\x04\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x2218px\x22\ height=\x2218px\x22 v\ iewBox=\x220 0 18 1\ 8\x22 enable-backgr\ ound=\x22new 0 0 18\ 18\x22 xml:space=\x22\ preserve\x22>\x0a \x0a \x0a\x0a\ \x00\x00\x02\x22\ <\ svg x=\x220px\x22 y=\x220\ px\x22 width=\x229px\x22 \ height=\x226px\x22 vie\ wBox=\x220 0 9 6\x22 e\ nable-background\ =\x22new 0 0 9 6\x22 x\ ml:space=\x22preser\ ve\x22>\x0a \x0a\ \x0a\ \x00\x00\x04l\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a \ \x0a \x0a\x0a\ \x00\x00\x05\x1a\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff;fill-op\ acity:1;opacity:\ 0.1\x22 id=\x22rect416\ 7\x22 d=\x22M 16 2 C 8\ .244 2 2 8.244 2\ 16 C 2 16.16884\ 2 2.0195214 16.3\ 3264 2.0253906 1\ 6.5 C 2.2891326 \ 8.9794325 8.4128\ 418 3 16 3 C 23.\ 587158 3 29.7108\ 67 8.9794325 29.\ 974609 16.5 C 29\ .980479 16.33264\ 30 16.168842 30\ 16 C 30 8.244 2\ 3.756 2 16 2 z\x22/\ >\x0a\x0a\ \x00\x00\x04\x0f\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x11.\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x04l\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a <\ path opacity=\x22.2\ \x22 d=\x22m5 28.471v1\ c0 0.847 0.6543 \ 1.529 1.4668 1.5\ 29h19.066c0.813 \ 0 1.467-0.682 1.\ 467-1.529v-1c0 0\ .847-0.654 1.529\ -1.467 1.529h-19\ .066c-0.8127 0-1\ .467-0.682-1.467\ -1.529z\x22/>\x0a \x0a \x0a\ \x0a\x0a\ \x00\x00\x03\xd9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x06l\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2232\x22 heig\ ht=\x2232\x22 version=\ \x221\x22>\x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \x0a\ \x0a\x0a\ \x00\x00\x05\xb7\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a <\ path id=\x22path413\ 9\x22 d=\x22M 7.642578\ 1,9 16.169922,18\ 24.380859,9 20.\ 501953,9 16,13.7\ 65625 11.498047,\ 9 7.6425781,9 Z\x22\ style=\x22fill:#ff\ d242;fill-opacit\ y:1;stroke-width\ :1.85714281\x22/>\x0a<\ /svg>\x0a\ \x00\x00\x03%\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x01i\ \x00\ \x00\x06\x9ex\x9c\xcdU\xdb\x8e\x820\x10}\xf7+&\ \xf5e7\xd9\x96v*\x88\x1b\xf1_\x08\x82%Q1\ \xa5\x11\xdd\xaf\xdfv\xa1\x08\xeb\xe5Q\x0d4\x1df8\ =\xa7\x9dCX\xd6\xc7\x0d\x9cv\xdb}\x9d\x10e\xcc\ \xe1;\x08\x9a\xa6a\x8dd\x95\xde\x04\xc89\x0f\xec\x1b\ \x04\x9armTB$\x12Py\xb9Q\xa6\x8d\x8f\xb9\ \xae\xcbj\x9f\x10AV\x13X\xea<3P\x94\xdbm\ B\xa6\xf9b\x96F\xb2Gb|A\xba\xf8\x94\x10*\ 9\x81s7k\x9b\x10,\xb4\xc1\xb9\x0b\x8cN\xf7u\ Q\xe9]Bv\xa9\xd1\xe5\xe9\x83\x7fQ\xe1n\xee\xae\ O\x128\xcaCj\x94\xa7,\x8a\x82@uH\xb3\xd2\ \xd8E\x98 \xb0\xb6X\xc9B\xc0\x8cr\x16K\x01\x9c\ \xda\xb5\x81\xb3(Z\xfcEv\x1cE\xc6}u\x98w\ \xb3\xc20\xebJ\xd0\x03\xc1\x03i\x8f\xa4=\xd2\x0fE\ 1\xfc\x19H\xbc\xc8\x92\xad\xac\xb9]$~(\xcbR\ \xc3@\x97\xa7u\xa3v,}\x96\xb6b\xc2\xfbjn\ +\xc1V\x89\xb0{\x9b\xb10EwPN\x86\xdb,\ P\xffx#M\xaf\xf3\x0f\xd28\xe6\x1f6\xcb\xd3\xcb\ \xe7\xd1_m\x1f\x01\xe3\xd6\x05\xf7N\xfb\x9f\x0b\xae\x0e\ \xde#\xc7\x05\xe8\x5c0\xea\xf1\xb85\x0f\x0d\x82\xf2m\ \x1c\x82\x11\x88\xf9\xeb\x1c\xe2\xe8\xa3W8\xa4\xeb\x84\x08\ \xdf\xa6\x13\x22\x06\x14/\xfcV-=\x7f\x02\xfd\xd2\xfd\ uV\x93_U\xb6r*\ \x00\x00\x02[\ \x00\ \x00\x08qx\x9c\xedV\xdb\x8e\xda0\x10}\xdf\xaf\x18\ \xb9/\xad\xd4\x18{\x1c\xdf*\xb2\xff\x82r!H\x01\ V!\x85m\xbf\xbe3q\x12XA\xab\xdd\xc7J+\ \xa4\x8c/\x87\xe33\xe3\x09\x87\xf5\xe9\xbc\x85\xd7}w\ 8\x15\xa2\x1d\x86\x97\x1f\xab\xd5\xe5r\x91\x17#\x8f\xfd\ v\x85J\xa9\x15!\x04\x5cv\xd5\xd0\x16\xc2\xa0\x80\xb6\ \xdem\xdb!\x8d\xcfu\x7f\xda\x1d\x0f\x85\xd0\xe2\xf9\x09\ \xd6/\x9b\xa1\x85f\xd7u\x85\xf8\x92\xfb\x10+\x82T\ \x85\xd8\x1b\x05\xe8\xa4\xd3\xfa\x9c!JD,U\xa6\xa4\ w\xd1Qp\x98gZ\x9a\x10\xe99\x8d\xda\x0c\xad\xc4\ \x921\xde:P\xbc\x03\x84\xd41\x1f\x87\x0c\x0a\xf1<\ s\x01\xe3`dJ{\x11fTlG\xa6\x99\x88\xd7\ \xb3D\x94\xc3|\x5c\x88\xbf\xc5\x8a\xe5o\xe1\xf8\xb2)\ w\xc3\xafBHR>\xf4\x9b\xc3\xa99\xf6\xfbB\x8c\ \xc3n3\xd4_\xd5w\xfd\x8dse\xf4C@&\xad\ 2^C\x862\xc6\x98\xb07\x95\xc9\xfa\x9f]]\x88\ \xfa\x5c\x1f\x8eU\x95\xca\xa3\x95\x8c&B\xdc(iC\ \xf0\x08K\x1c?$8\x8f$^\xa2\xc1\x9c\x8b\xe2\xbc\ \xd14\x0d\x0e\x1d'\xe0m\x00\x94\x0a\xbd\xa33U\x9e\ ;0R\xb9\xe0:\xae_t\x5cW\xe3\xfcH\x1eU\ \x80%\x82fr-\x95\xf6\xccn#1uZ\xa2\xd7\ \x96\xf8\xb4\x8f\xfe/\x82Hnt*RT\xc6pq\ \x03zk\x89\x09\xd1s\xe9\xbd\xcb\x0dI\x09\xda\x1a\x22\ \xb2:\xda\xccH\x1f\x0c\xfe#A\x83\x1c\xa2\xf5!]\ \x06\xd5\xac\xaf\xcban\x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \ \x00\x00\x08\xd8\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a \x0a\ \x0a \x0a \x0a \ \x0a \x0a\ \x0a\ \x00\x00\x02\xfe\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a <\ g opacity=\x22.2\x22 t\ ransform=\x22matrix\ (1.5,0,0,-1.5,-8\ 14,-502.5)\x22>\x0a <\ path d=\x22m552-353\ v8.6667h2v-8.666\ 7zm0 10.667v2h2v\ -2z\x22/>\x0a \x0a \x0a\ \x0a \ \x0a \x0a <\ path opacity=\x22.2\ \x22 d=\x22m2 28.5v1c0\ 0.831 0.669 1.5\ 1.5 1.5h25c0.83\ 1 0 1.5-0.669 1.\ 5-1.5v-1c0 0.831\ -0.669 1.5-1.5 1\ .5h-25c-0.831 0-\ 1.5-0.669-1.5-1.\ 5z\x22/>\x0a\x0a\ \x00\x00\x01[\ \x00\ \x00\x05\x90x\x9c\xc5T\xedj\x830\x14\xfd\xdf\xa7\x08\ \xd9\x9f\x15\x9a\x98\x1b\xabk\x87\xe9\xbb\x88U#\xf3\x8b\ \x18\xb4\xed\xd3/\xb1j\xdd`\xb2\x95\x8e\x12\x827\x9e\ {\xce\xb97^\x0c\x9a6E\xa7\x22/\x1b\x81\xa5\xd6\ \xf5\xbb\xe3t]G;\x97V*u8c\xcc1\x19\ \x18u\xd9QK\x81]\x8e\x91\x8c\xb3T\xeak\xdc\xc6\ \xaa\xc9\xaaR`\xc0\x87\x15\x0aT\x1ci\xd4hU}\ \xc4\x02\xbf\x182\x1eNd\xe0\x1bJU\x87Q\xa6\xcf\ \x02S\xe6M\xba\xb0\xbf\xe9\xda\xf8\xd4\xa7\x9a$\xe2\x1a\ \x0de\x8e@M\xb6:\x0f\x81Va\xd9$\x95*\x04\ V\x95\x0eu\xfc\xbagk\xecL5\xdcL\xf8\xbfy\ <\xa8O\x80k\x11\x1c\xee)\x22\xc9\xf2\xdc\x94\x10q\ \xbb\x16m\xeel5\xfdz\x97\xb3\xcc>\xccm\xf2v\ C\xb6k;\x00(\xa8C-\xd1Q\xe0\x02\x18\x02h\ \x09H\xe0-\x5cz\xado\xe8v\x11}[B9\xb3\ \xe8n\x04\x03'\xfd\xeb\x97\x7f\xc8\xad\x1f]\xbb\x16m\ \xd8\x9d6}\xb7\x83M\x92$\xf3q2R\xfd5p\ \xea!\x88\x08\xa3;\x17\x10#F\x111\xea\xfb\xfb>\ 2\xbb\x85\x88\x8d\xe8\xfc\xbd}J\xf0\xa3\x01B\x13\x11\ \x8dD21\xc9\xc4\x1c\xb7$\xe0_~[\xa3k\x05\ \xd93k\x9c\x8f\xaf\xf7\xc3\xf8\x12o\xe3=}|\x03\ \xfb\x9f=\xac>\x01\x9a\x80}I\ \x00\x00\x08\x98\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a \x0a\ \x0a \x0a \x0a\ \x0a\ \x00\x00\x09\x0c\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a \x0a\ \x0a \x0a \x0a \x0a <\ /g>\x0a\x0a\ \x00\x00\x03\x8d\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \ \x0a \x0a\x0a\ \x00\x00\x05\x0e\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \ \x0a \x0a\x0a\ \x00\x00\x04\xc3\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x07\xa1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a \x0a\ \x0a \x0a\x0a\ \ \x00\x00\x04\xaa\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg2\x22\ width=\x2232\x22 heig\ ht=\x2232\x22 version=\ \x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x01\xe1\ \x00\ \x00\x06\xa7x\x9c\xd5U\xcd\x8e\x9b0\x10\xbe\xefSX\ \xee\xa5\x95\x1a\xf0\xf8\x07\x0c\x09{\xd9s\x1f\x02%$\ xK 2\xee\x12\xfa\xf4\x1d\xc3\x86\xb0(\x8d\xb6\xea\ \xa1]\x834\xe3\xcf\xe3\xf9\xfd\x10\x9b\xf6\xe5@\xce\xc7\ \xaan3Z:wJ\xc3\xb0\xeb\xba\xa0\x13Ac\x0f\ !g\x8c\x85hA\x89\xd9e\x14\x15\xe0\x94tf\xe7\ \xca\x8c\x0aT\xcb\xc2\x1cJ7\xea/\x85mMSg\ \x14\xe8\xe3\x03\xd9\xd8b\xebH\xeb\xfa\xaa\xc8hs\xca\ \xb7\xc6\xf5)\x0b\xf8zo\xaa*\xfd\xc4\x865lV\ \x97S\x18\xa3\xf8\x8b\x12d4\x05\xe2\xfa\x1a\xc8\xeb\xe7\ \x8c\xae\x04\x1a\xf7^2J,\x02 Q\xf6\xa3t6\ \xaf\xdb}c\x8f\x19=\xe6\xce\x9a\xf3g\xf6u\x05\xfe\ e\xfe\xf9B\xc3)\xbfK<~?\x18\xfb\x8b`\x97\ \x1e\x8cu\xef\x95\x96\x00\xcb\xba\x87\x84N\xb9+\x17\xc6\ \xc3Z\x18\xafg\xcd\x9c7Lar\xb8\xf9F \x22\ \x9c<\x11\x1dp)Q\xe3\x93\x86\x07O\x83\x08 \xd2\ Z\xe2Q\xc0 Q\x1c\xa4\xc7\x84\xe0\x91\xf4\x10W\x22\ a\x91\x87\x94\xb7\x0f\xb8N\x00\xcf\xd0M\x12'Rp\ \x85\x9a\x04\x8euh\x22\xbcS\xe1\xcdD\xa0t\x0c\xca\ C<\x09b`:\x8agW\x10Kb\x19\xb1d\xf2\ \x8b\x80f2N\xae\xb1\x05\x9b\xe56l\xd0\x0e\xe5k\ \xfe\x22\x88U4\x96\xc1\xc9\xcf\xd9\x10\xff\x8cd\xeb\xd6\ \xd9\xe6{\x91\xd6M]\xbc\xea\xaba\xf6\xa9\xbcl+\ S\x17\xdb\xfc\x94\xda\xe6G\xbd\x9b\x83\xcf\x8d\xa9\xdf\xa2\ G\xe3\x0a[\x19\x14\xd7\xeb\xbb\xbc-sk\xf3\xfeM\ \x8c\xdb,\x17\x13\xf1\xd4\x95w\xfe#\xf34\x1bi\x07\ 0\xb2\x8e\x8f\xa4\xe37\xe8+A\xc4\xefp\xc4\x16\x8e\ \x96\x9d\x83\xf5=\xde\xfd\xf3\xbe\xdd\xaa[\xaa{u\xc7\ \xb7\x1b\xf8\xe1\x18\xf3[\xae\xff\xe7\x13\x9b\x0f\x0a\xde1\ \xa8%A\xb1\xee\x8d\xff\xfd<>\xfc\x02\xa1\x97\x0c0\ \ \x00\x00\x01N\ \x00\ \x00\x04\xb6x\x9c\xc5T\xedn\x830\x0c\xfc\xdf\xa7\xb0\ \xb2\xdf\x09\xb1\x03!L\xa5\xefR\xd1\xd2 \xf5K-\ \x82\xadO\xbf\xb8M\x11\xac\x9b\xb4M\xda&\x84\x88c\ \x9f\xef|\x10\xe6\xe7n\x03/\xbb\xed\xfe\x5c\x0a\xdf\xb6\ \xc7\xe7$\xe9\xfb^\xf5F\x1dN\x9b\x84\xb4\xd6I\xa8\ \x10\xd07\xab\xd6\x97\xc2\x90\x00\xbfn6\xbe\xbd\xad\xbb\ \xf5\xe9\xdc\x1c\xf6\xa5@\xb1\x98\xc1\xfc\xb8l=\xd4\xcd\ v[\x8a\xa7\x8a\xf8\x12\xb0*\xc5\xaeP\x19`%\xb5\ \xc24/@\x87\x05\xb9\x1cA+M\xce\x85(%,\ 8\xb2.\x0d\x0f4\xd6\x86Mm(\x0f\x11\xe5\xc8%\ 1\xc7\x951\xba\xec$\x86\xbe\xa6\xc3Te\x95\x0eI\ g\xb8\xa7\xb5\x05p\x22\xde\x1e\x8b*\xa68\x94C\x01\ \xa3;\xc9`/\x89.\x22\x19&8\x1c\x97U\xd3\xbe\ \x96BE\xfd\x0e\xd0\x85b\xfc9\xcb\x1d9M\x5c\x91\ 2@e\xc4\xca\x01+c\xc9XWtve\xf8\xba\ )#\xc0_0 \x12Yc\xd7y$2\xdcLO\ \x84\xc2 \x94\xbbuLE\xd4q\x5ci9\x9a\xf6>\ \xca'\xe3\xd4u-F\x96\xe3\x97\xf9\xee,\xd3}\xf9\ 8\xf2\xd4\x93\xeb\xdb\xf8\x86\xbel\x19|\xc8\xdf}\xc8\ cQ\xd9/Y\xf0!\xd9\x9f:\xf0p\x10\x08(\xff\ \xcf\x830\xe7\xbf\xd1b\xf6\x06\x15a\x11<\ \x00\x00\x12\x9c\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 width=\x2232\ \x22 height=\x2232\x22 ve\ rsion=\x221\x22>\x0a \x0a \x0a \x0a\ \x0a \x0a\x0a\ \x00\x00\x05\xcf\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x09\xac\ \x00\ \x0078x\x9c\xed[Ks\xdb\xc8\x11\xbe\xef\xaf@\ 1\x95rRE@\xf3~P\xd6Ve/\xb9h\xf7\ \x90\xdc\xf6F\x91\x10\x85\x18$\x14\x10\xb2l\xfd\xfa|\ \xdd\x03\x82\xa0\x1e\xd4:\xa9\xec\xda2\xa5\x830\x8d\x9e\ \xe9\x9e~\xcd\xd7\x00\xf4~\xfbq\x95}Z\xd7\x9b\xed\ \xc5\xe4\xa6\xebnggg\xf7\xf7\xf7\xc5\xbd.\x9av\ u\xa6\x84\x10g\xe0\x98d\xd5\xf2b\x82\x0b\xe9&\xd9\ }\xb5\xecn.&ZM\xb2\x9b\xb2Z\xddt\xe9\xfa\ c\xd9n\xabfs1\x91\x93\x1f\x7f\xc8\xde\xdf\xce\xbb\ \x1b\x9eE\x17F\x06;\xc90\xf89\x93\xb2\xd0Z\xda\ \xa7\xba\x10\xfc\xa3\xb3\xbfe\x0aDmm\x98\xf2\x85\ \x91&f\x82\x7fc\xe1\x82\x0c&8\xb0\xbb`\x8c\x13\ 1\xbb\x04\xbb\x0b\xca\x07\xa7\xa7R\xe0R\x8bh\x8f-\ \xa2H\x92\x14\xb8#q\xcb\x1a\x97\xd5\x99(DP\xd1\ \xe8i\x04\xb3\xf2\xcae\xf3\x97\x17\x80\x10\xaf\xad\xb3S\ Y8\x19\xad\xa5\x05\x5c\x11\xa5\x932\xea)\xaeb\xb4\ \xe6\xa8\x0a\xbcme\xc0\xad\x05\xb1\xa7m`]\xe7\xbc\ \x00Q\x1e\x13\x0f\xa9&z\xad\xa7\xb9HFH\xe2\xb1\ \x0a,\x90\xd3Up\xd0\xe9\x98\x05b\x12:U\x92D\ j\x03\xe9Z\xb09\xb0ya^\x99\x0b\x87\x99\x18F\ \xc6\x86\xee`\x93\xceH=r\xcc\x91-\xe4\xb20V\ \x05\x1by\x0f\xdej\xe3\xdc\x11nQ\xc8\xe8\xe1`\xe2\ \x16p\x146\x9c\x93\xa3\x8c\x92S\x5c\xc827\xd9\xc3\ $\xdbv\x9f\xeb\xf2b\xb2h\xea\xa6\x9d\xfd)\x85\xd3\ \xf9u\xb3\xe9r\xbe3\xdb4\xedz^'\xca\xc7y\ [\xcd7\xdd\x01\xed\x9e\xe3\xf7\x80\xb4\xed\xda\xb2[\xdc\ \x1c\xd2\xaa\x87r\xb6.\x97\xd5\xdd\xfa\xbc\xae6e~\ \xf3t\xde\xf5|]\xd5\x9fg\xdb\xf9f\x9bo\xcb\xb6\ \xba>\xef\xcaO]^m\x96%\x84\x8a4\x9a\xd7\xd5\ j3\xdbv\xf3\xb6K\x84e\xb9h\xday\x87\xbc\xc1\ b\x9b\xf211'i\xcf\xdfI\x1b\xdc6u\xb5|\ r\xef\xd0\x1eu\xd9ue\x9boo\xe7\x8bj\xb3\xda\ )}\xdf\xb4\xcb\xc74^\xa7k\xb1\x85k\x10\x92\xdc\ e\xd5\x96\x0bV\xb0\xee\xda\xf3\xab\xbaY|\xc8o\xdb\ f\xd5\x96[J\xf7Ywu~\xdfV\x1dV\xc9\xd7\ \xcd\xb2\x9c\xd5m\x0e\xd2\xd5|[\xb2\xa5\xb67\xd5u\ 7\xdb\x0d{+l\x167\xd0/\x99\xe1\xfe\xa6\xeaJ\ Vdp\xd7\xa2\xaen\xf3\xf6\x8e\xfd\xb7y(\xdb\x06\ Jlo\xeb\xf9\xe7Y\xb5\xe1U\x1a\xd4\x9a\xeb\xba\xb9\ \x9f}\xac\xb6\xd5U]\x9e\xf3\xdf\xaa\xae\xba\xcf\x03\xa9\ \xa1\xada,\x0au^\xc1L\xc9\xc8\xf3\xbb\xae9_\ W\x9fr\xb0l\x96I\xe3\x9dT2\x1a\xfc\x05[\xdd\ \xee\xd8\xb7\xff\xf8\xfbO\xcf\xdd\xc8\xaf\xab\x1a\xc3\xed\x8c\ \xd4\x99\xb7\xc4\xc5\x9exd\xf9D\xdbi\x22\xcf1\xab\ \xde\x87)\x06\x8f\xee\x1dn\x1a\x91\xd8|\xe8\xbd\x9f\xae\ s.\xbd3W {\xa4\x14\xda\xec\xe8\xa4\xc6b~\ ;k\x9b\xbb\xcdrL\xfcWSm\x0e\xa9k\x98\xbb\ \xad+\xfc\x99\x0d\xd3\x97\xf3\xed\xcd\xbcma\xe0\xb10\ \xa26\xd7\xd7\xdb\x92\xc2\xb7\xa7\xed\xf5MViaE\ \x04;B\x88-[\xad\xe7\xab\xf21\x11k\xdf>!\ r <\xa2\x95\x9b9\xdc\x92_\xcd\x17\x1fV\xac\xf3\ l\xbeX\xdc\xad\xef`\xf3rr6\x1c*\xa7\xa4?\ %\xfd+I/\xbf\xb2\x94_^\xe9\x85>\xa5\xfc\x17\ \xa6\xfc\x1e>*+\x9e\xc0G\xf5e\xf0Q=\x0b\x1f\ c\x024\xe0\xffm\xf0Q\xfe\xe1\xf0q\x87\xe4\x0e\xe1\ \xa3\xf8\xbd\xe0\xa38\x80\x8f\xf2\x8b\xe0\xe3\xde\xd8@s\ I\x81`w\x0a`\xcd\xdf\x1b>\x9e=\xd7\xa7\xf8}\ \xa09\x01_\xc7\xa9\xcb,\x01\xe54\xca,\x1c/\x84\ \xa7\x00\xc4\xee\xa3\xb1\x80\xee{^\xe5i3\xc2xr\ \x8e\x8e\xcazh\x172\xe5z\xf2h\x92\xf2iUo\ \x94\x1aq;(\x8c\x189X\xd5e\xbffk\xb8Q\ iAC\x0d\xef\x11\xf6\x16n*\x127\x05\x83\x99J\ ]\x04c\x11\x0f\x99\xd2\x83<\x98\xc2:e3\x89m\ [\xa1#\xf4\xc6@\xf5\x9cSev\x0a\x87BX\xc7\ \x8b\x0es\x02/\xa9u\x0c\x86\xa7h\x1b5\xdc\x98\xfd\ zB\xde\xa7C\xf8{D\xde\xe1;:}O\x80\xfb\ \x94\xeb\xdf,\xe0\xbe\xe6\x9fS\xa6\x7f!\xce\x96A=\ \x86?\x19\x81\x0b;\x1a_\xee!P\x82-\x8cf.\ G\x1c\x03\xdaI\x185\x01\x1b\xe0\x1d\x1a\xba\x03|\xd4\ O\xc5-\x9e\xcdPh<\xc7\x0e`\xe8\xf2@\xa3\x87\ \xec\xe7= \xc9\x02\xdd%x\xa3\xb41\x84c\x869\ \xca\xec\xa1\x0e\x0dw\xb0(\xb1\x13\xc4\xb9\xdc\x03#\xe2\ \xbe\x1c\xf1\xef\xb9/\xf7\xe0h<3$\x1d\x18\x1e]\ \x1e\xe8\xd3c\xcb\x15[v\x05\xb3\xc6I6d\xfc\xc5\ d=\xef\xda\xea\xd3_D\xe1\x95\x0dBE;\x15\xf4\ KCo\x83\x03l\x05\xdc\x95\x11\xc8:\x10\x82%\xb7\ \xc0\xdc\x7f\x1dP\xd7\x0b\xb5\xf7\xb9:K5\xd5\x88\xdb\ O\x07\x15U*\xfb\xe7\x97\xea\xe9\xa3:FS\x0f\x8a\ \x18\x11\xc6'\xfc\xb1\x93\xf5\xc5\xec\x92X\xe4Q~]\ \xddu\xdd\x93\xf4\xe2\x8cz\x92 \xf4~\xe1\x09p\x8f\ \x92#\x1709\x14* \x10\x80}-\xda\x00\xeb|\ \xcc\xfe\x9d\xf5\xe6\x15\xd1Sw\x80HA_\x88vL\ \x1a\x8e3&\x09\xa1\xa6dloB\xea7\x10Fn\ O\x11E\xb0.\xa2\x8b\xe2n\xc4R\xf3\xc6\x1d\x95V\ J9K-!\xb9\x8d\x224\x04\x12XX(\x15i\ Ie\xa4\x8b\xe8M\xd0\xf1Y\x0b\xd8\x8f9FX\xef\ @\xd1\xdeKtF\x80\xf11`\x1a\xf5g\xc1x?\ \x22ht\x8e\x1a\x01B\x0bz\xa9\x02w@P; \ U\xb0\xb4\x90X\xfc\x05\x92Q&\x08Kz\x11\xa0\xf7\ \x86\xb7.\x82Ok\xa0\x01\xd6\xea\x80\x22\x95\xb1\x92I\ \xca\xc1\x9b\x89K\x07\xa1y\xa2t\x94\x17\xcc'\xb5E\ \x02P'\x16\x95\xd4\xcc\xa7\x91\x12\xe8\xbfHj\x14^\ \xe94Wx\xa9\x89\xe6\xb5\x13\xc1\xb0NFK\xc9s\ !L;\xc9|\x10,X.\xb20\x98\xa4;z\xeb\ \xc0|\xd28\x93\xe6\xaa\x00[\xa9C\x9a\xb3\x98\x92\xb6\ \xe8\xa50\xd4\x02\x16\xc6\xa3\xdb\xe5$\x920\xbc\xd1D\ \xa24eE\x91\xc3X;\xa3\xceU\x8b>\xbf\x12\xa9\ \xf74\x9b\xdaG\xe3\xfc\xd8/0\x03u\x9f{\x02s\ \x90\xa3\x92\x1dkV\xdf94\x98\x08\x94\xa0\x10*\x08\ \x02v\x02v\x94\xcc\xe6\x11j\xac>ij\xa7;\x1b\ $\x8b\xd3*\xdc\xae\xbahS@\xa2\xdbO~\x1cH\ \x1cjn*\xb2\xc1@S\xf2,\x1c\x9e<\xe4\x95\x94\ qGr\x07$\xb6\xac\xe54\xe8'\xf4\xeb\xd2\x0e\x9c\ v^\x8d\x08RPCN\xb1\x846\x9a\x03VI'\ \x10\xe44\x99,\xc1<\xcaj\xb26$\x18\x0a\xd0>\ R\x89b\x05=m\x00\xc5\xc2V(\xb6\x05j\x9c\xb0\ z\xbac\xcev\xfb\x1dX\xf6\x84\xdev\x0f\xaf\x15\xbb\ #@\xf3\xaa\xa9\x97\xaf\xc0L_X\x94\xa0q\x09|\ \xf7K\xd35\xd9?Q\x08\xdf\x9d\x03\x88|\xd8.\xe8\ hM3n\xcbEu]-\x12^\xd93f?A\ \xd0\xbbc\x15\x90\x8f\x81\xa7\xa5J\xf7\xa5\x8a\x1e\x06`\ \x84X\xc5\xb9\xe8\x822\xe8\xe4)j)\xbd\x0c\xc5\xe1\ 47\x88N\x8ap.Hp\xb8Od\xd4\x12c0\ !3\x850*:\x8e\xda\xe9@=\xe4\xde\xad\xf1\xa6\ mjw6\x0d\x88u\x11\xe8Y\x0c\x9f\xdf\xd2\xa5\xf2\ \x0fS\xab\xa8SVp\xd1\xa0\x07\x88F\xa3\xa4\xed(\ \x9e\xf2\xc4\xa3xJI\x06\x0c!:\xaa\x06#R\xff\ \xfcE\x8cn\xe7\xfb\xfb\xbbu\x9f#A\x96e\xc4\xc4\ \x87\x04<\xee(\xe6\xf77u\xf4\x91\xd2\x02\x05$\x18\ .\x8a^\xa0\x00Q\xee@\x0e\x92\xf0\x80\x04\x9c#5\ \x0a\x0d\xddEU\x0a~:\xaa~\xceZ+\x9f\xa3\x0c\ \xfb}\xc8\xd6Y\x0e\xe3\x00oyZ%\x9d\x8e\x01R\ $i\xc5\x87\x93'\x83YH\x09;\x0a\x1f\x858\xd3\ P\xa9\x91\xd02\x08w@A\x22;\xa3Y\xa7\xfe\x92\ \x8c\x84\xe3P\xa5=\x07\x11\xe9A\x5c\xde/\x1b\xc74\ z\xa4\xe7MoX\x01-T\xe0\xa5\xbdw\x86\xeb\x9e\ 1J\xc7\x9d49\x22\x0dJ\xbe\xe9\xd8\xf6}lk\ \x18\xcah2\xbc\xa2G}\x80\x8ej\x87\x10\x5c\xf2\xe3\ \x0e\xd9\xf0\x19\x16\xb4\x8b\xe9\x80\xe5\xe0\xcb\xd2\xb9\xdeS\ \x827c\x82\x13\x84\x16Ri\xc1I)9+\xfa\xf2\ O\x87Q\x886\xc6D\xc3I\xc0G\xaf\x8c\x88'v\ ^\xc0\x91\xae\xf6$>\x0b\x01\x90\xb4MeI\xd2t\ m-\x07\x9e*\xac\xd3\x04q\x08P\x99H\x0f\xe4\xfb\ \xf8s\xc0b\xfd\xc9\xc7\xc0\x892V\xd1\x16\x89\xa4\x03\ \x9f(\x1c\x13\x9a\x01\x18E\x80\xd9\x93X\xa8\x09\xc8\x11\ \xd9\x0b\x8dT\x19\xfd\xe3\x82j\xe9\x09\xbe\x10\x84\x00\x90\ J\xec\x0c\x17\xbd\x91*\xe5\x14\xf0\x83a\xe0fp\ x2|\x00n\x14I>c\xc1\x81\x80T\x84H\xff\ \xa6\x8e\xab\xf7g\xab\xd4\xbb|%\xcd\xc6\xb1\x86\xfe\xff\ \xd5`p\xf2Q\x1fm\x947\xff}\xeb&\xf7\xad\xdb\ >\xaf\xbf\xad8y\xd6\xee\xe37sQ\x9d\xfa\xaeS\ \xdfu\xea\xbb\xdeL\xdfu\xf6vK\x95\xf9\xa3\xfa\xae\ 7lSw\xea\xbb\xbe\xef\xbe\xeb\x0d\xc7v8\xf5]\ _}\xdf5jYN/\xabO/\xab\xbf\xcd\x0fS\ \xfe\xe7\xd7\xd5\xdf\xf9\xf7\xa1\xa8[\xe3\xefC\x95\xa0\xef\ \xebF\x1f%f\xcf~\x17\xca\xefs\xe9[\xd0\xf4\xda\ \xf6rt\x1d\x87\xab#\x8b(\x96f\xfb\xb7\xe2\xf4\x95\ (\x90F\xfa\xbaN\xa2\xd4:\xf7\xf2d9\x92\x95\xfe\ \xab\xc6Fz\x89\xbc\xd7K\xbf\xae\x81\x1c\xedV\x0f\xdf\ \x83\x0a\x89\xc9G%S\xcd\xd7h\xea2\xfa\x0f\xac\xe8\ \x0f\xbf\xfd|\xca\xae\xfa\x8f\x0dG*]\xa6\xaf:\xd3\ \x0b\xf1A\xfd#\x8bh\x91\xa5\xff5\x12\xfc^^\x8b\ \x91\xea\xc7,\x0a \x0a\ \x0a \ \x0a \x0a \x0a \ \x0a\ \x0a\ \x00\x00\x03\xc8\ \x00\ \x00\x0dVx\x9c\xddW\xcdn\xdb0\x0c\xbe\xef)\x04\ \xef\xb2\x01\x89#Q\x92ee\xcd.\xb9f/\xb0[\ \x90\xa4\x8d7')\x1coi\xfa\xf4#)\xd9\x96\xfb\ \xb3a\xd8\xa5XjH\xa4L\x8a\x1f\xa9O\x92{s\ \xfey'\x1e\x0e\xf5\xf1\xbc\xc8\xf6m{?\x9f\xcd.\ \x97K~\xd1\xf9\xa9\xb9\x9b\x81\x94r\x86\x16\x99\xa8\xb6\ \x8b\x0c\x05\x80L\x5c\xaam\xbb_d\x1a\xc5\xfd\xae\xba\ \xdb\xb7A\xfe\xb9k\xce\xd5\xe9\xb8\xc8T\xf6\xf9\x9d\xb8\ iv\x9bV\x9c\xdbk\xbd[d\xa7\xfb\xf5\xa6j\xaf\ s\x99\xc3\xa7\xdb\xaa\xae\xe7\xef%\xffX\x99voU\ \x88B\x8eFY\xdb\x07\x82r\x08D\xf2\xc3\x22\x9bj\ 4\xbeR/3\xd1\xe0\x80\xca\x0d\x0a\xd7(\xb4\xcd\xfa\ x\xbe=5\x87EvX\xb7M\xf5\xf0AN\xa6\x8a\ \x1eI\x7f\x1f\xb3Y\x8f\xb0\x8b\x08\xbf\x0f'\xff)\x5c\ W\x87.woK\xf74w\x86t\xbfn\xf7\x7fY\ \xb4O\xe7\xb69}\xdf\xcd\x8f\xa7\xe3.\xcaS\xced\ n:\xb5\xae\x8e\xbb\xcd\xfa~\xde\x9c~\x1c\xb7\xe9\xe0\ \xb7Su\x1c\x8f\x1e\xaav\xd7\xd4\x15v\x83\xfbv}\ \xde\xaf\x9bf}\x1d\xc5x\xb2j\x84\xdc(\x8f\x1a*\ _\x84\xcf\xad\x03(l1)\xc5R\x94\xb92\xae\xf0\ \x06Ps\x13\xdfi(+\x19\x0c\x0b\xb1\x22\xcd\x88Z\ \xe8\x89\x14T\xbf\xdcz_H\x8f\xeeJN\x94\xca\x0b\ 0\xce+T\xa2\x84c\x02\x87\x8d\x94:(+\xa14\ \x0fj\x0c\x93\x02\xf8*\xbe\x08\xe5Q\xa8qb-\xba\ \x991\xceR\x80\xca\xb5\xb3\x80\x1az\x02$\x81H\x81\ 8=\xceMj\x02O\xe7\x06\x9c\xd3\x86\xa6\xb0IJ\ \xa0\xf3\xd2\x82\x96\x14\x17 \x1a\xa1\xbc\x0a\x08\x08\x8a\x9b\ \x80\xa4&\x99\x025\x13\xfd\x92bA\x91\xa4\x01EH\ \x10{ju\x92;*\xcb\xa4.\xf4NN0xH\ \x8c\x95\xbe\x9a+Ve\x00\xf1U\x1c\x84\xb2\x9cPR\ n\xcctp\x1e\xea\x83\xd3\x82\xecJ\x87\x0ag\x84}\ (j\x97L(j_\x04D\x8b\xe5\x19\x92#\xa5\xcf\ {\xc5\xaa\xe4\x80\x08&\xd9\x02\xc39`\xe0\x19\xa3\xdc\ \x88Q\x0eS)\x13F\xf5v\x81Q\xfaUF\xc9\x17\ \x18%SF\xc9\xc8(I\xad\x1b\x01\x88\x8cr\x7f`\ \x14\xa76\x04\x0a\xf4\x1a1JS\x09B;\x00gJ\ \x95/P\xca%\x94ra\x01\x5c\xa4\x94\xf2\xb4\xa40\ \xa2\x94~\x81R6\xa5\x94\x8d\x94\xb2\xdcBJ)\x18\ S\x0a\x22\x8b\x12J\xc9\x11\xa58>6\xafSJ\xbd\ @)H)\x05\x91R\xf0\x07J\xd9\xc8\xa2\x84R0\ \xa2\x14\xc2\xa0\xda\x22\x98\xec\xe9a\xaa\xe2Qz\xcb\xbf\ 7w\x94>\xbb\x04~\x876\xb9 F7\xa7\x8c;\ F\x87\xc5\xa4\x12Q\x01\xc3Z\xb2\x06#m\xb0\xc3\xea\ \x09\xd3kK~\xd7\xdb\xf5\x92N<\xe8\x18\x80\xb2[\ h:\x87\xc0w\xeb\x8cv2\x99\x00\x15\x93D\xe2w\ C(T\x13L\xfd\x1c\x90\xccN\xfcHsz|r\ `\xc4+Hs\xfa\x07\xde\xba 6b\x8a\x0c\xb3D\ \x22\xba\x8fsc\x0a\x12\x142\x8c\xc7\x05\x0f\xa1Nc\ \xb5(\xd0n#:\x0f\xbc\xc3\x83\x07]\xe6t\x84\x04\ \x970HC|\xcb\xa3\xdb\x94\xfc\x1e\x91\xfarb\xfe\ \xf7\x90\xcf\xf6\xd4\x9b\xff@y\xf5\xd3\xaa;\x0d\xbc\xde\ \xc2f\xf3\xe6p'\x9b\xba4qS+\xba\xf8\xe9l\ \x86\xb0d\xb8\xa4\xe1\xdc&\x05\xe8Y\x86\x9e\xd7\xb0\xb3\ \xd2\xf1\xa1\x03\x96z\xb4\xf1\xc1\x80.\xf5\xce\x9a%\xda\ \xc2\xb2\x9f1Z)\xf6\x0b\x9fX\xd4?\x8a\x80\xc4&\ H,\xc7\xb5=\x92\x22\x22)FH\x1c\xfb\xb9\x88\xc4\ %H\x1c\xc7-z$EDbGH,\xfb\xd9\x88\ \xc4\xf6H|\x82\xc4s\x5c\xdf!\x01\x19\x90\x80L\x91\ \x80\xe2\xe4U@\x02j@\x822}\x94\xc8\x0e\x09\xfb\ \x13\x12?B\xe2\xe3\xb3\x8a\xf1\xf98\xba\xa1\xff\x96>\ \xbf\xfb\x05\xd7\xb3D'\ \x00\x00\x05\x83\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a\x0a\ \x00\x00\x05J\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg16\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x08\x06\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 id=\x22svg12\ \x22 width=\x2232\x22 hei\ ght=\x2232\x22 version\ =\x221\x22>\x0a \x0a \x0a \x0a <\ path style=\x22fill\ :#ffffff\x22 id=\x22pa\ th10\x22 d=\x22M 12.02\ 7815,10.000259 A\ 1.0046462,0.972\ 79894 0 0 0 11,1\ 0.973525 l 0,10.\ 053967 a 1.00464\ 62,0.97279894 0 \ 0 0 1.506798,0.8\ 42274 l 4.495642\ ,-2.512825 4.495\ 643,-2.514091 a \ 1.0046462,0.9727\ 9894 0 0 0 0,-1.\ 684483 l -4.4955\ 74,-2.514492 -4.\ 495574,-2.513158\ a 1.0046462,0.9\ 7279894 0 0 0 -0\ .479188,-0.13065\ 8 z\x22/>\x0a \x0a \x0a\ \x0a \x0a\x0a\ \x00\x00\x0b=\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \ \x0a \x0a \ \x0a \x0a \ \x0a \x0a \x0a .C\ olorScheme-Text \ {\x0a color:\ #f2f2f2;\x0a }\ \x0a \x0a\ \x0a \x0a\ \x0a \x0a\x0a\ \x00\x00\x070\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \ \x0a \ \ \x0a image/svg+xm\ l\x0a \ \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a \ .ColorScheme-Tex\ t {\x0a colo\ r:#f2f2f2;\x0a \ }\x0a \x0a \x0a \x0a\x0a\ \x00\x00\x06\xe2\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \ \x0a \ \x0a image/svg+x\ ml\x0a \ \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-Te\ xt {\x0a col\ or:#f2f2f2;\x0a \ }\x0a \x0a \x0a <\ path\x0a style=\ \x22fill:#4d4d4d;fi\ ll-opacity:1;str\ oke:none\x22\x0a d\ =\x22M 10 4 L 10 11\ L 3 11 L 3 12 L\ 10 12 L 10 19 L\ 11 19 L 11 12 L\ 18 12 L 18 11 L\ 11 11 L 11 4 L \ 10 4 z \x22\x0a cl\ ass=\x22ColorScheme\ -Text\x22\x0a id=\x22\ path4\x22 />\x0a\ \x0a\ \x00\x00\x03\xb9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x07P\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \x0a\ \x0a \ \x0a image/svg\ +xml\ \x0a \x0a \x0a \ \x0a \ \x0a \x0a \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07\x91\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Co\ lorScheme-Text {\ \x0a color:#\ f2f2f2;\x0a }\x0a\ \x0a \ \x0a \x0a\x0a\ \ \x00\x00\x0b\xc7\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ \ image/svg+xml\x0a \ \x0a \ \x0a \ \x0a \ \x0a <\ /metadata>\x0a \x0a \x0a .C\ olorScheme-Text \ {\x0a color:\ #f2f2f2;\x0a }\ \x0a \x0a\ \x0a \x0a \x0a \x0a \x0a<\ /svg>\x0a\ \x00\x00\x09\xd6\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ imag\ e/svg+xml\x0a \x0a \ \x0a\ \ \x0a \x0a\ \x0a \ \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a \x0a <\ path\x0a style=\ \x22color:#f2f2f2;f\ ill:#4d4d4d;fill\ -opacity:1;strok\ e:none\x22\x0a d=\x22\ m 8.2033898,11.9\ 74577 -6,-6.2510\ 009 0.719,-0.749\ 4.125,4.2980005\ 1.156,1.2370004\ 1.156,-1.237000\ 4 4.1250002,-4.2\ 980005 0.719,0.7\ 49 -4.125,4.2980\ 009 z\x22\x0a clas\ s=\x22ColorScheme-T\ ext\x22\x0a id=\x22pa\ th4-3\x22\x0a inks\ cape:connector-c\ urvature=\x220\x22 />\x0a\ \x0a\x0a\ \x00\x00\x06\xe6\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Co\ lorScheme-Text {\ \x0a color:#\ f2f2f2;\x0a }\x0a\ \x0a \ \x0a \x0a\x0a\ \x00\x00\x08\x02\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \x0a \ \x0a \x0a \x0a \ \x0a \x0a \ .ColorScheme\ -Text {\x0a \ color:#f2f2f2;\x0a \ }\x0a .Co\ lorScheme-Highli\ ght {\x0a co\ lor:#3daee9;\x0a \ }\x0a \x0a \x0a \ \x0a\ \x0a\ \x00\x00\x06\xe4\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata9\x22>\x0a \ \x0a \ \x0a image/svg+x\ ml\x0a \ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Col\ orScheme-Text {\x0a\ color:#f\ 2f2f2;\x0a }\x0a \ \x0a \ \x0a \x0a\x0a\ \x00\x00\x06\xd7\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Co\ lorScheme-Text {\ \x0a color:#\ f2f2f2;\x0a }\x0a\ \x0a \ \x0a \x0a<\ /svg>\x0a\ \x00\x00\x0ay\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ image\ /svg+xml\x0a \x0a \ \x0a \ \x0a\ \x0a \ \x0a <\ sodipodi:namedvi\ ew\x0a pagecolo\ r=\x22#ffffff\x22\x0a \ bordercolor=\x22#6\ 66666\x22\x0a bord\ eropacity=\x221\x22\x0a \ objecttoleran\ ce=\x2210\x22\x0a gri\ dtolerance=\x2210\x22\x0a\ guidetolera\ nce=\x2210\x22\x0a in\ kscape:pageopaci\ ty=\x220\x22\x0a inks\ cape:pageshadow=\ \x222\x22\x0a inkscap\ e:window-width=\x22\ 1366\x22\x0a inksc\ ape:window-heigh\ t=\x22736\x22\x0a id=\ \x22namedview8\x22\x0a \ showgrid=\x22fals\ e\x22\x0a inkscape\ :zoom=\x2210.727273\ \x22\x0a inkscape:\ cx=\x22-16.826271\x22\x0a\ inkscape:cy\ =\x2211\x22\x0a inksc\ ape:window-x=\x220\x22\ \x0a inkscape:w\ indow-y=\x2232\x22\x0a \ inkscape:windo\ w-maximized=\x221\x22\x0a\ inkscape:cu\ rrent-layer=\x22svg\ 6\x22 />\x0a \x0a \x0a .Col\ orScheme-Text {\x0a\ color:#f\ 2f2f2;\x0a }\x0a \ \x0a \ \x0a .Color\ Scheme-Text {\x0a \ color:#f2f\ 2f2;\x0a }\x0a \ \x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x08\x07\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Co\ lorScheme-Text {\ \x0a color:#\ f2f2f2;\x0a }\x0a\ \x0a \ \x0a .Colo\ rScheme-Text {\x0a \ color:#4d\ 4d4d;\x0a }\x0a \ \x0a <\ /defs>\x0a \x0a<\ /svg>\x0a\ \x00\x00\x02d\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x0a$\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \ \x0a \x0a \ \x0a \x0a \ \x0a \x0a \x0a .C\ olorScheme-Text \ {\x0a color:\ #f2f2f2;\x0a }\ \x0a \x0a\ \x0a .Col\ orScheme-Text {\x0a\ color:#f\ 2f2f2;\x0a }\x0a \ \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x0a\x0a\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ im\ age/svg+xml\x0a \ \x0a \ \x0a \x0a \x0a \x0a\ \x0a \x0a \x0a .\ ColorScheme-Text\ {\x0a color\ :#f2f2f2;\x0a \ }\x0a \ \x0a \x0a \x0a \x0a \ \x0a \x0a\x0a\ \x00\x00\x08?\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a <\ /cc:Work>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-Tex\ t {\x0a colo\ r:#4d4d4d;\x0a \ }\x0a .ColorS\ cheme-NegativeTe\ xt {\x0a col\ or:#da4453;\x0a \ }\x0a \x0a \x0a .\ ColorScheme-Text\ {\x0a color\ :#4d4d4d;\x0a \ }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07\x9c\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a <\ /cc:Work>\x0a \x0a \x0a \x0a\ \x0a .Color\ Scheme-Text {\x0a \ color:#f2f\ 2f2;\x0a }\x0a \ \x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x06\xe5\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a .Co\ lorScheme-Text {\ \x0a color:#\ f2f2f2;\x0a }\x0a\ \x0a \ \x0a \x0a\x0a\ \x00\x00\x08\x9a\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ imag\ e/svg+xml\x0a \x0a \ \x0a \ \x0a \x0a \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07p\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07\xa8\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \x0a\ \x0a \ \x0a image/svg\ +xml\ \x0a \x0a \x0a \x0a \x0a \x0a <\ defs\x0a id=\x22de\ fs3051\x22>\x0a \x0a \ .ColorScheme-\ Text {\x0a c\ olor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\ \x0a\ \x00\x00\x07\x13\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \ \x0a \x0a \ \x0a image/sv\ g+xml\x0a \x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \ .ColorScheme\ -Text {\x0a \ color:#f2f2f2;\x0a \ }\x0a \x0a \x0a\ \x0a\x0a\ \x00\x00\x07J\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a\ \x0a \x0a\ \x0a image/s\ vg+xml\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-Tex\ t {\x0a colo\ r:#f2f2f2;\x0a \ }\x0a \x0a \x0a \x0a\x0a\ \x00\x00\x0a0\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a \ \x0a \ \x0a \ \x0a \ \x0a \x0a \ \x0a \x0a .Colo\ rScheme-Text {\x0a \ color:#f2\ f2f2;\x0a }\x0a \ \x0a <\ /defs>\x0a \x0a\ \x0a \x0a\x0a\ \x00\x00\x09\xb0\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \ \x0a <\ /rdf:RDF>\x0a \x0a \ \x0a \x0a \ \x0a \ \x0a \x0a \x0a \x0a \x0a\ \x0a\x0a\ \x00\x00\x07\x86\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \ \x0a \x0a \ \x0a image/sv\ g+xml\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a .\ ColorScheme-Text\ {\x0a color\ :#f2f2f2;\x0a \ }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x08\xfc\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ im\ age/svg+xml\x0a \ \x0a \ \x0a \ \x0a <\ /metadata>\x0a \x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x07|\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-T\ ext {\x0a co\ lor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x07j\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \ \x0a \ \ \x0a image/svg+xm\ l\x0a \ \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a \ .ColorScheme-Tex\ t {\x0a colo\ r:#f2f2f2;\x0a \ }\x0a \x0a \x0a \x0a\x0a\ \x00\x00\x08\x94\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \x0a \ \x0a \x0a \x0a \x0a \ \x0a .ColorS\ cheme-Text {\x0a \ color:#f2f2\ f2;\x0a }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x88\xb3\ <\ \xb8d\x18\xca\xef\x9c\x95\xcd!\x1c\xbf`\xa1\xbd\xdd\xa7\ \x00\x00\x00\x02koB\x00\x00\x0b\x08\x00\x00\x05;\x00\ \x00\x05\x94\x00\x00\x05;\x00\x00\x0b\xf3\x00\x00\x05;\x00\ \x00m\xe8\x00\x00\x05;\x00\x00xN\x00\x00N:\x00\ \x00w\x8b\x00\x04\xbb\x04\x00\x00;a\x00\x04\xcf\x04\x00\ \x00<;\x00\x04\xd0%\x00\x00\x00\x05\xab`\x00\x00R@\x00\x05\xcf\xc7\x00\ \x00L\xc7\x00\x1e+\xfe\x00\x00R\xaf\x00*\xbb\x04\x00\ \x00/\xb7\x00*\xd0%\x00\x00/\xed\x00*\xec0\x00\ \x000#\x00+\xcf\xc7\x00\x000\x94\x002v\xee\x00\ \x00g/\x00G\x96\xc4\x00\x005#\x00Hw9\x00\ \x006z\x00Hw9\x00\x00O(\x00J6\x95\x00\ \x00\x11\xa2\x00L\x99b\x00\x00;\xc5\x00O\xc5g\x00\ \x00q\x15\x00R\xd9$\x00\x00-q\x00S\x05#\x00\ \x00w\xe7\x00V\x8c\x95\x00\x00Q\x10\x00Wiz\x00\ \x00\x0c\x1b\x00Wiz\x00\x00x\xd3\x00W\x96\xf9\x00\ \x00\x0cH\x00W\x96\xf9\x00\x00x\xfd\x00X\xbc\xb5\x00\ \x00E\x16\x00\x97\xa2\x10\x00\x00\x06\xdf\x00\xb7\xbb\x02\x00\ \x00\x08\xc9\x00\xc2\xad\xd0\x00\x00\x17\xc2\x01\x01\xe6\xd2\x00\ \x00L\x86\x01\x01\xe6\xd2\x00\x00}\x03\x01\x18\xab\xd4\x00\ \x00:\x1d\x01b|\x8e\x00\x00\x1a\x0e\x01i\xab\xb0\x00\ \x00\x0b9\x01w&\x82\x00\x00d\x80\x01\x8bp\x0e\x00\ \x00\x5c\xca\x01\x93\xf9J\x00\x00}G\x01\xc3\xc2\xec\x00\ \x00G\x8a\x01\xe1\xc2\xec\x00\x00q\xb4\x01\xfb2D\x00\ \x00\x1a\x94\x02\x13\x93\xa0\x00\x00\x0d\xb5\x025\xe1\x8e\x00\ \x00@\xcc\x025\xe1\x8e\x00\x00l@\x02S\xd0\x00\x00\ \x00\x0e\xa0\x02]\x17\xd5\x00\x00K,\x02cIQ\x00\ \x00\x13\x0a\x02u\x0b5\x00\x00<\x95\x02u\x0b5\x00\ \x00g\xcb\x02u\xee\x05\x00\x00<\xcd\x02\x7f\x81C\x00\ \x00eZ\x02\x95c\x03\x00\x00=\xc7\x02\x95c#\x00\ \x00\x1f\xa7\x02\x9a\xf5p\x00\x00\x18\x1a\x02\xaag'\x00\ \x00I*\x02\xac\x1bA\x00\x00(\x83\x02\xb8\xbc\xb5\x00\ \x000[\x02\xd4\xfau\x00\x00EF\x02\xdb\x0d\xc0\x00\ \x00u-\x02\xf1,\x0e\x00\x00&Y\x02\xf9\xc5\xc5\x00\ \x00\x05e\x03\x05\xe4\x1a\x00\x00q\xf9\x03\x09\xe1n\x00\ \x00ZB\x03\x0aQ\x01\x00\x00UC\x03\x0d1^\x00\ \x00\x10-\x03\x19\x98\xf4\x00\x00\x11\xd0\x03\x1c\xc5*\x00\ \x00O\xde\x03<\x83\x03\x00\x00\x0by\x03KF\xe3\x00\ \x00O\x9d\x03KF\xe3\x00\x00f$\x03KF\xe3\x00\ \x00v\x1b\x03_I\x05\x00\x00Kk\x03\x84\x9c\x01\x00\ \x00$a\x03\x92\xd2\xce\x00\x00hp\x03\x9a[4\x00\ \x00\x09\x97\x03\x9a[4\x00\x00v\xe2\x03\xba\xdc\xc1\x00\ \x00.\x01\x03\xdc\xdc%\x00\x00\x12\xcf\x03\xdc\xf5\xc3\x00\ \x00e\xa9\x03\xe5\xad#\x00\x00+\x1b\x03\xec\x91\x80\x00\ \x00&\xce\x04\x0c\x80\xbe\x00\x007\xfd\x04\x0dB\x0e\x00\ \x000\xca\x04\x19\x82N\x00\x002\x88\x04E\xb2\xc0\x00\ \x00t\xc2\x04]I3\x00\x00nw\x04^}\xfe\x00\ \x00:\x88\x04e\xac\xf5\x00\x00;\x8e\x04g\xac\xf5\x00\ \x00\x0aF\x04z\xb0^\x00\x00b\x14\x04z\xb0\xc5\x00\ \x005Q\x04\x80\x06\xa5\x00\x00Bz\x04\x8c\xcct\x00\ \x00|\xbe\x04\x98I\xbc\x00\x00\x07d\x04\x98I\xbc\x00\ \x00b\xe1\x04\x98I\xbc\x00\x00un\x04\x99\xb3C\x00\ \x00o4\x04\x9c(\xe1\x00\x00>m\x04\x9d\xac\x8e\x00\ \x00G\xd2\x04\x9e\x84\xd5\x00\x00c?\x04\xa1m^\x00\ \x00#X\x04\xcb\x1aI\x00\x00%\x01\x04\xcbXj\x00\ \x00\x0b\xb1\x04\xcbXj\x00\x00x\x0f\x04\xd6W\xc0\x00\ \x00h@\x04\xe9\x04\xab\x00\x00|U\x04\xfc\x86\xab\x00\ \x00b\x93\x05\x09\x86a\x00\x00.h\x05\x13\xccT\x00\ \x00/?\x050N\xc0\x00\x00P\x99\x050\xa5\x13\x00\ \x00)\xca\x051\xccT\x00\x00;(\x051\xccT\x00\ \x00f\xa9\x05O\xa2\x10\x00\x00\x09\xf9\x05O\xa2\x10\x00\ \x00wA\x05_. \x00\x00%\xe8\x05_\xa8`\x00\ \x00\x19e\x05c\x9c>\x00\x001\x90\x05i<\xfe\x00\ \x002>\x05jr\x94\x00\x00;\xf3\x05jr\x94\x00\ \x00g\x86\x05t\x96\x00\x00\x00\x0cu\x05t\x96\x00\x00\ \x00y'\x05v\x1b\x9e\x00\x00\x13h\x05\x8c\xac5\x00\ \x00Q\xa4\x05\xa1\x08\xc0\x00\x00rh\x05\xa3\x9c>\x00\ \x001\xe7\x05\xa3\x9c>\x00\x00zT\x05\xa8X\xf3\x00\ \x00\x04\xeb\x05\xaa\x8b\xc3\x00\x00J]\x05\xaa\x8b\xc3\x00\ \x00r\x98\x05\xd0)\xae\x00\x00]\xd1\x05\xd49Z\x00\ \x00{f\x06\x02\x14%\x00\x00Ii\x06\x09o\xb4\x00\ \x00?\x02\x06\x1bw\xbe\x00\x00{\xf7\x06%\x07\xf4\x00\ \x006\xe1\x06)o\xb4\x00\x00\x0a\xd8\x06)o\xb4\x00\ \x00Pa\x06)o\xb4\x00\x00w\xb3\x06-B\x0e\x00\ \x001-\x06-B\x0e\x00\x00y\xe6\x069\x82N\x00\ \x002\xeb\x069\x82N\x00\x00z\xb6\x06:\xd1\xd2\x00\ \x00GE\x06:\xd1\xf2\x00\x00qr\x06<=\x10\x00\ \x00t\x15\x06G(\x05\x00\x007\x98\x06M?$\x00\ \x00 |\x06[\xec\xae\x00\x00@@\x06]1\xde\x00\ \x00\x03\xe4\x06ty\xf1\x00\x008M\x06x\xc7\xb1\x00\ \x00-(\x06x\xc7\xb1\x00\x00N\x9e\x06\x96\xe7\xa4\x00\ \x00{\xa9\x06\x9aK\x00\x00\x00\x0e\xd5\x06\x9a\xec\x82\x00\ \x00B\xaf\x06\x9a\xf5C\x00\x00pS\x06\x9c(\x01\x00\ \x00j\x1e\x06\xb6\xbe`\x00\x00\x07\xe0\x06\xc5)*\x00\ \x00P\x18\x06\xcc\xd6\xa3\x00\x00D\xe3\x06\xdcS\xa3\x00\ \x00\x08*\x06\xe5\x1f\xc4\x00\x00/y\x06\xe51\xc4\x00\ \x009\xa6\x06\xe8Bs\x00\x00J\x8c\x06\xef\xbcp\x00\ \x00\x09L\x06\xef\xbcp\x00\x00v\x9a\x07\x0b\x90\xfe\x00\ \x00\x15\xf7\x07\x14*\x1e\x00\x00H,\x07\x19\x94u\x00\ \x00F{\x07\x1d\xe0`\x00\x00sB\x076\xcd`\x00\ \x00fd\x076\xcd`\x00\x00vX\x076\xcf`\x00\ \x00\x08\x86\x079\x94u\x00\x00F=\x07q\x00\x00\x1et\x08\xc7\xd2\x01\x00\ \x00-\xb7\x08\xf6\x88`\x00\x00\x0c\xbb\x08\xf6\x88`\x00\ \x00yj\x09+\x0f@\x00\x00!|\x09.\xc9\xc5\x00\ \x00=U\x09.\xc9\xc5\x00\x00h\x00\x09>\x0d$\x00\ \x00K\xb3\x09AN\x12\x00\x00\x22\xd2\x09W\xd7\xd5\x00\ \x00E\xf3\x09^\x89\xd3\x00\x00D\xb0\x09`\x06\xb5\x00\ \x00I\xa9\x09b\x06\xb5\x00\x00\x0d\x7f\x09g\x01\xd0\x00\ \x00r\xf7\x09m\xcap\x00\x00,v\x09}R\xc0\x00\ \x00\x09\x09\x09}\xacQ\x00\x00\x1bW\x09~\x0e\xa3\x00\ \x00.\xe9\x09\x8ct\xd3\x00\x00o\xe6\x09\x93\xd2\xfe\x00\ \x00OX\x09\x96F0\x00\x00\x1e\xf9\x09\x96U\xce\x00\ \x00\x1f4\x09\xa4\xc1N\x00\x00CW\x09\xb8\x7f\xb1\x00\ \x00\x00\x00\x09\xbae\xb2\x00\x00?\xbd\x09\xc0\xcbU\x00\ \x00C\xdd\x09\xc0\xcbU\x00\x00n\x10\x09\xc4O\x93\x00\ \x00\x22\x8b\x09\xc4g\xff\x00\x00*\x90\x09\xd7\x1ds\x00\ \x009C\x0a\x06e~\x00\x00d\x08\x0a\x07\xed^\x00\ \x00YM\x0a\x0c\x87\x0e\x00\x00X\x97\x0a\x22ZW\x00\ \x00A\xfe\x0aErt\x00\x00p\x84\x0a_\xd7\x0e\x00\ \x00\x0f\x15\x0a_\xf3\xfb\x00\x005\x80\x0a_\xf3\xfb\x00\ \x00b@\x0aif\xc9\x00\x00+\xd6\x0aif\xc9\x00\ \x00H\xf4\x0as>\xc3\x00\x00\x06c\x0a\x8b\xc3`\x00\ \x00R\x0d\x0a\x97\x00\x80\x00\x00\x0eP\x0a\xa2Yp\x00\ \x00o\x83\x0a\xa8\x9a\xe4\x00\x00J+\x0a\xc0(\x90\x00\ \x00r\xc4\x0b,\xa7!\x00\x00+^\x0b>\xcdE\x00\ \x00>\xbe\x0b>\xcdE\x00\x00j\xa0\x0bFq\xee\x00\ \x00\x14\x9f\x0bUq\xc1\x00\x00,\x10\x0b`r`\x00\ \x00l\xec\x0bg\x8cn\x00\x00,\xe8\x0bn\xb1\xee\x00\ \x00`\xff\x0bv\x04\xf0\x00\x00\x17k\x0bz\xc1 \x00\ \x00\x0az\x0b{\xc6\x8e\x00\x00)'\x0b\x89w\x94\x00\ \x0065\x0b\x89w\x94\x00\x00N\xe5\x0b\xa3\xdc\x0c\x00\ \x00y\xaf\x0b\xc8\xc7\x13\x00\x00e*\x0b\xe0\xa1\x13\x00\ \x007\xc9\x0b\xe0\xa1\x13\x00\x00dO\x0b\xf9\x95\xb3\x00\ \x00\x1d\xd3\x0b\xf9\x97\xc3\x00\x009\xdb\x0b\xfb\xb97\x00\ \x00A~\x0c\x01\xe6\x82\x00\x00L<\x0c\x1a\xb95\x00\ \x00I\xe2\x0c(\x19\x04\x00\x00F\xb9\x0c2\xc0S\x00\ \x00\x055\x0cP\xdb[\x00\x00\x06\x94\x0cb[\xa5\x00\ \x00F\xff\x0ce\x0f.\x00\x00H\x8d\x0ce\x0f.\x00\ \x00Q\xd5\x0cs\x10t\x00\x00J\xe8\x0c\x96q\xc0\x00\ \x00\x0f\x82\x0c\x96q\xc0\x00\x00\x18\x81\x0c\x99e\x80\x00\ \x00\x1fo\x0c\x9dN\x00\x00\x00\x0d\x03\x0c\xaa\xac\x07\x00\ \x00*\xd0\x0c\xab\xf8D\x00\x00E\x87\x0c\xb5\x86\x80\x00\ \x00P\xca\x0c\xb5\x86\x80\x00\x00mb\x0c\xdd\xc2\x03\x00\ \x00Dx\x0c\xdd\xc2\x03\x00\x00nB\x0c\xe0\x1a\xf3\x00\ \x00m/\x0c\xfb\xe0\x8a\x00\x00 \xbc\x0d\x00\xf7U\x00\ \x00i\xc1\x0d\x04\xc3c\x00\x00 @\x0d\x06\xe1\xe0\x00\ \x00n\xdf\x0d\x11C/\x00\x00*)\x0d\x1f.H\x00\ \x00\x0d9\x0d\x1f\x9f\xd3\x00\x00f\xdf\x0d>P\xb3\x00\ \x00\x11W\x0d\x5c\xf5e\x00\x008\xe9\x0dq\x98\xde\x00\ \x00\x01\xe2\x0d\x99\xf9B\x00\x00\x05\xba\x0d\x99\xf9B\x00\ \x00\x10\xed\x0d\x99\xf9B\x00\x00D\x12\x0d\x99\xf9B\x00\ \x00Q@\x0d\x99\xf9B\x00\x00xs\x0d\xa4$\xc3\x00\ \x00\x12\x80\x0d\xb2\x0c\x19\x00\x00i\x1e\x0d\xdb\xf3\x0a\x00\ \x00tG\x0e i\x22\x00\x00.\xaa\x0e.d\xa4\x00\ \x00C\x98\x0e7I\xc3\x00\x00\x07(\x0e7I\xe3\x00\ \x00{$\x0e_\x84\xe1\x00\x00(\xd4\x0ex\xa8B\x00\ \x00\x07\x90\x0ex\xa8B\x00\x00u\x97\x0e\x9cN\xa3\x00\ \x00\x1c\x98\x0e\xb2\xf0\x80\x00\x00jl\x0e\xc4J\xf0\x00\ \x00\x0d\xf5\x0e\xca\xc0\x99\x00\x00?i\x0e\xca\xc0\x99\x00\ \x00k\xef\x0e\xda\xd4\xfe\x00\x00T\x1c\x0e\xe51\xe0\x00\ \x00'I\x0e\xe8\xc0\x99\x00\x00\x1f\xe8\x0e\xf32\xb1\x00\ \x00#\xc0\x0e\xf32\xb1\x00\x00M\xb1\x0f\x023\xae\x00\ \x00=\x05\x0f\x0a\xdc\x0c\x00\x00u\xe4\x0f\x19\xef\xce\x00\ \x00W3\x0f6\xb6\x90\x00\x00\x19\xb3\x0f?r\xc0\x00\ \x00'\xb8\x0f?\x86\xfe\x00\x005\xd6\x0f]\xee>\x00\ \x00(3\x0f]\xee>\x00\x00NP\x0fi\xafT\x00\ \x00p#\x0fu\xb1\x0e\x00\x00>\x04\x0fy\xa5^\x00\ \x003N\x0fy\xa5^\x00\x00_-\x0f{\x1e\x14\x00\ \x00\x1d~\x0f}\x11p\x00\x00\x0f\xce\x0f\x82\xa0\x8e\x00\ \x00\x18\xcd\x0f\x9c\x97\x17\x00\x00\x123\x0f\xa6V\x80\x00\ \x00h\xeb\x0f\xa7\xb6\x04\x00\x00\x1e!\x0f\xac[\xe1\x00\ \x00! \x0f\xac[\xee\x00\x00\x22/\x0f\xb3$q\x00\ \x00\x1a\xf4\x0f\xb3$q\x00\x00L\xf4\x0f\xd1?\x00\x00\ \x00Ro\x0f\xd6\xe5\xde\x00\x00[\xf2\x0f\xd9\x03.\x00\ \x00%\x97\x0f\xde{\xf0\x00\x00c\xca\x0f\xf3\x03\x0e\x00\ \x00\x02\xddi\x00\x00}\x8a\x03\x00\x00\x01,\x00\x0a\x00\ A\x00l\x00i\x00R\x00e\x00z\x00a\x00 \x00\ A\x00m\x00i\x00r\x00S\x00a\x00m\x00i\x00\ m\x00i\x00\x0a\x00M\x00o\x00h\x00a\x00m\x00\ m\x00a\x00d\x00r\x00e\x00z\x00a\x00 \x00\ A\x00b\x00d\x00o\x00l\x00l\x00a\x00h\x00\ z\x00a\x00d\x00e\x00h\x00\x0a\x00S\x00a\x00\ d\x00e\x00g\x00h\x00 \x00A\x00l\x00i\x00\ r\x00e\x00z\x00a\x00i\x00e\x00\x0a\x00M\x00\ o\x00s\x00t\x00a\x00f\x00a\x00 \x00A\x00\ s\x00a\x00d\x00i\x00\x0a\x00J\x00a\x00f\x00\ a\x00r\x00 \x00A\x00k\x00h\x00o\x00n\x00\ d\x00a\x00l\x00i\x00\x0a\x00K\x00i\x00a\x00\ \x00H\x00a\x00m\x00e\x00d\x00i\x00\x0a\x00\ H\x00.\x00R\x00o\x00s\x00t\x00a\x00m\x00\ i\x00\x0a\x00E\x00h\x00s\x00a\x00n\x00 \x00\ T\x00i\x00t\x00i\x00s\x00h\x00\x0a\x00M\x00\ o\x00h\x00a\x00m\x00m\x00a\x00d\x00A\x00\ m\x00i\x00n\x00 \x00V\x00a\x00h\x00e\x00\ d\x00i\x00n\x00i\x00a\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x96\x0aAliReza Amir\ Samimi\x0aMohammadr\ eza Abdollahzade\ h\x0aSadegh Alireza\ ie\x0aMostafa Asadi\ \x0aJafar Akhondali\ \x0aKia Hamedi\x0aH.Ro\ stami\x0aEhsan Titi\ sh\x0aMohammadAmin \ Vahedinia\x07\x00\x00\x00\x0bab\ out_ui_tr\x01\x03\x00\x00\x00\x92\x00\ <\x00a\x00 \x00h\x00r\x00e\x00f\x00=\x00\ h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00\ p\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\x00d\x00m\x00.\x00g\x00i\x00t\x00\ h\x00u\x00b\x00.\x00i\x00o\x00>\x00h\x00\ t\x00t\x00p\x00s\x00:\x00/\x00/\x00p\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00d\x00m\x00.\x00g\x00i\x00t\x00h\x00\ u\x00b\x00.\x00i\x00o\x00<\x00/\x00a\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00Ihttps://persep\ olisdm.github.io\ \x07\x00\x00\x00\x0babout_u\ i_tr\x01\x03\x00\x00\x00\x9a\x00<\x00a\x00 \ \x00h\x00r\x00e\x00f\x00=\x00h\x00t\x00t\ \x00p\x00s\x00:\x00/\x00/\x00t\x00e\x00l\ \x00e\x00g\x00r\x00a\x00m\x00.\x00m\x00e\ \x00/\x00p\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\x00d\x00m\x00>\x00h\x00t\ \x00t\x00p\x00s\x00:\x00/\x00/\x00t\x00e\ \x00l\x00e\x00g\x00r\x00a\x00m\x00.\x00m\ \x00e\x00/\x00p\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x00d\x00m\x00<\x00/\ \x00a\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00Mhttps://t\ elegram.me/perse\ polisdm\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x9a\x00<\x00a\x00 \x00h\x00r\x00e\x00f\x00\ =\x00h\x00t\x00t\x00p\x00s\x00:\x00/\x00\ /\x00t\x00w\x00i\x00t\x00t\x00e\x00r\x00\ .\x00c\x00o\x00m\x00/\x00p\x00e\x00r\x00\ s\x00e\x00p\x00o\x00l\x00i\x00s\x00d\x00\ m\x00>\x00h\x00t\x00t\x00p\x00s\x00:\x00\ /\x00/\x00t\x00w\x00i\x00t\x00t\x00e\x00\ r\x00.\x00c\x00o\x00m\x00/\x00p\x00e\x00\ r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00\ d\x00m\x00<\x00/\x00a\x00>\x08\x00\x00\x00\x00\ \x06\x00\x00\x00Mht\ tps://twitter.co\ m/persepolisdm\x07\x00\x00\x00\x0babout_ui_\ tr\x01\x03\x00\x00\x00\x1a\x00P\x00e\x00r\x00s\ \x00e\x00p\x00o\x00l\x00i\x00s\x00 \xc8\x15\ \xbc\xf4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Abou\ t Persepolis\x07\x00\x00\x00\ \x0babout_ui_tr\x01\x03\x00\x00\ \x00\x06\xac\x1c\xbc\x1c\xc7\x90\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0aDevelopers\x07\x00\x00\x00\ \x0babout_ui_tr\x01\x03\x00\x00\ \x00\x08\xb7|\xc7t\xc1 \xc2\xa4\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x07License\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x04\xd6U\xc7x\x08\x00\x00\x00\x00\x06\x00\x00\x00\x02O\ K\x07\x00\x00\x00\x0babout_ui_t\ r\x01\x03\x00\x00\x00&\x00P\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x00 \xb2\xe4\xc6\ \xb4\xb8\x5c\xb4\xdc\x00 \xad\x00\xb9\xac\xc7\x90\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x1bPersepoli\ s Download Manag\ er\x07\x00\x00\x00\x0babout_ui_\ tr\x01\x03\x00\x00\x00\x16\xd2\xb9\xbc\xc4\xd7\x88\x00 \ \xac\x10\xc0\xac\xd5\x5c\x00 \xbd\x84\xb4\xe4\x00:\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x12Special \ thanks to:\x07\x00\x00\x00\x0ba\ bout_ui_tr\x01\x03\x00\x00\x00\x06\ \xbc\x88\xc5\xed\xc7\x90\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b\ Translators\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x18\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xb9\xc1\xd0l\x00\ \xcd\x94\xac\x00\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x11Add Download \ Link\x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x16\xcet\xd1L\ \xac\xe0\xb9\xac\xc5\xd0\x00 \xcd\x94\xac\x00\xd5X\xae0\ \x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Add \ to category: \x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x0a\xac\xe0\xae\x09\x00 \xc65\xc1X\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x10Advance\ d Options\x07\x00\x00\x00\x0dad\ dlink_ui_tr\x01\x03\x00\x00\x00\ \x04\xcd\xe8\xc1\x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06C\ ancel\x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x18\xb2\xe4\xc6\ \xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\xb3T\x00 \xbc\xc0\xac\ \xbd\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16C\ hange Download F\ older\x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x16\xd3\x0c\xc7\ |\x00 \xc7t\xb9\x84\x00 \xbc\xc0\xac\xbd\xd5X\xae\ 0\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12Cha\ nge file name: \x07\ \x00\x00\x00\x0daddlink_ui_t\ r\x01\x03\x00\x00\x00\x1e\xc2\xdc\xc2\xa4\xd1\x5c\x00 \xd5\ \x04\xb8]\xc2\xdc\x00 \xc1$\xc8\x15\x00 \xac\x10\xc9\ \xc0\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1cD\ etect System Pro\ xy Settings\x07\x00\x00\x00\x0d\ addlink_ui_tr\x01\x03\x00\ \x00\x00\x10\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\xb3\ T\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Dow\ nload Folder: \x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x10\xb0\x98\xc9\x11\xc5\xd0\x00 \xb2\xe4\ \xc6\xb4\xb8\x5c\xb4\xdc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0e\ Download Later\x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \ \xb9\xc1\xd0l\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0fDownload link:\ \x07\x00\x00\x00\x0daddlink_ui\ _tr\x01\x03\x00\x00\x00\x16\xbeD\xbc\x00\xbc\x88\xd6\ 8\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00:\x00 \x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x13Downloa\ d password: \x07\x00\x00\x00\ \x0daddlink_ui_tr\x01\x03\ \x00\x00\x00\x22\xc0\xac\xc6\xa9\xc7\x90\xc7t\xb9\x84\x00 \ \xbc\x0f\x00 \xbeD\xbc\x00\xbc\x88\xd68\x00 \xb2\xe4\ \xc6\xb4\xb8\x5c\xb4\xdc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1e\ Download usernam\ e and password\x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x18\xc0\xac\xc6\xa9\xc7\x90\xc7t\xb9\x84\ \x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x13Download\ username: \x07\x00\x00\x00\x0d\ addlink_ui_tr\x01\x03\x00\ \x00\x00\x0a\xc8\x85\xb8\xcc\x00 \xc2\xdc\xac\x04\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08End time\x07\ \x00\x00\x00\x0daddlink_ui_t\ r\x01\x03\x00\x00\x00\x06\xd5\xe4\xb3T\x00:\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08Header: \x07\ \x00\x00\x00\x0daddlink_ui_t\ r\x01\x03\x00\x00\x00\x08\x00I\x00P\x00:\x00 \x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x04IP: \x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x0a\xc8\x1c\xd5\x5c\x00 \xc1\x8d\xb3\xc4\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0bLimit s\ peed\x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x04\xb9\xc1\xd0l\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x04Link\x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x10\xcf\xe0\xd0\xa4\x00 \xbd\x88\xb7\xec\ \xc6$\xae0\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0e\ Load cookies: \x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x0a\xcd\x94\xac\x00\x00 \xc65\xc1X\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cMore O\ ptions\x07\x00\x00\x00\x0daddli\ nk_ui_tr\x01\x03\x00\x00\x00\x0a\xc5\xf0\ \xac\xb0\x00 \xc2\x18\x00:\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x16Number of conn\ ections:\x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x04\ \xd6U\xc7x\x08\x00\x00\x00\x00\x06\x00\x00\x00\x02OK\ \x07\x00\x00\x00\x0daddlink_ui_\ tr\x01\x03\x00\x00\x00\x06\xd3\xec\xd2\xb8\x00:\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x05Port:\x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x06\xd5\x04\xb8]\xc2\xdc\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x05Proxy\x07\x00\x00\x00\x0da\ ddlink_ui_tr\x01\x03\x00\x00\ \x00\x14\xd5\x04\xb8]\xc2\xdc\x00 \xbeD\xbc\x00\xbc\x88\ \xd68\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x10\ Proxy password: \ \x07\x00\x00\x00\x0daddlink_ui_\ tr\x01\x03\x00\x00\x00\x16\xd5\x04\xb8]\xc2\xdc\x00 \ \xc0\xac\xc6\xa9\xc7\x90\xc7t\xb9\x84\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x10Proxy us\ ername: \x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x0a\ \xb9\xac\xd3|\xb7\xec\x00:\x00 \x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0aReferrer: \x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x12\xc7t\x00 \xac\xbd\xb8\x5c\x00 \ \xae0\xc5\xb5\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x12Remember this \ path\x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x0a\xc2\xdc\xc7\x91\ \x00 \xc2\xdc\xac\x04\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0a\ Start time\x07\x00\x00\x00\x0da\ ddlink_ui_tr\x01\x03\x00\x00\ \x00\x12\xc0\xac\xc6\xa9\xc7\x90\x00 \xc5\xd0\xc7t\xc8\x04\ \xd2\xb8\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cUs\ er agent: \x07\x00\x00\x00\x0da\ ddlink_ui_tr\x01\x03\x00\x00\ \x00\x1c\x00<\x00b\x00>\xd3\x0c\xc7|\x00 \xc7t\ \xb9\x84\x00<\x00/\x00b\x00>\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x12File \ name: \x07\x00\x00\x00\x18a\ fter_download_sr\ c_ui_tr\x01\x03\x00\x00\x00\x16\x00<\x00\ b\x00>\xd0l\xae0\x00<\x00/\x00b\x00>\x00\ :\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\ Size: \x07\x00\x00\x00\x18a\ fter_download_sr\ c_ui_tr\x01\x03\x00\x00\x00\x04\xd6U\xc7\ x\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08 OK\ \x07\x00\x00\x00\x14after_do\ wnload_ui_tr\x01\x03\x00\x00\ \x00\x0a\xd3\x0c\xc7|\x00 \xc5\xf4\xae0\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0d Open Fil\ e \x07\x00\x00\x00\x14after_do\ wnload_ui_tr\x01\x03\x00\x00\ \x00*\x00<\x00b\x00>\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\ \xac\x00\x00 \xc6D\xb8\xcc\xb4\x18\xc5\xc8\xc2\xb5\xb2\xc8\ \xb2\xe4\x00!\x00<\x00/\x00b\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x1aDownloa\ d Completed!\ \x07\x00\x00\x00\x14after_downl\ oad_ui_tr\x01\x03\x00\x00\x00\x16\x00\ <\x00b\x00>\xb9\xc1\xd0l\x00<\x00/\x00b\x00\ >\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d<\ b>Link: \x07\x00\x00\x00\ \x14after_download_\ ui_tr\x01\x03\x00\x00\x00&\x00<\x00b\x00\ >\xb2\xe4\xb9x\x00 \xc7t\xb9\x84\xc7<\xb8\x5c\x00\ \xc8\x00\xc7\xa5\x00<\x00/\x00b\x00>\x00:\x00\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Sa\ ve as: \x07\x00\x00\x00\x14\ after_download_u\ i_tr\x01\x03\x00\x00\x00(\xc7t\x00 \xbaT\ \xc2\xdc\xc9\xc0\xb9|\x00 \xb2\xe4\xc2\xdc\x00 \xd4\x5c\ \xc2\xdc\xd5X\xc9\xc0\x00 \xc5J\xc2\xb5\xb2\xc8\xb2\xe4\ \x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eDon'\ t show this mess\ age again.\x07\x00\x00\x00\x14a\ fter_download_ui\ _tr\x01\x03\x00\x00\x00\x14\xb2\xe4\xc6\xb4\xb8\x5c\xb4\ \xdc\x00 \xd3\xf4\xb3T\x00 \xc5\xf4\xae0\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x14Open Down\ load Folder\x07\x00\x00\x00\x14\ after_download_u\ i_tr\x01\x03\x00\x00\x00&\x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xad\x00\xb9\xac\xc7\x90\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bPersep\ olis Download Ma\ nager\x07\x00\x00\x00\x14after_\ download_ui_tr\x01\x03\ \x00\x00\x00\x14\xb8\x5c\xad\xf8\x00 \xbaT\xc2\xdc\xc9\xc0\ \x00 \xbeD\xc6\xb0\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x12Clear Log Mess\ ages\x07\x00\x00\x00\x10log_win\ dow_ui_tr\x01\x03\x00\x00\x00\x04\xb2\ \xeb\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Clo\ se\x07\x00\x00\x00\x10log_windo\ w_ui_tr\x01\x03\x00\x00\x00$\xc1 \xd0\ \xdd\xd5\x5c\x00 \xd5m\xba\xa9\xc7D\x00 \xd0t\xb9\ \xbd\xbc\xf4\xb4\xdc\xc5\xd0\x00 \xbc\xf5\xc0\xac\xd5X\xae\ 0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aCopy \ Selected to Clip\ board\x07\x00\x00\x00\x10log_wi\ ndow_ui_tr\x01\x03\x00\x00\x00\x1a\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\ \x00i\x00s\x00 \xb8\x5c\xad\xf8\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0ePersepolis L\ og\x07\x00\x00\x00\x10log_windo\ w_ui_tr\x01\x03\x00\x00\x00\x16\xb8\x5c\xad\ \xf8\x00 \xbaT\xc2\xdc\xc9\xc0\x00 \xc0\xc8\xb8\x5c\xac\ \xe0\xceh\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14Ref\ resh Log Message\ s\x07\x00\x00\x00\x10log_window\ _ui_tr\x01\x03\x00\x00\x00\x0a\xc7t\xc2\x88\ \x00 \xbc\xf4\xac\xe0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\ Report Issue\x07\x00\x00\x00\ \x10log_window_ui_t\ r\x01\x03\x00\x00\x00 \x00<\x00/\x00b\x00>\x00\ \x22\xac\x00\x00 \xc7t\xbb\xf8\x00 \xc8t\xc7\xac\xd5\ i\xb2\xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x15\x22 already e\ xists!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x9c\x00<\x00b\x00>\x00<\x00c\x00\ e\x00n\x00t\x00e\x00r\x00>\xc7t\x00 \xb9\ \xc1\xd0l\xb2\x94\x00 \xc7t\xc8\x04\xc5\xd0\x00 \xcd\ \x94\xac\x00\xb4\x1c\x00 \xc8\x01\xc7t\x00 \xc7\x88\xc2\ \xb5\xb2\xc8\xb2\xe4\x00!\x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xb2\ \xe4\xc2\xdc\x00 \xcd\x94\xac\x00\xd5X\xc2\xdc\xac\xa0\xc2\ \xb5\xb2\xc8\xaeL\x00?\x00<\x00/\x00c\x00e\x00\ n\x00t\x00e\x00r\x00>\x00<\x00/\x00b\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00rThis link \ has been added b\ efore! \ Are yo\ u sure you want \ to add it again?\ \x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\xb4\x00<\x00b\ \x00>\x00<\x00c\x00e\x00n\x00t\x00e\x00r\ \x00>\xc7t\x00 \xc7\x91\xc5\xc5\xc7D\x00 \xc2\x18\ \xd5\x89\xd5X\xbat\x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xd5\x5c\x00 \xd3\x0c\xc7|\ \xc7t\x00 \xd5X\xb4\xdc\x00 \xb5\x14\xc2\xa4\xd0l\ \xc5\xd0\xc1\x1c\x00 \xc6\x01\xadl\xc8\x01\xc7<\xb8\x5c\ \x00 \x00<\x00b\x00r\x00>\xc0\xad\xc8\x1c\xb4)\ \xb2\xc8\xb2\xe4\x00!\x00<\x00/\x00c\x00e\x00n\ \x00t\x00e\x00r\x00>\x00<\x00/\x00b\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00{This operat\ ion will delete \ \ downloaded f\ iles from your h\ ard disk
PERM\ ANENTLY!
\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\xc6\x00<\x00b\x00>\x00<\x00c\x00e\ \x00n\x00t\x00e\x00r\x00>\xc7t\x00 \xc7\x91\ \xc5\xc5\xc7D\x00 \xc2\x18\xd5\x89\xd5X\xbat\x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00\x22\xba\xa8\xb4\xe0\x00 \ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00\x22\x00 \xba\xa9\xb8]\ \xc5\xd0\xc1\x1c\x00 \xc7t\x00 \xb3\x00\xae0\xc5\xf4\ \xc7X\x00 \xba\xa8\xb4\xe0\x00 \x00<\x00b\x00r\ \x00>\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd5m\xba\xa9\ \xc7t\x00 \xc8\x1c\xacp\xb4)\xb2\xc8\xb2\xe4\x00!\ \x00<\x00/\x00c\x00e\x00n\x00t\x00e\x00r\ \x00>\x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x85
T\ his operation wi\ ll remove \ al\ l download items\ in this queuefrom \x22All Down\ loads\x22 list!\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x1a\x00<\x00b\x00>\xc5\xf0\ \xac\xb0\x00 \xc2\x18\x00<\x00/\x00b\x00>\x00:\ \x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x14C\ onnections: \ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00\x1c\x00\ <\x00b\x00>\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb4(\x00\ <\x00/\x00b\x00>\x00:\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x13Download\ ed: \x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00\x22\x00<\x00b\x00>\xb0\xa8\xc7\ @\x00 \xc6\x08\xc0\xc1\x00 \xc2\xdc\xac\x04\x00<\x00\ /\x00b\x00>\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x1cEstimated \ time left: \x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x16\x00<\ \x00b\x00>\xb9\xc1\xd0l\x00<\x00/\x00b\x00>\ \x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dLink: \x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00B\x00<\x00b\x00>\ \xc8\xc4\xc1\xa1\xd5i\xb2\xc8\xb2\xe4\x00!\x00 \xae0\ \xbc\xf8\x00 \xb3\x00\xae0\xc5\xf4\xc7@\x00 \xc8\x1c\ \xacp\xd5`\x00 \xc2\x18\x00 \xc5\xc6\xc2\xb5\xb2\xc8\ \xb2\xe4\x00!\x00<\x00/\x00b\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00-Sorry! \ You can't remove\ default queue!<\ /b>\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x16\x00<\x00b\x00>\xc0\xc1\xd0\xdc\x00<\x00/\ \x00b\x00>\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0fStatus:\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x1c\ \x00<\x00b\x00>\xc8\x04\xc1\xa1\x00 \xc1\x8d\xb3\xc4\ \x00<\x00/\x00b\x00>\x00:\x00 \x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x16Transfe\ r rate: \x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x004\x00<\x00c\x00\ e\x00n\x00t\x00e\x00r\x00>\xac\xc4\xc1\x8d\xd5\ X\xc2\xdc\xac\xa0\xc2\xb5\xb2\xc8\xaeL\x00?\x00<\x00\ /\x00c\x00e\x00n\x00t\x00e\x00r\x00>\x08\ \x00\x00\x00\x00\x06\x00\x00\x00)Do you want to \ continue?\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x22\x00A\x00r\x00i\x00a\x002\xac\x00\x00 \xc7\ Q\xb2\xf5\xd5X\xc9\xc0\x00 \xc5J\xc5X\xc2\xb5\xb2\ \xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15Ari\ a2 did not respo\ nd\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ $\x00A\x00r\x00i\x00a\x002\xac\x00\x00 \xc7\ Q\xb2\xf5\xd5X\xc9\xc0\x00 \xc5J\xc5X\xc2\xb5\xb2\ \xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16A\ ria2 did not res\ pond!\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00t\x00A\x00r\x00i\x00a\x002\xac\x00\ \x00 \xc7Q\xb2\xf5\xd5X\xc9\xc0\x00 \xc5J\xc5X\ \xc2\xb5\xb2\xc8\xb2\xe4\x00!\x00 \xc7\xa0\xc2\xdc\xb9\xcc\ \x00 \xae0\xb2\xe4\xb8$\xc8\xfc\xc18\xc6\x94\x00!\ \x00 \x00P\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\xac\x00\x00 \x002\xcd\x08\x00 \ \xd6\xc4\xc5\xd0\x00 \xb2\xe4\xc2\xdc\x00 \xc2\xdc\xb3\xc4\ \xd5i\xb2\xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\ \x00FAria2 didn't r\ espond! be patie\ nt! Persepolis t\ ries again in 2 \ seconds!\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00\x22\x00A\x00r\x00i\x00a\x00\ 2\x00 \xc5\xf0\xac\xb0\xc7t\x00 \xb0J\xc5\xb4\xc8\ L\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x13Aria2 disconn\ ected!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00B\xc0\xac\xc6\xa9\xc7\x90\xc7X\x00 \xb1\ $\xd2\xb8\xc6\xcc\xd0l\x00 \xd6U\xc7x\x00 \xbc\ \x0f\x00 \x00P\x00e\x00r\x00s\x00e\x00p\x00\ o\x00l\x00i\x00s\x00 \xb2\xe4\xc2\xdc\x00 \xc2\ \xdc\xc7\x91\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ 'Check your netw\ ork & Restart Pe\ rsepolis\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00\x1a\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb9\ |\x00 \xc6D\xb8\xcc\xd5X\xc6\x00\xc2\xb5\xb2\xc8\xb2\ \xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Downl\ oad Complete\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x1a\xb2\xe4\xc6\xb4\xb8\ \x5c\xb4\xdc\xac\x00\x00 \xc6\x08\xc5}\xb4\x18\xc5\xc8\xc2\ \xb5\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12D\ ownload Schedule\ d\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x16\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xac\x00\x00 \xc2\xdc\xc7\x91\ \xb4)\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0f\ Download Starts\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x1a\xb2\xe4\ \xc6\xb4\xb8\x5c\xb4\xdc\xac\x00\x00 \xc9\x11\xc9\xc0\xb4\x18\ \xc5\xc8\xc2\xb5\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Download Stopp\ ed\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ 4\xbeD\xb5\x14\xc6$\x00 \xd3\x0c\xc7x\xb3T\xb9\ |\x00 \xd1\xb5\xd5t\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\ \xdc\xac\x00\x00 \xc9\xc4\xd5\x89\x00 \xc9\x11\xc7\x85\xb2\ \xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00(D\ ownload is in pr\ ogress by video \ finder!\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x0a\xc6$\xb9X\x00 \x00-\x00 \ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Error \ - \x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x0a\xc6$\xb9X\x00.\x00.\x00.\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x08Error...\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x08\xc6$\xb9X\ \x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Er\ ror: \x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x0c\xc65\xc1X\x00 \xc2(\xae0\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cHide o\ ptions\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x18\xc2\xdc\xc2\xa4\xd1\x5c\x00 \xd2\xb8\xb8\ \x08\xc7t\xb8\x5c\x00 \xcd\x5c\xc1\x8c\xd6T\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x17Minimize \ to system tray\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x0a\xc7t\xb3\ \xd9\xd5X\xae0\xb2\x94\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x09Moving is\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x0e\xcc>\xc7D\x00 \xc2\ \x18\x00 \xc5\xc6\xc7L\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x09Not Found\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x22\xc0\xac\xc6\xa9\x00 \xac\ \x00\xb2\xa5\xd5\x5c\x00 \xac\xf5\xac\x04\xc7t\x00 \xbd\ \x80\xc8q\xd5i\xb2\xc8\xb2\xe4\x00:\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x19Not enough \ free space in:\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x16\xc7\x91\xc5\ \xc5\xc5\xd0\x00 \xc2\xe4\xd3(\xd5\x88\xc2\xb5\xb2\xc8\xb2\ \xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1dOpe\ ration was not s\ uccessful!\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00B\xc7\x91\xc5\xc5\xc5\xd0\x00\ \xc2\xe4\xd3(\xd5\x88\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x00\ \xb2\xe4\xc7L\x00 \xcet\xd1L\xac\xe0\xb9\xac\xb9\ |\x00 \xba<\xc8\x00\x00 \xc9\x11\xc9\xc0\xd5t\x00\ \xc8\xfc\xc18\xc6\x94\x00:\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00HOperation w\ as not successfu\ l! Please stop t\ he following cat\ egory first: \x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x16\xc7\x91\xc5\xc5\ \xc5\xd0\x00 \xc2\xe4\xd3(\xd5\x88\xc2\xb5\xb2\xc8\xb2\xe4\ \x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1dOper\ ation was not su\ ccessful.\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x14\x00P\x00e\x00r\x00s\ \x00e\x00p\x00o\x00l\x00i\x00s\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0aPersepolis\ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00:\x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\xac\x00\x00 \x00A\x00r\x00i\x00a\x00\ 2\xc5\xd0\x00 \xc5\xf0\xac\xb0\xd5`\x00 \xc2\x18\x00\ \xc5\xc6\xc2\xb5\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\ \x00\x00#Persepolis ca\ n not connect to\ Aria2\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00$\x00P\x00e\x00r\x00s\x00e\x00\ p\x00o\x00l\x00i\x00s\xac\x00\x00 \x002\x00\ 0\xcd\x08\x00 \xc5H\xc5\xd0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x1bPersepolis is\ shutting down\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00L\x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\xac\x00\x00 \xc5\xf0\xac\xb0\xc7D\x00 \xc2\xdc\xb3\ \xc4\xd5X\xac\xe0\x00 \xc7\x88\xc2\xb5\xb2\xc8\xb2\xe4\x00\ !\x00 \xc7\xa0\xc2\xdc\xb9\xcc\x00 \xae0\xb2\xe4\xb8\ $\xc8\xfc\xc18\xc6\x94\x00!\x08\x00\x00\x00\x00\x06\x00\ \x00\x00,Persepolis is\ trying to conne\ ct! be patient!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00L\x00P\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\xac\x00\x00 \xc5\xf0\xac\xb0\xc7D\x00 \xc2\xdc\ \xb3\xc4\xd5X\xac\xe0\x00 \xc7\x88\xc2\xb5\xb2\xc8\xb2\xe4\ \x00!\x00 \xc7\xa0\xc2\xdc\xb9\xcc\x00 \xae0\xb2\xe4\ \xb8$\xc8\xfc\xc18\xc6\x94\x00!\x08\x00\x00\x00\x00\x06\ \x00\x00\x00+Persepolis i\ s trying to conn\ ect!be patient!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00D\x00P\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\xac\x00\x00 \x00A\x00r\x00i\x00a\x002\ \xb9|\x00 \xc11\xac\xf5\xc8\x01\xc7<\xb8\x5c\x00 \ \xb2\xe4\xc2\xdc\x00 \xc5\xf0\xac\xb0\xd5\x88\xc2\xb5\xb2\xc8\ \xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00)Pers\ epolis reconnect\ ed aria2 success\ fully\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x1a\xc7\xa0\xc2\xdc\xb9\xcc\x00 \xae0\xb2\xe4\ \xb8$\xc8\xfc\xc18\xc6\x94\x00.\x00.\x00.\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0ePlease W\ ait...\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x22\xb2\xe4\xc7L\x00 \xcet\xd1L\xac\ \xe0\xb9\xac\xb9|\x00 \xc7\xac\xac\x1c\xd5t\x00 \xc8\ \xfc\xc18\xc6\x94\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\ &Please resume t\ he following cat\ egory: \x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00(\xba<\xc8\x00\x00 \xb2\xe4\xc6\xb4\ \xb8\x5c\xb4\xdc\x00 \xc9\xc4\xd5\x89\xc7D\x00 \xc9\x11\ \xc9\xc0\xd5t\x00 \xc8\xfc\xc18\xc6\x94\x00.\x08\x00\ \x00\x00\x00\x06\x00\x00\x00$Please s\ top download pro\ gress first.\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00(\xba<\xc8\x00\x00\ \xb2\xe4\xc7L\x00 \xcet\xd1L\xac\xe0\xb9\xac\xb9\ |\x00 \xc9\x11\xc9\xc0\xd5t\x00 \xc8\xfc\xc18\xc6\ \x94\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00*Ple\ ase stop the fol\ lowing category \ first: \x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x22\xb2\xe4\xc7L\x00 \xcet\xd1L\ \xac\xe0\xb9\xac\xb9|\x00 \xc9\x11\xc9\xc0\xd5t\x00 \ \xc8\xfc\xc18\xc6\x94\x00:\x08\x00\x00\x00\x00\x06\x00\x00\ \x00$Please stop th\ e following cate\ gory: \x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00(\xba<\xc8\x00\x00 \xb2\xe4\xc7L\x00\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb9|\x00 \xc9\x11\xc9\ \xc0\xd5t\x00 \xc8\xfc\xc18\xc6\x94\x00:\x08\x00\x00\ \x00\x00\x06\x00\x00\x00*Please st\ op the following\ download first:\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x16\ \xb2\xe4\xc2\xdc\x00 \xc2\xdc\xb3\xc4\xd5t\x00 \xc8\xfc\ \xc18\xc6\x94\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11\ Please try again\ .\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x1a\ \xb3\x00\xae0\xc5\xf4\xc7t\x00 \xc9\x11\xc9\xc0\xb4\x18\ \xc5\xc8\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0eQueue Stoppe\ d!\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x1a\xb3\x00\xae0\xc5\xf4\xc7t\x00 \xc6D\xb8\xcc\xb4\ \x18\xc5\xc8\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Queue compl\ eted!\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x10\xc9\x00\xbeD\x00 \xc6D\xb8\xcc\x00.\ \x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Re\ ady...\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00$\x00A\x00r\x00i\x00a\x002\x00\ \xb2\xe4\xc2\xdc\x00 \xc5\xf0\xac\xb0\xd5X\xb2\x94\x00\ \xc9\x11\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x15Reconnecting \ Aria2...\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00$\x00P\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x00 \xb2\xe4\xc2\ \xdc\x00 \xc2\xdc\xc7\x91\xd5X\xae0\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x12Restart Per\ sepolis\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00$\xc1 \xd0\xdd\xd5\x5c\x00 \xb2\xe4\ \xc6\xb4\xb8\x5c\xb4\xdc\xb9|\x00 \xb2\xe4\xc7L\xc7<\ \xb8\x5c\x00 \xbc\xf4\xb0\xb4\xae0\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x1aSend selecte\ d downloads to\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x10\xb2\xe4\xc7\ L\xc7<\xb8\x5c\x00 \xbc\xf4\xb0\xb4\xae0\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x07Send to\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x12\xae0\xbc\ \xf8\x00 \xcc=\x00 \xd4\x5c\xc2\xdc\xd5X\xae0\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x10Show ma\ in Window\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x0e\xc65\xc1X\x00 \xd4\x5c\ \xc2\xdc\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\ Show options\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00$\xc7|\xbd\x80\x00\ \xd5m\xba\xa9\xc7t\x00 \xc8\x04\xc1\xa1\xb4\x18\xc9\ \xc0\x00 \xc5J\xc5X\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x08\ \x00\x00\x00\x00\x06\x00\x00\x00+Some it\ ems didn't trans\ ferred successfu\ lly!\x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x0a\xc8\x15\xb8,\x00 \xae0\xc9\x00\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x07Sort by\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00$\xba<\xc8\ \x00\x00 \xba\xa8\xb4\xe0\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\ \xdc\xb9|\x00 \xc9\x11\xc9\xc0\xd5X\xc18\xc6\x94\x00\ !\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Stop \ all downloads fi\ rst!\x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00&\xba<\xc8\x00\x00 \xb2\xe4\xc7L\x00 \xb2\ \xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb9|\x00 \xc9\x11\xc9\xc0\xd5\ X\xc18\xc6\x94\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\ \x00\x00#Stop the foll\ owing download f\ irst: \x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x0e\xb2\xe4\xc2\xdc\x00 \xc2\xdc\xb3\xc4\xd5\ X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Try\ again\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x16\xb2\xe4\xc2\xdc\x00 \xc2\xdc\xb3\xc4\xd5\ t\x00 \xbc\xf4\xc18\xc6\x94\x00!\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0aTry again!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x0c\xc6$\ \xb9X\x00 \xbc\x1c\xc0\xdd\xb4(\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x11an error occ\ urred\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x16\xc7\xa0\xc2\xdc\xb9\xcc\x00 \xae0\xb2\xe4\ \xb8$\xc8\xfc\xc18\xc6\x94\x00!\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0bbe patient!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00&\x00f\ \x00f\x00m\x00p\x00e\x00g\xac\x00\x00 \xc1$\ \xceX\xb4\x18\xc9\xc0\x00 \xc5J\xc5X\xc2\xb5\xb2\xc8\ \xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x18ff\ mpeg is not inst\ alled!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x10\xc6D\xb8\xcc\xb4\x18\xc5\xc8\xc2\xb5\xb2\ \xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09f\ inished!\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00\x0a\xba9\xc2\xf1\x00 \xc6$\xb9\ X\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cmuxin\ g error\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x14\xc2\xdc\xc2\xa4\xd1\x5c\xc7D\x00 \ \xc8\x85\xb8\xcc\xd5i\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x19your system \ in 20 seconds\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x0a\xb2\xe4\xc6\xb4\ \xb8\x5c\xb4\xdc\xb4(\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b\ downloaded\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x10\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00(\ \x00&\x00D\x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ &Download\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0c\xd3\xb8\xc9\xd1\x00(\x00&\x00E\x00)\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x05&Edit\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x0c\xd3\x0c\xc7|\x00(\ \x00&\x00F\x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ &File\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x0e\ \xb3\xc4\xc6\xc0\xb9\xd0\x00(\x00&\x00H\x00)\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x05&Help\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0e\xb3\x00\xae0\xc5\xf4\x00(\ \x00&\x00Q\x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06\ &Queue\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x0c\xbc\xf4\xae0\x00(\x00&\x00V\x00)\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05&View\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00$\x00<\x00b\x00>\xc6$\xb5\ \x14\xc6$\x00 \xd3\x0c\xc7|\x00 \xc0\xc1\xd0\xdc\x00\ :\x00 \x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x1aAudio Fi\ le Status: \x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00$\x00<\x00b\x00>\ \xc6$\xb5\x14\xc6$\x00 \xd3\x0c\xc7|\x00 \xc0\xc1\ \xd0\xdc\x00:\x00 \x00<\x00/\x00b\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1aAudio\ file status: \x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x1c\x00<\x00\ b\x00>\xba9\xc2\xf1\x00 \xc0\xc1\xd0\xdc\x00:\x00\ \x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x16Mixing sta\ tus: \x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x1c\x00<\x00b\x00>\xba9\xc2\xf1\x00 \ \xc0\xc1\xd0\xdc\x00:\x00 \x00<\x00/\x00b\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Mux\ ing status: \ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x16\x00<\x00b\x00\ >\xc0\xc1\xd0\xdc\x00:\x00 \x00<\x00/\x00b\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fSt\ atus: \x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00$\x00<\x00b\x00>\xbeD\xb5\x14\xc6\ $\x00 \xd3\x0c\xc7|\x00 \xc0\xc1\xd0\xdc\x00:\x00\ \x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x1aVideo File\ Status: \x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00$\x00<\x00b\x00>\xbeD\ \xb5\x14\xc6$\x00 \xd3\x0c\xc7|\x00 \xc0\xc1\xd0\xdc\ \x00:\x00 \x00<\x00/\x00b\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x1aVideo f\ ile status: \ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\xf6\x00<\x00h\x00\ t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00\ d\x00/\x00>\x00<\x00b\x00o\x00d\x00y\x00\ >\x00<\x00p\x00>\xc7t\x00 \xc65\xc1X\xc7\ @\x00 \xc2\xdc\xc2\xa4\xd1\x5c\xc7t\x00 \xc8\x08\xc8\ \x04\x00 \xba\xa8\xb4\xdc\xb8\x5c\x00 \xc8\x04\xd6X\xb4\ \x18\xb2\x94\x00 \xac\x83\xc7D\x00 \xbc)\xc9\xc0\xd5\ i\xb2\xc8\xb2\xe4\x00.\x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xc8\ \x04\xc6\xd0\x00 \xad\x00\xb9\xac\xc7\x90\xac\x00\x00 \xc2\ \xdc\xc2\xa4\xd1\x5c\xc7D\x00 \xc7\x90\xb3\xd9\xc7<\xb8\ \x5c\x00 \xc8\x08\xc8\x04\xba\xa8\xb4\xdc\xb8\x5c\x00 \xc8\ \x04\xd6X\xd5X\xb2\x94\x00 \xac\xbd\xc6\xb0\x00 \xd5\ D\xc6\x94\xd5i\xb2\xc8\xb2\xe4\x00.\x00 \x00<\x00\ /\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00\ y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\xbaThis option wil\ l prevent the sy\ stem from going \ to sleep. \ It is neces\ sary if your pow\ er manager is su\ spending the sys\ tem automaticall\ y.

\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x04\ \xc8\x15\xbc\xf4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Ab\ out\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x04\xd6\x5c\ \xc11\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Acti\ ve\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x1c\xc0\xc8\x00\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xb9\xc1\xd0l\x00\ \xcd\x94\xac\x00\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x15Add New Downl\ oad Link\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x22\xc0\xc8\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00\ \xb9\xc1\xd0l\x00 \xcd\x94\xac\x00\xd5X\xae0\x00\ .\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x18A\ dd New Download \ Link...\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc6D\xb8\xcc\ \x00 \xd6\xc4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eAf\ ter download\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x08\xc8\x01\xc6\xa9\xd5X\xae0\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x05Apply\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x08\xcet\xd1L\xac\xe0\xb9\ \xac\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Categ\ ory\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x16\xb2\xe4\ \xc6\xb4\xb8\x5c\xb4\xdc\x00 \xba\xa9\xb8]\x00 \xbeD\ \xc6\xb0\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Cl\ ear Download Lis\ t\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00$\xb2\xe4\xc6\xb4\ \xb8\x5c\xb4\xdc\x00 \xba\xa9\xb8]\xc7X\x00 \xba\xa8\ \xb4\xe0\x00 \xd5m\xba\xa9\x00 \xbeD\xc6\xb0\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00 Clear \ all items in dow\ nload list\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x04\xc6D\xb8\xcc\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x08Complete\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x04\xc5\xf0\xac\xb0\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0bConnections\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x18\xc0\xc8\x00 \xb3\x00\ \xae0\xc5\xf4\x00 \xb9\xcc\xb4\xe4\xae0\x00.\x00.\ \x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Crea\ te New Queue...\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00B\xd1M\xc2\xa4\xd2\xb8\ \x00 \xd3\x0c\xc7|\xc7D\x00 \xb9\xcc\xb4\xe4\xac\xe0\ \x00 \xad\xf8\x00 \xc5H\xc5\xd0\x00 \xb9\xc1\xd0l\ \xb9|\x00 \xd5\x5c\x00 \xc9\x04\xc5)\x00 \xb1#\ \xc5\xb4\x00 \xbc\xf4\xc18\xc6\x94\x00!\x08\x00\x00\x00\ \x00\x06\x00\x00\x005Create a t\ ext file and put\ links in it, li\ ne by line!\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x1c\xc0\xc8\x00 \xb2\xe4\xc6\xb4\xb8\x5c\ \xb4\xdc\x00 \xb3\x00\xae0\xc5\xf4\x00 \xb9\xcc\xb4\xe4\ \xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Crea\ te new download \ queue\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00 \ \xc1 \xd0\xdd\xd5\x5c\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\ \x00 \xd3\x0c\xc7|\x00 \xc0\xad\xc8\x1c\xd5X\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eDelete\ Selected Downlo\ ad Files\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x08\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x08Download\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0e\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\ \x00 \xc0\xc1\xd0\xdc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0f\ Download Status\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00$\xba\xa9\xb8]\x00 \ \xd5X\xb2\xe8\xc5\xd0\xc1\x1c\x00\x0a\x00 \xba<\xc8\x00\ \x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xd5X\xae0\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x22Download\ bottom of\x0a the \ list first\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00J\x00Y\x00o\x00u\x00t\x00u\x00\ b\x00e\x00,\x00 \x00V\x00i\x00m\x00e\x00\ o\x00 \xb4\xf1\xc5\xd0\xc1\x1c\x00 \xbeD\xb5\x14\xc6\ $\xb0\x98\x00 \xc6$\xb5\x14\xc6$\xb9|\x00 \xb2\ \xe4\xc6\xb4\xb8\x5c\xb4\xdc\xd5X\xc18\xc6\x94\x00.\x08\ \x00\x00\x00\x00\x06\x00\x00\x001Downloa\ d video or audio\ from Youtube, V\ imeo, etc.\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x0a\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb4(\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0aDownloa\ ded\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x04\xd3\xb8\ \xc9\xd1\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04Edit\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0a\xc8\x85\xb8\xcc\x00\ \xc2\xdc\xac\x04\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08E\ nd Time\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x04\xc6$\xb9X\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ Error\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x10\ \xb0\xa8\xc7@\x00 \xc6\x08\xc0\xc1\x00 \xc2\xdc\xac\x04\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Estima\ ted Time Left\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x04\xc8\x85\xb8\xcc\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x04Exit\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x04\xd3\x0c\xc7|\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x04File\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x0a\xd3\x0c\xc7|\x00 \xc7t\xb9\x84\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x09File Name\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x0a\xd3\x0c\xc7|\x00 \ \xd0l\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Fi\ le Size\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x18\xbeD\xb5\x14\xc6$\x00 \xb9\xc1\xd0l\x00 \ \xcc>\xae0\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Find Video L\ inks...\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x10\xcc\x98\xc7L\x00 \xc2\xdc\xb3\xc4\x00 \xb0\xa0\ \xc9\xdc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eFirs\ t Try Date\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x06\xb3\xc4\xc6\xc0\xb9\xd0\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x04Help\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0c\xc65\xc1X\x00 \xc2(\xae0\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cHide O\ ptions\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ &\xd1M\xc2\xa4\xd2\xb8\x00 \xd3\x0c\xc7|\xc5\xd0\xc1\ \x1c\x00 \xb9\xc1\xd0l\x00 \xac\x00\xc88\xc6$\xae\ 0\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x1eImport Links fr\ om Text File...\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x1a\xc2\xdc\xc2\xa4\xd1\x5c\ \x00 \xc7\x91\xb3\xd9\x00 \xc0\xc1\xd0\xdc\x00 \xc7 \ \xc9\xc0\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12Ke\ ep System Awake!\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x12\xb9\xc8\xc9\xc0\xb9\ \xc9\x00 \xc2\xdc\xb3\xc4\x00 \xb0\xa0\xc9\xdc\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0dLast Try \ Date\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x0a\xc8\ \x1c\xd5\x5c\x00 \xc1\x8d\xb3\xc4\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0bLimit Speed\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04\xb9\xc1\xd0l\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x04Link\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x18\xc2\xdc\xc2\xa4\xd1\x5c\x00 \xd2\xb8\ \xb8\x08\xc7t\xb8\x5c\x00 \xcd\x5c\xc1\x8c\xd6T\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x17Minimize\ to System Tray\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x000\xc1 \xd0\xdd\xd5\x5c\ \x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\x0c\xc7|\ \xc7D\x00 \xb2\xe4\xb9x\x00 \xd3\xf4\xb3T\xb8\x5c\ \x00 \xc7t\xb3\xd9\xd5X\xae0\x08\x00\x00\x00\x00\x06\ \x00\x00\x00.Move Selecte\ d Download Files\ to Another Fold\ er\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x006\xc1 \xd0\ \xdd\xd5\x5c\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\ \x0c\xc7|\xc7D\x00 \xb2\xe4\xb9x\x00 \xd3\xf4\xb3\ T\xb8\x5c\x00 \xc7t\xb3\xd9\xd5X\xae0\x00.\x00\ .\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x001Mov\ e Selected Downl\ oad Files to Ano\ ther Folder...\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x1e\xc1 \xd0\xdd\xd5\x5c\x00\ \xd5m\xba\xa9\x00 \xc5D\xb7\x98\xb8\x5c\x00 \xc7\ t\xb3\xd9\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x18Move Selected I\ tems Down\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x1c\xc1 \xd0\xdd\xd5\x5c\x00 \xd5m\xba\xa9\ \x00 \xc7\x04\xb8\x5c\x00 \xc7t\xb3\xd9\xd5X\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Move S\ elected Items Up\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00.\xd6\x04\xc7\xac\x00\ \xc1 \xd0\xdd\xd5\x5c\x00 \xd5m\xba\xa9\xc7D\x00\ \xd5\x5c\x00 \xd5\x89\x00 \xc5D\xb7\x98\xb8\x5c\x00\ \xc7t\xb3\xd9\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00-Move currentl\ y selected items\ down by one row\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00,\xd6\x04\xc7\xac\x00\ \xc1 \xd0\xdd\xb4\x1c\x00 \xd5m\xba\xa9\xc7D\x00\ \xd5\x5c\x00 \xd5\x89\x00 \xc7\x04\xb8\x5c\x00 \xc7\ t\xb3\xd9\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ +Move currently \ selected items u\ p by one row\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x06\xbeD\xd6\x5c\xc11\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0aNot Activ\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x1a\xae0\xbc\xf8\ \x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\xb3T\ \x00 \xc5\xf4\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1c\ Open Default Dow\ nload Folder\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x14\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00\ \xd3\xf4\xb3T\x00 \xc5\xf4\xae0\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x14Open Downlo\ ad Folder\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x10\xd3\x0c\xc7|\x00 \xc5\xf4\xae0\x00.\ \x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cOp\ en File...\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc7\ |\xc2\xdc\xc8\x15\xc9\xc0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0ePause Download\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x06\xd3|\xc1<\xd2\xb8\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPercen\ tage\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00&\x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xad\ \x00\xb9\xac\xc7\x90\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bP\ ersepolis Downlo\ ad Manager\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x08\xd6X\xac\xbd\xc1$\xc8\x15\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0bPreferenc\ es\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x06\xc9\xc4\xd5\ \x89\xb9`\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Pro\ gress\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x04\ \xc1\x8d\xc11\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPr\ operties\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x06\xb3\x00\xae0\xc5\xf4\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x05Queue\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x10\xb3\x00\xae0\xc5\xf4\x00 \xc8\x1c\xacp\xd5\ X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cRem\ ove Queue\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00$\xba\xa9\xb8]\xc5\xd0\xc1\x1c\x00 \xc1 \ \xd0\xdd\xd5\x5c\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \ \xc8\x1c\xacp\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00#Remove Selecte\ d Downloads from\ List\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x14\ \xc7t\x00 \xb3\x00\xae0\xc5\xf4\x00 \xc8\x1c\xacp\ \xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Re\ move this queue\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x0a\xc7t\xc2\x88\x00 \ \xbc\xf4\xac\xe0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fRe\ port an Issue\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0a\xc7t\xc2\x88\x00 \xbc\xf4\ \xac\xe0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fRepo\ rt an issue\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \ \xc7t\xc5\xb4\xbc\x1b\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0fResume Downloa\ d\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x14\xb8\x5c\xad\xf8\ \x00 \xd3\x0c\xc7|\x00 \xd4\x5c\xc2\xdc\xd5X\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dShow L\ og File\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x14\xbaT\xb2t\xd4\x5c\xc2\xdc\xc9\x04\x00 \xd4\x5c\ \xc2\xdc\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\ Show Menubar\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x14\xce!\xbat\x00 \xd3(\xb1\ \x10\x00 \xd4\x5c\xc2\xdc\xd5X\xae0\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0fShow Side P\ anel\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00 \xc2\ \xdc\xc2\xa4\xd1\x5c\x00 \xd2\xb8\xb8\x08\xc7t\x00 \xc5\ D\xc7t\xcfX\x00 \xd4\x5c\xc2\xdc\xd5X\xae0\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x15Show Sy\ stem Tray Icon\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x22\xc2\xdc\xc2\xa4\xd1\x5c\x00\ \xd2\xb8\xb8\x08\xc7t\x00 \xc5D\xc7t\xcfX\x00\ \xd4\x5c\xc2\xdc\x00/\xc2(\xae@\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x1aShow/Hide s\ ystem tray icon\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x0c\xce\xf4\xd4\xe8\xd10\ \x00 \xb0D\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ Shut Down\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x04\xd0l\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x04Size\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x0a\xc8\x15\xb8,\x00 \xae0\xc9\x00\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x07Sort by\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x0e\xbb\xf9\xc2\xf1\x00 \xc2\xdc\xc7\ \x91\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cS\ tart Mixing\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x10\xb3\x00\xae0\xc5\xf4\x00 \xc2\xdc\ \xc7\x91\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b\ Start Queue\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x0a\xc2\xdc\xc7\x91\x00 \xc2\xdc\xac\x04\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aStart \ Time\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x14\xc7\ t\x00 \xb3\x00\xae0\xc5\xf4\x00 \xc2\xdc\xc7\x91\xd5\ X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Sta\ rt this queue\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x06\xc2\xdc\xc7\x91\xb4(\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x07Started\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x04\xc0\xc1\xd0\xdc\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x06Status\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x1e\xba\xa8\xb4\xe0\x00 \xd6\ \x5c\xc11\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc9\ \x11\xc9\xc0\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x19Stop All Active\ Downloads\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc9\ \x11\xc9\xc0\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0dStop Download\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x10\xb3\x00\xae0\xc5\xf4\x00\ \xc9\x11\xc9\xc0\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0aStop Queue\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x14\xc7t\x00 \xb3\x00\xae0\ \xc5\xf4\x00 \xc9\x11\xc9\xc0\xd5X\xae0\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0fStop this \ queue\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x14\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc9\x11\xc9\xc0\x00/\ \xcd\xe8\xc1\x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14St\ op/Cancel Downlo\ ad\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x0a\xc8\x04\xc1\ \xa1\x00 \xc1\x8d\xb3\xc4\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0dTransfer Rate\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x18\xbeD\xb5\x14\xc6$\x00\ \xcc>\xae0\xb3\xc4\xadl\x00(\x00&\x00I\x00\ )\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dV&ide\ o Finder\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x10\xbeD\xb5\x14\xc6$\x00 \xcc>\xae0\xb3\ \xc4\xadl\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cVid\ eo Finder\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x04\xbc\xf4\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x04View\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ $\x00A\x00r\x00i\x00a\x002\xac\x00\x00 \xc7\ Q\xb2\xf5\xd5X\xc9\xc0\x00 \xc5J\xc5X\xc2\xb5\xb2\ \xc8\xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16A\ ria2 did not res\ pond!\x07\x00\x00\x00\x12progre\ ss_src_ui_tr\x01\x03\x00\x00\ \x00\x22\x00A\x00r\x00i\x00a\x002\x00 \xc5\xf0\ \xac\xb0\xc7t\x00 \xb0J\xc5\xb4\xc8L\xc2\xb5\xb2\xc8\ \xb2\xe4\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Ar\ ia2 disconnected\ !\x07\x00\x00\x00\x12progress_s\ rc_ui_tr\x01\x03\x00\x00\x00L\x00P\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\xac\x00\x00 \xc5\xf0\xac\xb0\xc7D\x00 \xc2\xdc\ \xb3\xc4\xd5X\xac\xe0\x00 \xc7\x88\xc2\xb5\xb2\xc8\xb2\xe4\ \x00!\x00 \xc7\xa0\xc2\xdc\xb9\xcc\x00 \xae0\xb2\xe4\ \xb8$\xc8\xfc\xc18\xc6\x94\x00!\x08\x00\x00\x00\x00\x06\ \x00\x00\x00,Persepolis i\ s trying to conn\ ect! be patient!\ \x07\x00\x00\x00\x12progress_sr\ c_ui_tr\x01\x03\x00\x00\x00\x16\xb2\xe4\xc2\ \xdc\x00 \xc2\xdc\xb3\xc4\xd5t\x00 \xc8\xfc\xc18\xc6\ \x94\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Ple\ ase try again.\x07\x00\ \x00\x00\x12progress_src_\ ui_tr\x01\x03\x00\x00\x00\x16\xb2\xe4\xc2\xdc\x00\ \xc2\xdc\xb3\xc4\xd5t\x00 \xbc\xf4\xc18\xc6\x94\x00\ !\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aTry a\ gain!\x07\x00\x00\x00\x12progre\ ss_src_ui_tr\x01\x03\x00\x00\ \x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc6D\xb8\xcc\ \x00 \xd6\xc4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eAf\ ter download\x07\x00\x00\x00\ \x0eprogress_ui_tr\x01\ \x03\x00\x00\x00\x08\xc8\x01\xc6\xa9\xd5X\xae0\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05Apply\x07\x00\x00\x00\ \x0eprogress_ui_tr\x01\ \x03\x00\x00\x00\x0e\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc8\ \x15\xbc\xf4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14Dow\ nload Informatio\ n\x07\x00\x00\x00\x0eprogress_u\ i_tr\x01\x03\x00\x00\x00\x0e\xb2\xe4\xc6\xb4\xb8\x5c\ \xb4\xdc\x00 \xc65\xc1X\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Download Optio\ ns\x07\x00\x00\x00\x0eprogress_\ ui_tr\x01\x03\x00\x00\x00\x0c\xb2\xe4\xc6\xb4\xb8\ \x5c\xb4\xdc\xb4(\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0bDownloaded:\x07\x00\x00\x00\ \x0eprogress_ui_tr\x01\ \x03\x00\x00\x00\x12\xb0\xa8\xc7@\x00 \xc6\x08\xc0\xc1\x00\ \xc2\xdc\xac\x04\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x14Estimated time \ left:\x07\x00\x00\x00\x0eprogre\ ss_ui_tr\x01\x03\x00\x00\x00\x0a\xc8\x1c\ \xd5\x5c\x00 \xc1\x8d\xb3\xc4\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0bLimit speed\x07\x00\x00\ \x00\x0eprogress_ui_tr\ \x01\x03\x00\x00\x00\x08\xb9\xc1\xd0l\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x06Link: \x07\x00\ \x00\x00\x0eprogress_ui_t\ r\x01\x03\x00\x00\x00\x0c\xc5\xf0\xac\xb0\x00 \xc2\x18\x00\ :\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x17Num\ ber of connectio\ ns: \x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00\x08\xc7|\xc2\ \xdc\xc8\x15\xc9\xc0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05P\ ause\x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00&\x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xad\x00\xb9\ \xac\xc7\x90\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bPer\ sepolis Download\ Manager\x07\x00\x00\x00\x0epro\ gress_ui_tr\x01\x03\x00\x00\x00\ \x08\xc7t\xc5\xb4\xbc\x1b\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x06Resume\x07\x00\x00\x00\x0epr\ ogress_ui_tr\x01\x03\x00\x00\ \x00\x0c\xce\xf4\xd4\xe8\xd10\x00 \xb0D\xae0\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x09Shut Dow\ n\x07\x00\x00\x00\x0eprogress_u\ i_tr\x01\x03\x00\x00\x00\x08\xc0\xc1\xd0\xdc\x00:\ \x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Stat\ us: \x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00\x08\xc9\x11\xc9\ \xc0\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04S\ top\x07\x00\x00\x00\x0eprogress\ _ui_tr\x01\x03\x00\x00\x00\x0e\xc8\x04\xc1\xa1\ \x00 \xc1\x8d\xb3\xc4\x00:\x00 \x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0fTransfer rat\ e: \x07\x00\x00\x00\x0eprogress\ _ui_tr\x01\x03\x00\x00\x00\xcc\x00<\x00b\ \x00>\x00<\x00c\x00e\x00n\x00t\x00e\x00r\ \x00>\x00P\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\xb9|\x00 \xb2\xe4\xc2\xdc\x00 \ \xc2\xdc\xc7\x91\xd5t\xc8\xfc\xc18\xc6\x94\x00!\x00<\ \x00/\x00c\x00e\x00n\x00t\x00e\x00r\x00>\ \x00<\x00/\x00b\x00>\x00<\x00b\x00r\x00>\ \x00<\x00c\x00e\x00n\x00t\x00e\x00r\x00>\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\ \x00i\x00s\xb9|\x00 \xb2\xe4\xc2\xdc\x00 \xc2\xdc\ \xc7\x91\xd5X\xbat\x00 \xc7|\xbd\x80\x00 \xbc\xc0\ \xac\xbd\x00 \xc0\xac\xd5m\xc7t\x00 \xc8\x01\xc6\xa9\ \xb4)\xb2\xc8\xb2\xe4\x00<\x00/\x00c\x00e\x00n\ \x00t\x00e\x00r\x00>\x08\x00\x00\x00\x00\x06\x00\x00\ \x00{
Res\ tart Persepolis \ Please!
\

\ Some changes tak\ e effect after r\ estarting Persep\ olis
\x07\x00\x00\ \x00\x11setting_src_ui\ _tr\x01\x03\x00\x00\x00\xa2\x00<\x00b\x00>\x00\ <\x00c\x00e\x00n\x00t\x00e\x00r\x00>\xc7\ t\x00 \xb2\xe8\xcd\x95\xd0\xa4\xb2\x94\x00 \xc7t\xc8\ \x04\xc5\xd0\x00 \xc0\xac\xc6\xa9\xd5\x5c\x00 \xc8\x01\xc7\ t\x00 \xc7\x88\xc2\xb5\xb2\xc8\xb2\xe4\x00!\x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \xb2\xe4\xb9x\x00 \xb2\xe8\xcd\x95\xd0\ \xa4\xb9|\x00 \xc0\xac\xc6\xa9\xd5X\xc18\xc6\x94\x00\ !\x00<\x00/\x00c\x00e\x00n\x00t\x00e\x00\ r\x00>\x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\ \x06\x00\x00\x00_
\ This shortcut ha\ s been used befo\ re! \ Use anoth\ er one!
\
\x07\x00\x00\x00\x11setting\ _src_ui_tr\x01\x03\x00\x00\x00$\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\ \x00i\x00s\x00 \xb2\xe4\xc2\xdc\x00 \xc2\xdc\xc7\x91\ \xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Re\ start Persepolis\ !\x07\x00\x00\x00\x11setting_sr\ c_ui_tr\x01\x03\x00\x00\x00\xdc\x00<\x00\ h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00\ a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\x00\ y\x00>\x00<\x00p\x00>\x00 \xc2\x18\xc2\xe0\xd5\ `\x00 \x00J\x00S\x00O\x00N\x00-\x00R\x00\ P\x00C\x00/\x00X\x00M\x00L\x00-\x00R\x00\ P\x00C\x00 \xc1\x1c\xbc\x84\xc7X\x00 \xd3\xec\xd2\ \xb8\x00 \xbc\x88\xd68\xb9|\x00 \xc9\xc0\xc8\x15\xd5\ i\xb2\xc8\xb2\xe4\x00.\x00 \xac\x00\xb2\xa5\xd5\x5c\x00\ \xac\x12\x00:\x00 \x001\x000\x002\x004\x00\ \x00-\x00 \x006\x005\x005\x003\x005\x00\ \xae0\xbc\xf8\xac\x12\x00:\x00 \x006\x008\x00\ 0\x001\x00 \x00<\x00/\x00p\x00>\x00<\x00\ /\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00\ h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x95\

Specif\ y a port number \ for JSON-RPC/XML\ -RPC server to l\ isten to. Possib\ le Values: 1024 \ - 65535 Default:\ 6801

\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\xc0\ \x00<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\ \x00e\x00a\x00d\x00/\x00>\x00<\x00b\x00o\ \x00d\x00y\x00>\x00<\x00p\x00>\xc8\xfc\xc7X\ \x00:\x00 \xc7\x98\xac\xbd\xb8\x5c\xac\x00\x00 \xc7\x98\ \xba\xbb\xb4\x18\xbat\x00 \xbb8\xc8\x1c\xac\x00\x00 \ \xbc\x1c\xc0\xdd\xd5`\x00 \xc2\x18\x00 \xc7\x88\xc2\xb5\ \xb2\xc8\xb2\xe4\x00!\x00 \xc8\xfc\xc7X\xd5t\xc1\x1c\ \x00 \xc2\x18\xd5\x89\xd5X\xacp\xb0\x98\x00 \xd6X\ \xac\xbd\xc1$\xc8\x15\xc7D\x00 \xbc\xc0\xac\xbd\xd5X\ \xc9\xc0\x00 \xb9\xc8\xc18\xc6\x94\x00!\x00<\x00/\ \x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\ \x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x82\

\ Attention: Wrong\ path may cause \ problems! Do it \ carefully or don\ 't change defaul\ t setting!

\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00`\x00<\x00h\x00t\x00m\x00l\x00>\ \x00<\x00h\x00e\x00a\x00d\x00/\x00>\x00<\ \x00b\x00o\x00d\x00y\x00>\x00<\x00p\x00>\ \xd6\x15\xc2\xdd\x00 \x00H\x00H\x00:\x00M\x00M\ \x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\ \x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\ \x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x004

Format HH:MM\

\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x84\x00<\x00h\x00t\ \x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\ \x00/\x00>\x00<\x00b\x00o\x00d\x00y\x00>\ \x00<\x00p\x00>\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xc5\xd0\ \x00 \xc2\xe4\xd3(\xd5\x5c\x00 \xac\xbd\xc6\xb0\x00 \ \xc2\xdc\xb3\xc4\x00 \xd6\x9f\xc2\x18\xb9|\x00 \xc9\xc0\ \xc8\x15\xd5i\xb2\xc8\xb2\xe4\x00.\x00<\x00/\x00p\ \x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\ \x00<\x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00O

Se\ t number of trie\ s if download fa\ iled.

\ \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\xe2\x00\ <\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00\ e\x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00\ d\x00y\x00>\x00<\x00p\x00>\xc7\xac\xc2\xdc\xb3\ \xc4\x00 \xc0\xac\xc7t\xc5\xd0\x00 \xb3\x00\xae0\xd5\ `\x00 \xc2\xdc\xac\x04\x00(\xcd\x08\x00)\xc7D\x00\ \xc9\xc0\xc8\x15\xd5i\xb2\xc8\xb2\xe4\x00.\x00 \xb2\ \xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xad\x00\xb9\xac\xc7\x90\xb2\ \x94\x00 \x00H\x00T\x00T\x00P\x00 \xc1\x1c\xbc\ \x84\xac\x00\x00 \x005\x000\x003\x00 \xc7Q\xb2\ \xf5\xc7D\x00 \xbc\x18\xd6X\xd5X\xbat\x00 \xb2\ \xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb9|\x00 \xb2\xe4\xc2\xdc\x00\ \xc2\xdc\xb3\xc4\xd5i\xb2\xc8\xb2\xe4\x00.\x00<\x00\ /\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00\ y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\xacSet the seconds\ to wait between\ retries. Downlo\ ad manager will \ retry download\ s when the HT\ TP server retu\ rns a 503 resp\ onse.

\ \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00v\x00\ <\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00\ e\x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00\ d\x00y\x00>\x00<\x00p\x00>\xc2\xdc\xac\x04\xcd\ \x08\xac\xfc\xb9|\x00 \xcd\x08\x00 \xb2\xe8\xc7\x04\xb8\ \x5c\x00 \xc9\xc0\xc8\x15\xd5i\xb2\xc8\xb2\xe4\x00.\x00\ \x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00\ o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00\ m\x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00@<\ html>

Set timeout\ in seconds. \x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x8a\x00<\x00h\x00t\x00m\x00\ l\x00>\x00<\x00h\x00e\x00a\x00d\x00/\x00\ >\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00\ p\x00>\xc7t\x00 \xae0\xb2\xa5\xc7@\x00 \xc6\ \xb4\xc6\x01\x00 \xcc\xb4\xc8\x1c\xc5\xd0\xc1\x1c\x00 \xc7\ \x91\xb3\xd9\xd5X\xc9\xc0\x00 \xc5J\xc7D\x00 \xc2\ \x18\x00 \xc7\x88\xc2\xb5\xb2\xc8\xb2\xe4\x00.\x00<\x00\ /\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00\ y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00[This feature ma\ y not work in yo\ ur operating sys\ tem.

<\ /html>\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\xc8\x00<\ \x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\ \x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\ \x00y\x00>\x00<\x00p\x00>\xc7t\x00 \xc65\ \xc1X\xc7@\x00 \x00S\x00S\x00L\x00/\x00T\ \x00L\x00S\x00 \xd5x\xb4\xdc\xc1p\xc7t\xd0l\ \x00 \xc2\xe4\xd3(\xb9|\x00 \xbc)\xc9\xc0\xd5i\ \xb2\xc8\xb2\xe4\x00.\x00 \xd5X\xc9\xc0\xb9\xcc\x00 \ \xc0\xac\xc6\xa9\xc5\xd0\x00 \xb50\xb9x\x00 \xc7\x04\ \xd5\xd8\xc7@\x00 \xc0\xac\xc6\xa9\xc7\x90\x00 \xbc\xf8\ \xc7x\xc7X\x00 \xccE\xc7\x84\xc7\x85\xb2\xc8\xb2\xe4\ \x00!\x00<\x00/\x00p\x00>\x00<\x00/\x00b\ \x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\ \x00m\x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00r\

This optio\ n avoids SSL/TLS\ handshake failu\ re. But use it a\ t your own risk!\

\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\xf6\x00<\x00h\x00t\ \x00m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\ \x00/\x00>\x00<\x00b\x00o\x00d\x00y\x00>\ \x00<\x00p\x00>\xc7t\x00 \xc65\xc1X\xc7@\ \x00 \xc2\xdc\xc2\xa4\xd1\x5c\xc7t\x00 \xc8\x08\xc8\x04\ \x00 \xba\xa8\xb4\xdc\xb8\x5c\x00 \xc8\x04\xd6X\xb4\x18\ \xb2\x94\x00 \xac\x83\xc7D\x00 \xbc)\xc9\xc0\xd5i\ \xb2\xc8\xb2\xe4\x00.\x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \xc8\x04\ \xc6\xd0\x00 \xad\x00\xb9\xac\xc7\x90\xac\x00\x00 \xc2\xdc\ \xc2\xa4\xd1\x5c\xc7D\x00 \xc7\x90\xb3\xd9\xc7<\xb8\x5c\ \x00 \xc8\x08\xc8\x04\xba\xa8\xb4\xdc\xb8\x5c\x00 \xc8\x04\ \xd6X\xd5X\xb2\x94\x00 \xac\xbd\xc6\xb0\x00 \xd5D\ \xc6\x94\xd5i\xb2\xc8\xb2\xe4\x00.\x00 \x00<\x00/\ \x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\ \x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\xba\

\ This option will\ prevent the sys\ tem from going t\ o sleep. \ It is necess\ ary if your powe\ r manager is sus\ pending the syst\ em automatically\ .

\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x90\x00<\x00h\ \x00t\x00m\x00l\x00>\x00<\x00h\x00e\x00a\ \x00d\x00/\x00>\x00<\x00b\x00o\x00d\x00y\ \x00>\x00<\x00p\x00>\xb2\xe4\xc9\x11\x00 \xc5\xf0\ \xac\xb0\xc7D\x00 \xc0\xac\xc6\xa9\xd5X\xbat\x00 \ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc1\x8d\xb3\xc4\xb9|\ \x00 \xb1\x92\xc7|\x00 \xc2\x18\x00 \xc7\x88\xc2\xb5\ \xb2\xc8\xb2\xe4\x00.\x00.\x00<\x00/\x00p\x00>\ \x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\ \x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00c

Usin\ g multiple conne\ ctions can help \ speed up your do\ wnload.

\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x04\xb3\xd9\xc7\x91\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06A\ ction\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x1c\xc0\xc8\x00\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xb9\xc1\xd0l\x00\ \xcd\x94\xac\x00\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x15Add New Downl\ oad Link\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x1a\ \xc0\xc8\x00 \xbeD\xb5\x14\xc6$\x00 \xb9\xc1\xd0l\ \x00 \xcd\x94\xac\x00\xd5X\xae0\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x12Add New Vide\ o Link\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\x04\xcd\xe8\ \xc1\x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Canc\ el\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x08\xcet\xd1L\xac\xe0\ \xb9\xac\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Cate\ gory\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x08\xbc\xc0\xac\xbd\ \xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Ch\ ange\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00 \x00A\x00r\ \x00i\x00a\x002\x00 \xae0\xbc\xf8\x00 \xac\xbd\ \xb8\x5c\x00 \xbc\xc0\xac\xbd\xd5X\xae0\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x19Change Ari\ a2 default path\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x0e\xc0\xc9\x00 \xadl\xc11\xd4\ \x5c\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eC\ olor scheme: \x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x10\xc5\xf4\x00 \xc0\xac\xc6\xa9\xc7\x90\x00\ \xc8\x15\xc7X\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15C\ olumns Customiza\ tion\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x04\xc5\xf0\xac\xb0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bConnec\ tions\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00F\xae0\xbc\ \xf8\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\xb3\ T\xc5\xd0\x00 \xc7L\xc5E\x00,\x00 \xb3\xd9\xc6\ \x01\xc0\xc1\x00 \xb4\xf1\xc5\xd0\x00 \xb3\x00\xd5\x5c\x00\ \xd5X\xc7\x04\x00 \xd3\xf4\xb3T\x00 \xb9\xcc\xb4\ \xe4\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00BCre\ ate subfolders f\ or Music,Videos,\ ... in default \ download folder\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x06\xae0\xbc\xf8\xac\x12\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08Defaults\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x18\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00\ \xd5m\xba\xa9\x00 \xc0\xad\xc8\x1c\xd5X\xae0\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x15Delete \ Download Items\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x000\xd5<\xc5\xb4\xb9|\x00 \xd6U\ \xc7x\xd5X\xae0\x00 \xc7\x04\xd5t\x00 \xc7x\ \xc9\x9d\xc1\x1c\xb9|\x00 \xc0\xac\xc6\xa9\xd5X\xc9\xc0\ \x00 \xc5J\xc7L\x08\x00\x00\x00\x00\x06\x00\x00\x00)\ Don't use certif\ icate to verify \ the peers\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x0e\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc65\xc1X\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x10Downloa\ d Options\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\xb3T\x00\ :\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Dow\ nload folder: \x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x0a\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xb4(\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aDownlo\ aded\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x14\xc5L\xb9\xbc\ \x00 \xc0\xac\xc6\xb4\xb4\xdc\x00 \xd6\x5c\xc11\xd6T\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aEnable\ Notification So\ unds\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x1e\xc2\xdc\xc2\xa4\ \xd1\x5c\x00 \xd2\xb8\xb8\x08\xc7t\x00 \xc5D\xc7t\ \xcfX\x00 \xd6\x5c\xc11\xd6T\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x17Enable syste\ m tray icon\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x10\xb0\xa8\xc7@\x00 \xc6\x08\xc0\xc1\x00 \xc2\ \xdc\xac\x04\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Est\ imated Time Left\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x0a\xd3\x0c\xc7|\x00 \xc7t\ \xb9\x84\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09File\ Name\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x10\xcc\x98\xc7\ L\x00 \xc2\xdc\xb3\xc4\x00 \xb0\xa0\xc9\xdc\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0eFirst Try\ Date\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x08\xae\x00\xaf\ 4\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x06F\ ont: \x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x000\xb2\xeb\xae\ 0\x00 \xbc\x84\xd2\xbc\xc7D\x00 \xd0t\xb9\xad\xd5\ X\xbat\x00 \xae0\xbc\xf8\x00 \xcc=\xc7t\x00\ \xc2(\xac\xa8\xc9\xd1\xb2\xc8\xb2\xe4\x00.\x08\x00\x00\ \x00\x00\x06\x00\x00\x00)Hide main\ window if close\ button clicked.\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x0a\xc5D\xc7t\xcfX\x00:\ \x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Icon\ s: \x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00L\xbe\x0c\xb7|\xc6\ \xb0\xc8\x00\xac\x00\x00 \xc5\xf4\xb9\xac\xbat\x00,\x00\ \xc2\xdc\xc2\xa4\xd1\x5c\x00 \xd2\xb8\xb8\x08\xc7t\xc5\ \xd0\xc1\x1c\x00 \x00P\x00e\x00r\x00s\x00e\x00\ p\x00o\x00l\x00i\x00s\xb9|\x00 \xc2\xdc\xc7\ \x91\xd5i\xb2\xc8\xb2\xe4\x08\x00\x00\x00\x00\x06\x00\x00\x00\ 5If browser is o\ pened, start Per\ sepolis in syste\ m tray\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00 \xd1M\ \xc2\xa4\xd2\xb8\x00 \xd3\x0c\xc7|\xc5\xd0\xc1\x1c\x00 \ \xb9\xc1\xd0l\x00 \xac\x00\xc88\xc6$\xae0\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1bImport L\ inks from Text F\ ile\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x1a\xc2\xdc\xc2\xa4\xd1\ \x5c\x00 \xc7\x91\xb3\xd9\x00 \xc0\xc1\xd0\xdc\x00 \xc7\ \xc9\xc0\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12K\ eep system awake\ !\x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x08\xc5\xb8\xc5\xb4\x00:\x00\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aLangu\ age: \x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x12\xb9\xc8\xc9\ \xc0\xb9\xc9\x00 \xc2\xdc\xb3\xc4\x00 \xb0\xa0\xc9\xdc\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0dLast Tr\ y Date\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\x84\xce\xa1\ \xcc\x98\xd5`\x00 \xcd\x5c\xb3\x00\x00 \xb9\xc1\xd0l\ \x00 \xc2\x18\x00:\x00<\x00b\x00r\x00/\x00>\ \x00<\x00s\x00m\x00a\x00l\x00l\x00>\x00(\ \xbe\x0c\xb7|\xc6\xb0\xc8\x00\xac\x00\x00 \xd5\x5c\x00 \ \xbc\x88\xc5\xd0\x00 \xc5\xec\xb7\xec\x00 \xac\x1c\xc7X\ \x00 \xb3\xd9\xc6\x01\xc0\xc1\x00 \xb9\xc1\xd0l\xb9|\ \x00 \xc8\x04\xc1\xa1\xd5X\xb2\x94\x00 \xac\xbd\xc6\xb0\ \x00)\x00<\x00/\x00s\x00m\x00a\x00l\x00l\ \x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00hMaxi\ mum number of li\ nks to capture:<\ br/>(If b\ rowser sends mul\ tiple video link\ s at a time)\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x18\xc2\xdc\xc2\xa4\ \xd1\x5c\x00 \xd2\xb8\xb8\x08\xc7t\xb8\x5c\x00 \xcd\x5c\ \xc1\x8c\xd6T\x08\x00\x00\x00\x00\x06\x00\x00\x00\x17Mi\ nimize to System\ Tray\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x1e\xc1 \xd0\ \xdd\xd5\x5c\x00 \xd5m\xba\xa9\x00 \xc5D\xb7\x98\xb8\ \x5c\x00 \xc7t\xb3\xd9\xd5X\xae0\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x18Move Select\ ed Items Down\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x1c\xc1 \xd0\xdd\xd5\x5c\x00 \xd5m\xba\ \xa9\x00 \xc7\x04\xb8\x5c\x00 \xc7t\xb3\xd9\xd5X\xae\ 0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Move \ Selected Items U\ p\x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x0e\xc5L\xb9\xbc\x00 \xc7\ \xd6\x15\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x13Notification ty\ pe: \x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x04\xc5L\xb9\xbc\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dNotifi\ cations\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x0c\xc5\ \xf0\xac\xb0\x00 \xc2\x18\x00:\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x17Number of c\ onnections: \x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0e\xc2\xdc\xb3\xc4\x00 \xd6\x9f\xc2\x18\x00:\ \x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Numb\ er of tries: \x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x04\xd6U\xc7x\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x02OK\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x06\xd3|\xc1\ <\xd2\xb8\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPer\ centage\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x08\xd6\ X\xac\xbd\xc1$\xc8\x15\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0bPreferences\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0e\xc0\xc8\x00 \xd0\xa4\x00 \xb2\x04\xb9t\ \xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0ePres\ s new keys\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x04\xc8\x85\xb8\xcc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04\ Quit\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x22\x00R\x00P\ \x00C\x00 \x00p\x00o\x00r\x00t\x00 \x00n\ \x00u\x00m\x00b\x00e\x00r\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x11RPC port\ number: \x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x18\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd5m\xba\xa9\x00\ \xc8\x1c\xacp\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x15Remove Downlo\ ad Items\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00(\ \xc2\xdc\xc7\x91\x00 \xc2\xdc\x00 \x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \ \xc2\xe4\xd5\x89\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x19Run Persepolis\ at startup\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x14\xb2\xe4\xb9x\x00 \xc7t\xb9\x84\xc7<\xb8\ \x5c\x00 \xc8\x00\xc7\xa5\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x07Save As\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x06\ \xb2\xe8\xcd\x95\xd0\xa4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08\ Shortcut\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x06\ \xb2\xe8\xcd\x95\xd0\xa4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ Shortcuts\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ 8\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\xac\x00\x00 \xc6D\xb8\ \xcc\xb4\x18\xbat\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00\ \xc6D\xb8\xcc\x00 \xb3\x00\xd6T\xc0\xc1\xc7\x90\x00\ \xd4\x5c\xc2\xdc\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x007Show download\ complete dialog\ when download i\ s finished\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x1e\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc9\xc4\xd5\x89\ \xb9`\x00 \xcc=\x00 \xd4\x5c\xc2\xdc\xd5X\xae0\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1dShow d\ ownload progress\ window\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x14\xba\ T\xb2t\xd4\x5c\xc2\xdc\xc9\x04\x00 \xd4\x5c\xc2\xdc\xd5\ X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cSho\ w menubar\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x14\xce!\xbat\x00 \xd3(\xb1\x10\x00 \xd4\x5c\xc2\ \xdc\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fS\ how side panel\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x10\xb2\xe4\xc7L\x00 \xc5\xf4\x00 \ \xd4\x5c\xc2\xdc\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13\ Show these colum\ ns:\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x04\xd0l\xae0\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x04Size\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x08\xd0l\xae0\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x06Size: \x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x04\xc0\xc1\xd0\xdc\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x06Status\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x0a\xc2\xa4\xd0\xc0\xc7|\x00:\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x07Style: \x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x16\xc2\xdc\xac\x04\x00 \xcd\x08\xac\xfc\x00 \ \x00(\xcd\x08\x00)\x00:\x00 \x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Timeout (sec\ onds): \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x18\xb3\ \xc4\xadl\xba\xa8\xc7L\x00 \xc5D\xc7t\xcfX\x00\ \xd0l\xae0\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x14Toolbar icons s\ ize: \x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x0a\xc8\x04\xc1\ \xa1\x00 \xc1\x8d\xb3\xc4\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0dTransfer Rate\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x16\xbeD\xb5\x14\xc6$\x00 \xcc>\ \xae0\xb3\xc4\xadl\x00 \xc65\xc1X\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x14Video Find\ er Options\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x08\xc6\xa9\xb7\xc9\x00:\x00 \x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x08Volume: \x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00.\xb3\x00\xae0\xc5\xf4\xc7X\x00 \xac\x01\ \x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xc0\xac\xc7t\ \xc7X\x00 \xb3\x00\xae0\x00 \xc2\xdc\xac\x04\x00:\ \x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00+Wait\ period between \ each download in\ queue:\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x22\xc7\ \xac\xc2\xdc\xb3\xc4\x00 \xac\x04\x00 \xb3\x00\xae0\x00\ \xc2\xdc\xac\x04\x00 \x00(\xcd\x08\x00)\x00:\x00\ \x08\x00\x00\x00\x00\x06\x00\x00\x00'Wait \ period between r\ etries (seconds)\ : \x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x14\xb3\x00\xae0\xc5\xf4\ \xc5\xd0\x00 \xcd\x94\xac\x00\xd5X\xae0\x00:\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0eAdd to q\ ueue: \x07\x00\x00\x00\x0atext_\ ui_tr\x01\x03\x00\x00\x00\x04\xcd\xe8\xc1\x8c\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x06Cancel\x07\ \x00\x00\x00\x0atext_ui_tr\x01\x03\ \x00\x00\x00\x18\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\xf4\ \xb3T\x00 \xbc\xc0\xac\xbd\xd5X\xae0\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x16Change Dow\ nload Folder\x07\x00\x00\x00\ \x0atext_ui_tr\x01\x03\x00\x00\x00\ \x0c\xba\xa8\xb4P\xc0\xad\xc8\x1c\xd5X\xae0\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0cDeselect \ All\x07\x00\x00\x00\x0atext_ui_\ tr\x01\x03\x00\x00\x00\x0e\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\ \x00 \xc65\xc1X\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10\ Download Options\ \x07\x00\x00\x00\x0atext_ui_tr\x01\ \x03\x00\x00\x00\x12\xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \xd3\ \xf4\xb3T\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x11Download folder\ : \x07\x00\x00\x00\x0atext_ui_t\ r\x01\x03\x00\x00\x00\x16\xbeD\xbc\x00\xbc\x88\xd68\x00\ \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x13Download \ password: \x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x22\xc0\ \xac\xc6\xa9\xc7\x90\xc7t\xb9\x84\x00 \xbc\x0f\x00 \xbe\ D\xbc\x00\xbc\x88\xd68\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\ \xdc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eDownl\ oad username and\ password\x07\x00\x00\x00\x0ate\ xt_ui_tr\x01\x03\x00\x00\x00\x18\xc0\xac\ \xc6\xa9\xc7\x90\xc7t\xb9\x84\x00 \xb2\xe4\xc6\xb4\xb8\x5c\ \xb4\xdc\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x13\ Download usernam\ e: \x07\x00\x00\x00\x0atext_ui_\ tr\x01\x03\x00\x00\x00\x06\x00I\x00P\x00:\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x03IP:\x07\x00\x00\x00\x0a\ text_ui_tr\x01\x03\x00\x00\x00\x0a\ \xc8\x1c\xd5\x5c\x00 \xc1\x8d\xb3\xc4\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0bLimit speed\x07\ \x00\x00\x00\x0atext_ui_tr\x01\x03\ \x00\x00\x00\x04\xb9\xc1\xd0l\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x05Links\x07\x00\x00\x00\x0atext\ _ui_tr\x01\x03\x00\x00\x00\x0a\xc5\xf0\xac\xb0\ \x00 \xc2\x18\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Number of connec\ tions:\x07\x00\x00\x00\x0atext_\ ui_tr\x01\x03\x00\x00\x00\x04\xd6U\xc7x\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x02OK\x07\x00\x00\x00\x0a\ text_ui_tr\x01\x03\x00\x00\x00&\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\ \x00i\x00s\x00 \xb2\xe4\xc6\xb4\xb8\x5c\xb4\xdc\x00 \ \xad\x00\xb9\xac\xc7\x90\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1b\ Persepolis Downl\ oad Manager\x07\x00\x00\x00\x0a\ text_ui_tr\x01\x03\x00\x00\x00\x06\ \xd3\xec\xd2\xb8\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ Port:\x07\x00\x00\x00\x0atext_u\ i_tr\x01\x03\x00\x00\x00\x06\xd5\x04\xb8]\xc2\xdc\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Proxy\x07\ \x00\x00\x00\x0atext_ui_tr\x01\x03\ \x00\x00\x00\x14\xd5\x04\xb8]\xc2\xdc\x00 \xbeD\xbc\x00\ \xbc\x88\xd68\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Proxy password\ : \x07\x00\x00\x00\x0atext_ui_t\ r\x01\x03\x00\x00\x00\x16\xd5\x04\xb8]\xc2\xdc\x00 \xc0\ \xac\xc6\xa9\xc7\x90\xc7t\xb9\x84\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x10Proxy use\ rname: \x07\x00\x00\x00\x0atext\ _ui_tr\x01\x03\x00\x00\x00\x0e\xba\xa8\xb4P\ \x00 \xc1 \xd0\xdd\xd5X\xae0\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0aSelect All\x07\x00\ \x00\x00\x0atext_ui_tr\x01\x03\x00\ \x00\x00$\x00<\x00b\x00>\xc6$\xb5\x14\xc6$\x00\ \xd3\x0c\xc7|\x00 \xc0\xc1\xd0\xdc\x00:\x00 \x00\ <\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x1aAudio file s\ tatus: \x07\x00\x00\x00\x1b\ video_finder_pro\ gress_ui_tr\x01\x03\x00\x00\x00\ \x1c\x00<\x00b\x00>\xba9\xc2\xf1\x00 \xc0\xc1\xd0\ \xdc\x00:\x00 \x00<\x00/\x00b\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x16Muxing\ status: \x07\x00\x00\ \x00\x1bvideo_finder_p\ rogress_ui_tr\x01\x03\x00\ \x00\x00$\x00<\x00b\x00>\xbeD\xb5\x14\xc6$\x00\ \xd3\x0c\xc7|\x00 \xc0\xc1\xd0\xdc\x00:\x00 \x00\ <\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x1aVideo file s\ tatus: \x07\x00\x00\x00\x1b\ video_finder_pro\ gress_ui_tr\x01\x03\x00\x00\x00\ \x0a\xac\xe0\xae\x09\x00 \xc65\xc1X\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Advanced op\ tions\x07\x00\x00\x00\x13ytaddl\ ink_src_ui_tr\x01\x03\x00\ \x00\x00\x0e\xc6$\xb5\x14\xc6$\x00 \xd6\x15\xc2\xdd\x00\ :\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dAudio\ format:\x07\x00\x00\x00\x13yta\ ddlink_src_ui_tr\ \x01\x03\x00\x00\x00\x16\xbb\xf8\xb5\x14\xc5\xb4\x00 \xba\xa9\ \xb8]\x00 \xac\x00\xc88\xc6$\xae0\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x10Fetch Medi\ a List\x07\x00\x00\x00\x13ytadd\ link_src_ui_tr\x01\x03\ \x00\x00\x00 \xbb\xf8\xb5\x14\xc5\xb4\x00 \xc8\x15\xbc\xf4\ \x00 \xac\x00\xc88\xc6$\xb2\x94\x00 \xc9\x11\x00.\ \x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Fe\ tching Media Inf\ o...\x07\x00\x00\x00\x13ytaddli\ nk_src_ui_tr\x01\x03\x00\x00\ \x00\x22\xc6,\xbc\x14\xb9x\x00 \xb3\xd9\xc6\x01\xc0\xc1\ \x00 \xb9\xc1\xd0l\xb9|\x00 \xc7\x85\xb8%\xd5X\ \xc18\xc6\x94\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1fPl\ ease enter a val\ id video link\x07\x00\x00\ \x00\x13ytaddlink_src_\ ui_tr\x01\x03\x00\x00\x00\x0e\xd6\x15\xc2\xdd\x00\ \xc1 \xd0\xdd\xd5X\xae0\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0fSelect a form\ at\x07\x00\x00\x00\x13ytaddlink\ _src_ui_tr\x01\x03\x00\x00\x00\x10\ \xbeD\xb5\x14\xc6$\x00 \xcc>\xae0\xb3\xc4\xadl\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cVideo \ Finder\x07\x00\x00\x00\x13ytadd\ link_src_ui_tr\x01\x03\ \x00\x00\x00\x0e\xbeD\xb5\x14\xc6$\x00 \xd6\x15\xc2\xdd\ \x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dVide\ o format:\x07\x00\x00\x00\x13yt\ addlink_src_ui_t\ r\x01\ \x00\x00\x16\x91\ \x00\ \x00N\xaex\x9c\xcd\x5c\x0fp\x1c\xd5y\x7f\x92\xee$\ \xdd\x1f\xdd\xc9\xb6\x90ec\xccJV\x84-\xd9\x92m\ \xc0\x06!\xcb\x96e\x0b\x0b[\xb2\x90l\x19\x92\x80\xbc\ \xba{w\xdajo\xf7\xbc\xbb'Y\xd0t2\x84f\ \x0a\xf10\x09\x01\x1c\xfe$\x83\x81\x16\x17\x9cN\xda4\ \x94\xd2\xa45`B\xf8\x93@ICB\xe30\xa4\x91\ \x982\xc3$\xcdP\x98\x12\xdai\xbf\xf7\xde\xde\xee\xbb\ \xbb\xfds2\x1eO\xc76\xeft\xda\xf7}\xdf\xfb\xbe\ \xef\xfd\xbe?\xef-=O'\x9b^\xfe\xddC\xf7\xfe\ \xb8y\xd5?\x1d>\xf1\x83_=\x8e\x10\xaa\xd4gv\ \x22T}\x18\xa1\xe05\x08\x05\x82l\xac\xadc\xe3\x8e\ g\xd9\xd8\xff\x09B\xc3\xdd0>\x8a\x02\xff\x10@\xa8\ \xeb*\x14x\x8d\x8cGP\xe0\xf5\xcf\xc0x\x12\x05~\ s\x1a\xa1\x9aKQ\xe0\xfd\x8d\x08m\x5c\x8e\x82\x1b\xf7\ \xc2\xcf{\xd9\xb8\xf1:\x14\xec9\x08\xe3\xad(x\x02\ x\x5cq\x9c\x8d}?C\xc1'\x81w\x8f\x8c\x82\xaf\ \xbd\x88\xd0\xd6\xbbQ;\xa1\xdf~\x17j't\xdb_\ F\xed\x84^\x07\xfc%\xbf\xefH\xa3k\xef;\x03\xe3\ \x83h\xcf\xec\xd5\x08\xad?\xc6\xc6\xab_Dc\xc15\ \xdf+h\xfc\xd8\xbd\x08]S\x8b\x0eI\xb7\xc0:\ \xaed\xe3\xae\x87\xd0\xa1\xfb>\x86\x9fSl\xdc\xf52\ \xba\xe1\xfb\xdfCh\xf3\xed\xe8\xf8#\xf5\xb0\xc6~\xf4\ \xdc\xb7_G(6YQ\xf1\xee\x1b \xc7\xde\x8a\xc9\ ?\xbe\x0b\xa1%M\x15\xd2\x93\xdf\x81u\xccUH\xef\ / \xb4!X\xf1\xe3c\x7f\x85\xd0\xc0\xa5\x15\x9fl\ \xde\x05\xbf\xffN\xe5\xb2\xaf?\x0ct\xdf\xaa\x1c\x83\xe9\ (\xf4\x8b\xca\xc4\xe0\xf5\x08\xd5=X\x99\x8b\x5c\x09z\ \xf9%\x1b{_\xac\xbc7\x01\xf25\xdeX\xf9\xc0\x87\ Y\xe0\xf3\x5c\xe5\xa9\x8b\xfb\x10j\xd9V\xf94\x91\xa3\ cK\xe5/\xeb@\x7f;\xdf\xae\xfc\xfd\xfa\x18B\x97\ n\xad\xfc\xf8\x85\x17\x10\xaaz\xa3*|}\x05\xe8\xe7\ \x9bUu\x9bnF(2W\xb5\xea\x85v\x84\xba\x0f\ W\xad\x0f>\x01\xbf\xffZU\xcf\x97\xaa@\xbeg\xab\ \xf6\x0e\xfc\x06\xbe\xaf`coG\xd5\xc4 \xe8\xf7\xca\ ?T\xdd\xfe\x10\xcc_\xb5\xb5\xea\x99\xb3`\xcb\xb5\x07\ \xab\xce\x9e\x05\xbd\xd6\x0dW-|\x1b\xe4\xf9\xcc\xb2\xaa\ \xf7\xbf\xf6E\xe0w6p\xecU\x03\xa1k\xff9\xf0\ \x8d\xc1\xef\x83>\xfe\x9b\x8d\xdb\x10\x1b\xfb;\x02\xdf\xba\ \xfdg\xf0\xb3\x128\x91\x019.n\x0d\xbc\xb2r\x10\ \xe8\xfe:\xf0\xe6!\x90{;\x0a\x86\xbe,\x02\xfdW\ \x83\x1b\xff|\x19Bk\x8e\x057\xbdz\x00\xa1\xce\x0f\ \xd9\xd8{Gp\xa2S@h\xf5=\xc1\x89\x93`\xef\ \xfa\xa1\xe0\xb1S\xa0\x97k\x9e\x09\x9e\xa8%\xeb\x0e\x05\ O\xde\xf0\x01\xac'\x14|\xe2+\xcf\x83\xdc\x196\xee\ \xec\xab\xbex\xf6\x1fA\xae\xe9\xea\x9em`\xa7\x9d'\ \xab\x87\xb6\xb7\x22\xb4|\xaa\xfa\xa6Mo\x83\xf7VV\ \x1f}\xf1\xaf\x11\xba\xec4\x1b\xaf\xee\xa8~\x00\xdc\x0d\ \x85\xeb\xaa_}\xf3Q\xb0o_\xf5\xc2\xa5\xe0/\xed\ \xfb\xaa\x176\xc1\xd8\xf9TMC\xfbj\x84.?S\ \xb3\xe2\x9e\x1c\x8c\xb1\x9a-\xaf\x81<\xd5\xf7\xd4\xf4\x0c\ .AhY\xb6\xe6sm\xf0}\xc3m5I\xe5\x19\ \xd8\x0f'k\x1e\xbc\x09\xfcoG\xb66\xf0\xca\x7f\x82\ \xfd\xf5\xda\x83\xbf\xf8\x16\xac\xaf\xb56\xbd\xe1\x11\x84\xa2\ \xd5\xb5O\xfe[\x08\xfc\xf0Gl\xdcvE\xed\x8bo\ \x80\xbe\xd7FB\x1d\xf1\x1d\x085\xbd\x1c\xea\xad\x03y\ \xb7\x8c\x86\xfa\x86\x97\x22\xb4\xf2X\xe8\xd0\xcfA\x8f\x9b\ \xff&t\xf3\x1d?\x851\x10\xca\xbc\x0c\xfe\xd0v6\ \xf4\x85S\xe07KgC\x7f\x12\x03\xb9\xd7\x8d\x85\xee\ \x1b\x00\xbe\x17\xfde\xe8\xbe\x83?\x81q>t\xfa\x15\ \xd8?\x9b*\xd8\xb8\xe3\xbd\xd0\x99\xfd_\x07z\xbbC\ g\xd2\xff\x8bPk6\x1c\x5c\xf9{\x98\xf7Rx\xe2\ \xe7\xe0?\xe1\x83\xe1\x89\x0f`\xcfv\xbc\x14\x96R/\ \x01\xfdz6^\xf1\x93\xb0\xde\x0bz\x0dV\x86\xbf\xf2\ <\xd9w\x97\x87\x8f#\xb0\x7f\xe8\x8b\xe1Gn\x049\ \xfa\x92\xe1\xd3k\xbf\x0az\xce\x85\xff\xf5\xec{\xe0\xe7\ \x99\xc8\xfa\xc7\x9b\xc1OR\x91\x83G\xc0\x7f\xda>\x1b\ 9\xac\xc1\xbc\xedG\x22\xa9\xb5\xb0O\xb6\xfc \x92>\ \xa6\x80\xfe\x8fFf\x02\xff\x01~\xf5?\x91[\x9e\x05\ ;W\xbf\x17\xb9\xf5\x87\xb0\x7fZ\x16\x22w\xcc\xde\x03\ \xfa\xd9\xca\xc6\xab\x8d\xc8\xa3g\xa3\xb0\xff\xfe+\xf2\xce\ \x09\xf0\x93\xceJ6n{7\xf2\xf1\xbd\xdf\x05\xbd\xcf\ G\xfe\xf0w\xb0\xde\x81\x8f\xa2\x15\xef\xde\x06\xfb\xb0\x22\ \xba\xf2\xef\xc1O\xael\x88\xae]\x01\xb8py*\xba\ \xf9\xf4\x18\xf8\xc9X\x14\xc7;a=\x87\xd8x\xcd\x87\ Q\xbd\x1e\xfc\xf7\xca\xc7\xa2\xf7\x1d\x01\x7f\x0a\xbf\xce\xc6\ \xf8`\xf4~\x0c\xebkl\x8e~s\x18\xfc\xa2\xf6x\ \xf4\x89S5\xa0\xaf\xa7\xa2\xdf\xfb2|\xdf\xfd\x18\x1b\ w\xd4E\x9f\xbe\xf39\x84.y;\xfa\xab\xe7`?\ m:\xcd\xc6\xbe5\xd1wV\x82_n\xffQ\xf4\x93\ w\xee\x04\xbf\xfb\xdb\xba\xc0\xf3\x09\x18[\xea\x96\xf4w\ \x81\x1f\xfc\xae\xee\xf3\x1fbX\xc7uuG\xbe\x01\xfe\ \x08\x1a\xb8\xffc\xc0\xd3@\x07\x1b\xa3*\x1b7\xf5\xb2\ \xf1\x9an6\xee\x12b\x82\xd4\x02\xf6\xaa\x8du&\x1f\ \x03\x5c<\x15\xdb:H\xec\xf2pl\xe2\xf6_\x83\xde\ \xee\x8a\x1d=Ipyc\xec\xa1a\xf0\x87e\xff\x12\ ;s\x1d\xe87\xb4&\xf6\xc3-`\xff\xddW\xc7\x16\ 6\xbd\x83\x90pG\xec\xdfO\xdf\x0f\xeb{\x22\xf6\xc1\ f\xf0\xff\x8b\xeff\xe3Um\xf10\xd1s\xff\xe7\xe3\ [\x9e\x02{\xd6\x9f\x88o\xd7@\x1f\xcd\xad\xf1\x9b~\ \xdb\x0b\xe3[l\xbc\xea\xa5\xf8\x17\x96\x80\xdd#\xab\xe3\ \xb7=\x0c\xf6\x8a\x1f\x8f?t|9\xc8\xfda\xfc/\ \xc6A/\xdb\xbb\xe3\x8f?\x05z\xbfhW\xfc\xd4\xe7\ @\xae\xa6q\x18\x7f\x8b\xd0\x8aW\xe2\xdfm=\x02\xfe\ \xba\x94\x8d[\x9f\x8f\xff\xb4\x15\xbe\xdf}2\xfeV\x15\ \xd8\xe3\x92?\x8d\xbf}+\xc8\xbb\xed\xe1\xf8\x07U\xe0\ \x8f\xe8\x13\x09\xa1=m\xa0Qt7\xeaA\x22\x12\xd0\ \x14\xd2\x10F)\x80\x98)d\xc0\x9f,\xd2Q7\xea\ \x82?Y\xf8^\x83\x9f0|R\x91\x8c$\xf8\x9cD\ \x19\xd4\x89\xd2\xf0\xd9\x80\xe7sh\x12~\x92\xe0\xb7\xbd\ \x9fjv\x0f\x10:\x01\x93\x14N\xf4\x9a}R\x02+:\ v\x9c\x12\x80\xb5\xef\xb5\x1e\xad\xdc\xbf\xd7\xf1\xa9\x9dh\ \x98\xea\x86\xc8\x94\x84?\x0a\xb0Q\xc0\xb3u0\xb7\x08\ \x9f\x98q\x99\xbc\x8a\x8f&/\xb6u(\xecRg\x15\ Y\x15\x93\xc2\x90\xa8\x88i\xac92_\x8b\xc6\xa8\xb7\ $\x80\x0c\xd9R2\xb0\x13\xe0\x9fH\xd5D>I\xf4\ [[QK\xc7\xb28!\x89\xb2`L\x89\xca\xb4.\ \x18\xaa\xb3\xbe\x1a\xd1\x9bT\xddD\xd4y\xea\xa3\x85\x06\ \x8b\x1c\xd0DE\x97ECu\xb1X;(|\x1e\xf4\ \x90\xe6\xc4\x10`\x14@0\x91j%\x0d\xeb\xd7\xe0\x1b\ [\xb8%}\xc9$H$$D\x03\xa7Um\xae[\ \xa4\xeb\xc4dR\x96\x94\xe9\x02\xe2} \x1dQo\ \xc2To\x12F\x01F\xd9T\xb8B\x99Hh\x86s\ \xd3\xe4\x8c\xa8$pR\xd8\x9f5$U\xd1]hG\ )\xedI\xa01\x87\x0ckvu?\x99+\xbb\xccY\ \x8f\xce\x00\xc7$\x95D\x80O\xce\x0e\x91\x81o\xb2(\ k\xd1l\xec\x07\x1b\xa4\xb1m\xea\x01UN2K;\ \xf0hqu4\x93.\xaf\xc8\x22\x92\xae\x8a\x8c\xa2=\ \x10jf\xe0_\x92\x9b^\xbb\x07\x8b^\xb3\xaa\xd1 \ \xf8\xb1\xfd|`p\xc4\xf5\xd9Z\xea\x07\x0a\x9a\xb6\x9f\ \xde\x07O\xb8<\xdd\x04O\xb3\xe5\x89\xa6\xa7LS/\ \xb1y\xc5\xf6\x91e%TuZ\xc2\xba+\xd7\xd5h\ \x80F\x18\xcd\xc7)\xa2C\xaa\x86}\x1c\xc2\x11\x07\x1c\ \x9e\x0b\x83N\x88\xac\x06'mpD\xd5\x8cn\x8f\x09\ \x1aL9\x8a\xe6\xb8\x09\x9azt\xceeB#\x1a\xa5\ \xc1\x08S4\xd1JP0<\x8aSX\xd3<,\xb7\ \x0a\x9c[\x01{\xcfSw\x15)\x8d4E&^\xea\ \xe8A\x1dk\x02\xa0\x8ebxh\xb8\x076I/\xe8\ \x99\xecm\x85\xc6q\x85\x86(\xf2-\x078=\x93\xbd\ \x03\x92\x8c\x05E\xcc\xe0\x9e\xae\xc9^F\xb1ILA\ \x9aH\x9a~:\xa1k\x09\x07\xe2c \x96J}\ \x1e\x83#\x94\x12\xaf\x03\xe2c\xd2-e\xd3-4e\ \xad \x08\xfb\xf7\xc2\x7f\xc8\xc4\x86\xa2\x89\xf6\xa4\xa5\x00\ \x85d{)\xd4'Sd\xbd\xb6\x00@!\x8b\x15\x81\ \xae\xd0\x87\xceU\xe6\xa2\x9c\xb7\xb1\x00\x1bY\x86}h\ \x00\x87\x8f\xe0\xf7I\xd4\x9c_\xb0\xc5m%,\xd7\xda\ \xd9\xfdj&+c\x03'\x9b\xc9\xea\xbdY7\x99\xac\ \xcd\xad\xe8\xa2I\xb2/mM\xbaSk\xb1\xac\x935\ ]\x88\x08\xaf\x9a\x19J!\xddzb!q\x06\x0b\xa2\ ^\x0e\xe9\x014N\xd3\x1d\x91\xc6\x0a\x16=\x05\x0a\xee\ \x06M\xc6\xe6\xe9\x8e&\xd9b\x92~+\xd3 \x90\xff\ \xbdd\xfar\xa7\xc5~\xf5.U\xb9\xcc\x10\xf4)u\ \x16\x22\x1e\x84\xd5\x0c\xd6uplpnQR:\xbd\ \x85Y_`\xf8rQ\xbd\x81:\x84\x03\xa6\xbb3\xba\ \x909\x84\xbb\x14m\xe0\x1e\xaa\x19\xb1\x99\x0fzs\x8a\ q\x9c\xf6\xa9iB\xbc^V\xd3\x13\xb3\x92\x02\xd4\x0b\ @g\xd4\x8cP\x0c\x1e\xb1\xe93\x04\xc8\xec\xad\x14\x1d\ \x05Z\x9a!\x0c\xeaz\x0e\xbb\x13k\xb5\x9c\xac\xc5\xdc\ \x8d\x0aI\xe9\xe0\xb3F\xbd\x82\xe8\xab\xd9\x22z\x11q\ \xba\x16A\x945\x88hs\x02>*\xe9\x86\xdeL\xf5\ \x90\x01\x070\xa9\x17\x82\xc4Z\xd3\xbd\xfb(]\xb6'\ \xf3\x16!6(u\xf2\x06p\xf2~UQp\x82\xc6\ \x11\xce\xd1]\x99\xb4:\x82\x01\xcbcJ\x19,\xe36\ >N\x96C\x7f\xa7I\x7f'\xa5?\x0f{^\xa1\xd4\ Y2\x96\xb4v\xac\x80\x16L\x8b\xe80.8.o\ \x15p\xdf\xad\x1bR\x06\xd22\xc8\xcf\xa4\x0c\x16d\x9c\ 2\xca\x11\xe3\x9c\x80\xc7\x95\xdaa\x8b\x1a\xb1\xb4Nw\ C3,a\x17\xd8\x88e\x0bJ\x01n\x18\xd4\xcd&\ M\xb7\x13\xe8\x12E+\xf2%\xd1\x06\x98\xf3\x11\xa5Q\ \x8c\xb4\x1b\x08l\xa9\x9a6\xd7,\xdc\xa8\xe6 !%\ (\xa2\xe1\x8c\x0aH\x96\xc4)1'\x1b\xc2\x91\x1c\xce\ a\x1b|]\xa5^\xc5\x053\x92\x7f\xe4@\x8eR=\ \xc4\x09GC4re\xb9O>\x96\xe4\x93t\xb6_\ y\xd4\xd0\xa9\xa1\xd3\xf0\x99`c)\xbfF\xe0Gs\ x\xc8\x18\x04\x0d,[\x0e\xdb\x01 \x940\xd3\x05\xc2\ \xb6\x97\xc25K\xed\x93\xd4\x08)S\xd9v\xd5\xb0\x9d\ 2/\x98e\x09\xb1\xae\x07\xca/\x80#pna\x0e\ \xf4<+*\x06-\x00T\xc5\x90\x94\x1c\xde\xde\xd3e\ >\xe0\xb7\x9b\xfa\xe8\xf2E\xb4\x99\x9ay\xc6\x8cK\xac\ *0\x1d\xc2\x06\x85>M\x127\x0bI))(*\ 1\xab\x9eU\x95\xa47\x87\xb6r8p\xc0\xd3\xe8\xc8\ \xc3\x07y\xee,\x8f\x09|f\xbf\x11(:\xa5\xcd]\ \xe0\x80\xd5\x16\x92\xeb\xf0\xdfi3\x1f\xceGI\xc1\x04\ \x00\xc6\x8b$X93\x96j\xdcB\x06\xac\x85\xb0-\ \xc0\xd6!Lb!+\x1a\x12\x18\xa7\x99\xab\xfc\x05C\ \x83\xac\x9c\x05W\x01\xfen\x16t\x0c\xb6L\xfaC.\ \xbfp\x92\xf2\x93h!\x9bK\xd7\xad\xe8k\x8b\xb5,\ /\x96\x9e`\xc0\x8b\xfd\x94{3\xda\x0bt\x89\x0a5\ \xaa\x1e\xd9\x8aCI\xb3\x0bC\xb8\xcc\x9bm\x06\x8d\xd6\ \xcfm\x16hh&\x98\xa8\xbe\xed\x90\xcb\xfa\xa7pb\ \x9a\xb8\xb3&(\xd8\x98U\xb5i\xa1M\x18\xc5\xba!\ j\xc5]\x12/\x8d8\xa7\x04\xccp)\x9a\x08\x11\xb9\ \xd3\x0e5_>3<7\x0e\x02\xaci\x01\xc0\x82\xb8\ \xcd\x1f\x11 \xb1!\xca\xe20F\xd6\xe2\xb3\x82\xf5\x9e\ +\xc8C1\x8bJ\xf6\xde\xac\xe7x\xa8\xd9,\xf6\xd9\ \x96a\x80$L\xe1g\x83\x9d\xd6\xef\xd64U\x136\ \xf8`Y\xd4\x9c\xdaI\xfe\x14M\xee\xec\xec\xf4\x9e\x5c\ kN\xb6\xf1\xb4\x86N\xf4\x03\xd0U\xe8ZPl\xc6\ \xaf*\xdd#%\xb1\xa0\xdaU\xa9W \x18\xa2z\x95\ hR\xcc\xfc\xd9n\xb7\x90\xf2\x99\x92\xa6\x1e\x8e).\ \x13\xdf\x91\xb9\xce\xc6\xf2!I\x912PD\x11\xe0\xd5\ \xe7t\x03g`\x1b\x8bs\xde|\x1bh\x81=gv\ /\x89E\xc1#-\x9a\xa1!uFR\xd2\x82\x9f\x97\ \xafD{\xcc\xbdg\xef\xf4b\xb4\x0e\x0d\x03~\x0e\xa8\ 9?\x84>\x0ci\x00+\x03\xf8\xa4\x90O\x06\x98V\ H6\xc4\x9a\x88\x04\x08\x0d\xab\x9c \xf34\x0b\x09r\ \x14'\xe6\xe0w\x19\x13|mS\xaf \x12aE\xcd\ \xa5\xa7\x84\x94\x86\xb1\xa0g\xc5\x04\x06\xbc\xeb\xf6\x96\xb0\ \x13\xbd\x00T\xd3\xe6\xdeeZ#:L\xd0\xd4\xa5h\ \xfd\x1c\xd6]\x02\x15\x05Dhp\x06\x08\x90:\x8d'\ z.\x91\x80J&\x95\x93}P\xef\xabP\xf1fM\ \xcf0\xe8y\x82\xe2\xcf\x19>\x8f\xd3\x84M\xe6\x82\x85\ Nk\xf1,\xad\xf9\x04K~\x12^d\x8a\x13\x8a\x19\ \xa6\x8a\xdb{\xf9\xa7X\x86ikq\x8f\xe7\xaa\x84\x11\ \x19\x8b:\xa8\x16P\x00*7,\xa4TYVg\x89\ S\xe5\xbb\x83BJ\xd2t\xc3o\xc7]q\x0e\x0a\xe8\ ,O\xf5>\x18\xd1\xe0\x19&\xc2\xe5F\x82}.\x81\ \xbd4\xdd\x15\xb9\x82\xa5\x10\x07\xac\xe8j\xb1_\xc3\x05\ m\xc8n\xe9\xca\xccHJp\x80FWo\xb9\xda]\ \xe4\x22V\x9e7\x13Q3n;\x16\xa7\xf0W\x9f\xca\ \x19\x061)\xa9F\xbd\xb9\x8d\x94\x9d\xde\x14j\xa1\x99\ \xb6\x0d\x986\x16h,\xca\xc0\xec$\xb7\xbb\xd6\x17\xca\ dhsD\x22\x96\x84\x12u\x14\xe4:\xdeB\x8e/\ BH\x063\xc5\xc2z\x8b\xda\xe1'j\xd9\x92\x8e\xba\ HZ\xba'\xf2\xe5a\xb1s\xe5AS,q\xadu\ \x9c\x94\x1a\xb6\xd23A\xa4\x19\x9b\xbd}d\x9f\x10\xd3\ \xe2\x00B\xacsI$(\x0c\xdb1\x13.\x0e\x89\x92\ \xe1\x1b\xbc'\x1d\x08\xcfs\xfd\xfb<\xb6\xe5\xf7\x0f\x8b\ \x98\xec\xe92:Ad6g2&X\x82\xb5\xfa\x09\ \x92A\x80\xcd\xaa\x9a\x08\x00\x96o\xc2\x10p\xcb7\x89\ \x5c\xa5>\xe0 u\xde89\xca\xd7X42\xdbh\ \xdcf\xca\x09\x09~.\x83]\x10\xd7\x0fko\xf0\x0d\ \x1bn\xaa\xcb\xd2\xa4,X\xea\xcbjj\x1a\x04\xd7YD\xf0\xb1\ \xfeg/@lk?_\xd1k\xf8\xbc\x0a\xdb\xed\xac\ \xc7s3\xb6\xd3.*W4g7(6{Y\xfa\ \xb4\xf7P9\xfalw\x10\x9aGg\xa7\x1e\xf2\x12\x93\ 9\xc0-\xdf6\xf6Hj\xf7\xd2\xaeRI\x91\xc3!\ y\xecz\xd2<\xca\xd78>`\xbd\x9a#XxD\ @\xb6\x8bM\xb4\x9e\x11MX\x07\x03\xdedc@\x96\ \x9d\xa4\x17\x95@\xa3\xa4W\xea\x8b\xa2\xed4\x9b-\x0e\ \x0d,\xbc\xd9\xd5|!\xe9\x8bF\xf3\xf1\x80\x98\x8e&\ \x19\xbe|\xd6\x9a\x8d\xb3\xf2+\xf0\xa5\x8b-\xb6Io\ n\x9a^\x0f\x98\xa6,fhu\x96\xf4@,\xd6}\ 1\x03\x84}>3\x86\x95\xa4\xa0c\x99\x05\xbc\xbck\ \x92Svo\x01\x1a\x8b\x04(&\x5cC\x09\xfbQi\ \xe5\x0eO\xa6\xacc\xdd\x14\xf5\x1d\x9d\xd63\x98\xab\xfb\ \xea\xc7\xc8\xa1\x08!&\x1c\xa2\xd4\xfc\x9c\xd0&\xeeY\ \xbbR\xb2e\xd5\xae\xe3\x8e\xedK\xb6)E\xf8\x0dQ\ \xfe\x82yI\x88\xd8}\x120\x04\xd3\x8a\xb6\xbc\xba\xa9\ cL\x85P&A\xbc\xd5\xf3\xfd+\xc3\xecxj`\ \x1e>\x13\xf1\xd9*+\xc1>\x85g\x17\xe4\x18\xd6(\ \xc8mk\xc6\xc8\xe9\xc5\xa4OR\xb3\xc3<\xd3\xccc\ \xa4H3\x0b?G\xb31\xd1^\xdd\x0a\x02\x1e\x82(\ \xcb\x9c\x9fQ\x0c\xf4Y\xcbH\x91\x04\xe7\x0f\xa5\xd7\x8c\ }ZxnD\x03N`l\xf7\x02\x0e\xe41\xd8\xef\ \xd8\xc1\x91\x0e\xa7\xbd\xb0E\xc9G]\x8d>9y\xa4\ \xec\x9c{\x0b(-\x05\xf3\xb34&\x0b\xe6Y\xa6]\ \xbeI\xe66\x15\xb9\xe6$\xcf\xa9)\x95\xcad1i\ \xaa\xd0jMR\x00\xe4d\xd9\x17\xe6\xc3\xd6\x85)\x9b\ T(%)\x92>\xe5;\xb7\x11\xc4\xcd\xa1\xa3\x5c\xa2\ Vtf\x97\xc9\x1d%V\xc6\xa4\xf7\xe5W\x87\xdbm\ V\x1d6\xafNW\x9d1\xdb\x8d\xa4\x0b\xbd\xb1\xb4\x0f\ m;;m\xa7\x9a\xdd)\xd2X\xde\x98\xef,\xfb!\ \xfb\x1c\xd8+GO]&\x81\xe2\x06\xa0+\x9f\x83\xee\ W\x01\x7f#7\x897$\xe5\xc5\xea\xbf\x81\x1e\xac\xda\ \x97Z\x0a+\xe2P[\xbe\xe1I\x8f<9*\xfc\x05\ \x846z\xf1#i\xfa1\x08g\xdf\x17i\xdb\x9d\x94\ \x0c\xf7\xb9Q\xf3\xe4b\xba\x00\xa4\x83m\xe4\xc2\x82\xf7\ \xac=\x80\x05\xa4\xee\xc9r\xb3\xf6`9\xeb>\xab\x1a\ fA\xa6b\xdf\x99j\xa3\x09\x89\xfb\x840L0\xa3\ \x0a\xc7d\x5c\xc2\xb3\xees\xc8\x15\x8e\x8c\xfd4\xbd{\ \xe8\xfe\xf4\x15\x8e\xb7\xd0\xdc\xaa\x10\xb9\xe8\xa6\xd2E\xe4\ >\xda0\x9e\xb5\x0f\xd2\xf3W\x97\x9c\xb9\xb5\xa0\xdd\xf9\ \xb0\xe0\xc6\xc5\xce\x00\xfb\xc89\xbc\x85\x8f^\xd6\x1f7\ \xcf#Xg\x85\xcf\x0b\x82}\xd9,+\xa3\x9d\xe7\xd6\ \x83=\x0a\x8a\x00;\xc9\xeb7\xd3|\xf7\xc9\x9b!P\ 0\xf8\xc4\xdc\xaa\x18\xfc+\xb0\xaf\xd8}\x04\xd6*M\ \xc3\x1e\x9e\xe1\xac\xb8\x9c\x1d\x82\xa4Tr\x062KN\ \x181M\xa2\xdd\xb9]G]\x5c\xe12\x0c\xd9!\xec\ K.z\xd5\xcd\x0e\x06\xcd\xb7-)\x84~`\xaa\xd1\ \x18\xc9\xb2\x00@\x0e+ AV\xe8\xe18Mn\xc7\ \xff6\xf0s'\xfe\xeet:if'Z\xe5\xef\x9c\ \x87\xfbMs{gE\xbf\x86\xc1BD{\xb6\xc8G\ \xbc\xb7\xd3R\x0f\x9c\xa9\xf5\x87\x99\x06\xa7\xcb\x08\xdc\x0d\ ]\xeb\xfe\x81\x97\xbf\xb9\xe1T\xc0\x1b\xa6b\xf4\xd2\xa5\ \xd5_\xe2\xa6\x1d\xf5\x9a\x16v\xc0\xb6\x807\xb4\xc5\x0a\ o\xac\xd9@L\xafp\x0d\x8b\x19O\xbc*\x05\xc5\x80\ 7&z\x5c\x7ft\x9b0D\xf7\x81}%00\x84\ \x95\x9c\x17\xe8\x8c\xc0Rr\xe6\xc6\xf1\x01\x9d\x111\xa7\ \xdb\x17N\xbd\xb44bud\x14\xaeh ]kr\ \x22/\xa6=\xd4t!\xaf3\xb9\xb9\xf2n3\xe3\xd3\ \xcd\xdd\xc7\xef\x85\xc8\x88F\xeeIb\x05\xd2\x7f/_\ \x1e@\xec\xf5\x04\x02n\xbc\x16kG\xcc~\xd3\xb9\x0a\ \x10\x06\x02Y\xacA\xd2\xe8A\x22P\x10K\x83>\xa1\ \xb4\x0d\x1d@\x85\x97]\xf2y}\xfe\xd2\x1c\xbd\xeab\ 75F\xd9e\x16z)\xce\x07WZ]\xeeoa\ 3\x9d+\xcc\x09\xe3\xe6=.Q\x81LI\xf7\xa2k\ w\x10\xf8\xfe\xa5\xb7\x07\x03u\xda\xa0\xf4w\xe1\x03V\ \xc1\xdae\x1d\xbaJ\xf4nA\xfe\x00H*JE\xd9\ \xf9hy\xa7\xa6+I\x99\xdbE\xcfi\xb93SA\ \x82\x9c\xd4\x0b\xa0\xc7\xac\xc3\x91\x92Dpl*g\xd0\ ey\xed\xca\x82\x0b\xb16B\x90;\xb0\xee\xd3\x16[\ \xbd\xbayAa\x1f\xc6\xdb\xbf\xea\xe9\x15\x81\xb2\xdc+\ \xca\xdf\x8c\xb2\x93Gv\x19\xcaO\x1e\x9f\xd6\xb2}\xcd\ \x8c\xd6\xa6\xfe^SL\xd5{\x95q\xb3\xe2\xf5_\xe4\ \xe6\x02\xba]\xfc;\x06\xbe\xb27\x10.]\xec\x05\x84\ 2\x96\xd0d%\x8c\x06\x90O;8o\xcd\x01U\x95\ 'E\x0f\x00%4\xda\xe8EA\x0cB\xb32\xba\xf0\ \x05\x90\xba\xf16p~U\x18\x80\xa9^P\xdcH\xb7\ \xa1;\x9d\xe8xYdjK\x0a\x85\x80w\x9dp\x1e\ /l-\xcd\x9f/\xfc\xff=\x93t\x13\xf1\xfc\xf5\xbb\ \xdd8,\xba\xd5\xe2F\xe8S\x16O1\x8b\xecbK\ '\xa7\x99n\x97\x97t\xcf\xde\xa7}y\x89{\xa3\xc4\ \x89|\xa3\xe3\xbd_\xfeu6+\xd9\xeev\xa3\xd1N\ +\x14\xd6\xb2\xc0%\x87\xc9|\xff\xd0\xa6\xbb|8\x97\ \x99\x04\xc5\xa9\xa9\xbc'\x11)YW\xce\x89G\xd8\xce\ -m\xc5\xd1\x1c\xd2m\xc6\x85\xcc\xfd\x9cM^\x92S\ \xd8!\x85\xe5\x0e\xeeS\xcb\x8d\xceN\xb3c\x05\xf7{\ \xb9w\xa9X\x1c\xf3\xd2\xb1\x15\x19\xb8\x80\x0e\x88\xefn\ \xf82\x0fD\xf8\xeb\x92\xa5G\x22t3.\xd11\xbd\ \x81Qr7\xce\xef\x1d\xb8\xfc\xbcE\xf7\x1a\x1cf\x86\ \xed\xb7\xe78^\xf4\xc0\xdce\x06\xe9\x13\x93xL\xfc\ *A\xaf8\x93\xb3w\xee%\xb1~UV5AO\ L\xe1\x0c6_a*\xa5\xb2\xf8\x1a\xdf\x81\xc8yD\ \x0a\x07\xeaKK\x80\x82\xab\xc5\x0a+r\x87\xd9\xe5\xd5\ \xba\x8el\x0f\x80\xe5\xc9\x9b\xca\x8a\xd9\xb4\xb5u[=\ \xa0Z\xaf\x859\xb1\x1c\xb4rl\x1eyj\x06\x13\x16\ \xd28Lk1\x19\xe6\x0f~D\x9a|\xeb\x94\x08\xd3\ '\xf72\xc4\xb0jH))\xc1\xaee\x19sYw\ \x0b7R?.$\xc4\xdb\xb7\x8e'\xe5f\x83\xf3\x0d\ \xb4\x0e,V\x97\xb0\xe0\x834\xf7^\xa7M\x96\xde\xb4\ v%\xe8\xfc\xce\xa2\x93\xb9\xca\xaa\xf3\x1df.\xae\xc4\ v \xb0\x85\x9ej\xbb\xbcdD\x0fa\xd9{*\x0c\ \xc7\xad[\xd8v\x87l4\xa7\xf0W\xcfEC\xa0\x10\ \x97\xcb\xba\xae\xd5\xa7zr\x04\xb5\xc2W\x10\xb9m@\ f\xb9\xea\xdf\xb7\xa6q\x84\xc11\xb3G\xcdm\x9b1\ cN\xf6b3N5F\xee\xa9r!g\x5c\x95s\ \x1e\xb8'x\xbc\x9aM\xce\x8a9\x1c5_\xc8\xa6\xc5\ \x0d\xa3\x176\xf0Qc1\xa1\xa2x\xc2*:!C\ \xad9mU\xa4f\xc3\xd7.\x0bvav\x8e.\xf4\ \xc9\x8ed\x8a\xdfA\xae\x1a\x1c\xe9v\x96/\xff\xee\x11\ \xbf\xf1\x83\xa4\x09\xa7;=\xef\xb8s\x8a\x1f\xba\x90Y\ N1o\xef\xd7\x8c\x9d\x9ev\x7f\xc7\xb8\xf8\xe9&4\ \xe4c\x97\xf0\x98\xa7U\xb6\xf8\x9c\x19\xe4\xb7s\xd2L\ \x15\xb4\xe2R\xb7\xe0\xdc@\xc8e\x93\x22{\x8f\xa1\x9e\ },\xb9\xfd>\xc6UY\xde\xc7\x14\xf9\xff\x9b\x01\xbd\ \x02l\xf7q(CR]\xd9g\x153`\x10\xc9\xec\ \xe38\xb2]\xed\xf2*I\xf1M\x9aH\x9e\xb8y\xc9\ \xc5\x99\xda\x00,\x02\xd3\x18\xad\x9b\xa7\x91\x05\xa2\x22\xeb\ z\xbd\xeb9\xa5\x80\xba\xd1:\x8b\xeb\xea}\xc0C7\ \xf2\xcb \x05\xa4uV)t\xafs\x17d\x8b\xf9\x22\ \x1d\xf1\xe0\xfc+\xe2\xbc6'il\x12\xd1\x067]\ \x92W\xe5D\x0d\x0b9\x9d(t\x12\x1b\xa2\xbf.\xd7\ \xa2=\xc0*c\xc2{\xfe^\xa9D\xd9\x90\xd5\x92\x17\ \xca\x0a\xb5\xda8\x80\x8d\xc4\x14\xe10\x84\x93\x92(\x0c\ *)\xd5T\xf0\xb29#\xff\xa6z\xe9\xed\x95yz\ \xbd\x81o[\x92m\x94)\xc8\xa9\xe2\xa6{\x8b\xc4\x1d\ 2\xa2\xe1J\xf4\xcf\x088TT\xfc\x1f\x92\x7f#\xcb\ \ \x00\x00\x1f\xc2\ \x00\ \x00o7x\x9c\xcd<\x0bx\x5cU\x99'\xc9\xcc$\ \x99L\x92RB\xe9\xcb\xf6&\xd4\xf4\x9d\xf4\x09%\x84\ \x944ihi\xd2\x86&M_@zg\xe6L\xe6\ \x9a;\xf7N\xef\xbd\x93t\xc2\xae\x9fV\xd4uew\ U\xa4\x0a\xdb\xe5\x13\x84\x85\xb5\xd5\x95\x0f\xe5\x13t\x15\ \x10\xc4U\x14eYd\x15\x15\x1fX\xddeEEP\ \x96\xaa\xfb\x9f\xc7}\xcd\xdc\xc7\x04\x90]Bz&\xc9\ =\xff\xf9\xcf\xff\xfe\xff\xf3\x9f\xdb\xfd\xb9\xf4\xfc\xaf\xbd\ p\xf2\xc6o\xb4.\xfe\xd2\x91[\xff\xe5\xfbw\x22\x84\ \xaa\x0dm\x1bB\xb5\xdfB(z\x09B5O\xb3\xb1\ \x0e\xb1\xf1\xf0g\xd8(\x9e@hw\x17\x8c\x9bP\xe4\ \xf3\x11\x84.\x5c\x8b\x22\x8f\x93\xf1{(\xf2\xad\xb7\x22\ tQ\x13\x8a\xfc\xe4\x01\x84b\xbfG\x91\xe7\xd7\xc1\xcf\ \xefD\xd1u\xbb\x00n;\x1b/\xfa\x1f\x14\xbd\x1e\x9e\ \xbf\xea\x14\x8a\xde\x1aE\xe8\xd2w\xb1\xf1\x9a\x1e\x14=\ u\x04\xa1\x81;Q\xf4\xf1G\x11\xba\xecn\xb4d\xf5\ \x1f\x11\xba|\x0dZE\xd6\xe9\xbc\x08\xad\x22\xf0;\x8f\ \xa2U\x04n\xe7\x9dh5yn\xdd|t\xf9\x89\x87\ \x11Z\xff;\xb4c\xfab\x846\xaefc_\x16\x0d\ \xde\x94\x04\xbc\xfe\x09\x8dD/\x00|\xafBc\xd7\xdf\ \x88\xd0\xf6=h\xbf4\x03\xfb\xea`cr3\xda\x7f\ \xe2\x15\xf8y\x9c\x8d\xc9\x14:\xf0\x85\xcf\x22t\xc9q\ \xf4\x91\xdb\xe6\xc0\x9e\x05\xf4\xd0'\x81&\xe7n\xaa\xaa\ \xfa\xd9\x13\x80W\x96\x8d\x99SU\xf3O=\x89\xd0f\ \xa9*\xf9\x17\x7f\x8b\xd0y?\xad\x92N}\x1a\xf6y\ U\xd5\xfb\xf3M\x08]\xf9B\xd5\x0d\xaf\x5c\x01\xcf\xfd\ \xae\xea\xd5\x0d\xfd\x08\xcd\xfb@\xf5\xb97|\x0c\xd6\xf9\ f\xf5\x08\x80C\xf5\xdf\xabN\xed\xbc\x12\xa1\xc6\xdb\xaa\ \x0b\x0d\x9b\x81.\xbdl\xdc\x7fI\xf5\x8d)\xc0w\xf1\ x\xf5\xcd/\xe5a\xdd\x0fW\x9f^\xd4\x8b\xd0\xf2\xe5\ \xd5\x9f#xu\xfe\xb0\xfa{\x8d@\xdf#\xf1\xea_\ \xaf\x81u\x96\x8dT\xbf\xf2\xc8#\xc0\xaf;j\xea\x7f\ \xa4\x00o\xee\xa9\x89_Y\x85\xd0\x15;j\x1a\xd7_\ \x83P\xc3\xed5\x8b\x1fY\x85P\xff\x155\xdd\xef\xaa\ \x01\xfc>U\xb3k\xe0'@\x9f_\xb3q\xec\x8e\x9a\ \xf1\x9d@\xff\xad\x87k\xae;\x09\xf3Z\xffT\xf3\xa1\ '\xbe\x09x\xdc[s\xff3\x0f\x22\xb4\xf6`\xcd3\ \xcf\x00\xdd\x1b\xf7\xd7<\xf7I\xc0k\xd5\xf2\x9a\xe7?\ \xf8\x0eX\xf7\xf9\xc8\xd5;7\x02\x1f\xf7G\xf0\xe9\x97\ \x80\xce\xe9\xc8\xcc\xa7a\xbd\xd1w\xc2\x08\xf8lX\x1f\ yG\xec\x0e\x84.V#\xd7?f\x00\x1d\x0eE>\ \xba\xf3\x0b@\xcfo\xb0q\xf4\x1e6\x1e\x19\x89\xdcr\ \xdd\xbf#\xb4\xaf5rk\x0e\xe6\x0bOG\xbe\xbep\ 'Bm\xa7\x22O\xed\x87}\xee?\x16\xf9E\xe4\x14\ B\xf8\xc1h\xfd{D\xc0\xe7\xa1\xe8\xb9\x8f\x8d\x22\xd4\ \xf1\xf9\xe8\xba;\xceEh\xc5\x89\xe8z\xf2\xf3\xe6\xe7\ \xd98\xf6\x87\xe8x\x87\x80\xd0\x05\x9f\x89\x8e\xdf\x05\xf2\ t\xde\x05Q\xa9\x1b\xe4h}Gtj\xd1-\x085\ \x81\xf8\x9d\x06:o\xffS\xf4\xd6:\x80\x7f\x8d\x12\xfd\ \xf8\xc9\x1e\x90\xa3G\xd9\x98\x1a\x8e\xdeu\xe0E\xa0g\ }\xf4\x13\xef\xff2B=O\xb2\xf1\x9a\xdb\xa3O^\ |\x08\xa1\xf4\xed\xb1z\x15t\xe1\xa2{c\x8b\xa6\xbf\ \x08x]\x19[\xbb\x0d\xf8\xb0n/\x1b\x93\xdf\x8a]\ ||7\xac\xf7v6\xa6\x1e\x8au_\x0ar4\xfe\ D\xec\xf2\x15@\xe7M\x1bcC[\x97!\xf4\x96d\ \xec\xea\xf5?\x00\xad\xab\x8e\x1d{\xf4n\x84\xd6\xdc\xcf\ \xc6m_\x8d\x9d8s;\xac\xf3B\xecfP\x17\x14\ o\x8b\xdd\xfcR\x1fBW\xff)vr\x05\xf0\xe7\xc0\ Gc\x8f\xac$\xfc\xbc>\xf6\xd8S\x1f\x079\xdd\x1a\ {n)\xc8\x7f\xc7\x1fb\xcf\xad\x87q\xf3\x86\xda\x86\ \x0f\xc0~\xcfYT\xdb\xb2j\x09B\xdd\x0f\xd5.\xf8\ p\x01\xc69\xb5\x17>\x0e\xf4\x88M\xd6v\xef<\x07\ \xa1\xf9cl\xec\x1d\xaa=\xdc\x0e\x7f_\xf0\xf6\xda\xb4\ r?B\x91b\xed\xdf_\x0d\xfau8U{r=\ \xc8\xcb\xb8\x5c\xfb\xfbW`\x9f\x07~S\x17\xf9\xfao\ A\xbfn\xa9\xdb\xf74\xd0q\x85P7\xb1\xf66\x84\ \x12K\xeb\x8e\xef\x82u\xae\xb8\xaf\xee\xd4\x8f\xeb\xe1\xef\ \x22\x1bG\xcf\xd4\x9d^p\x0c\xf8z\xb0\xee\xfe\x9e\xa3\ \x08-|\xbe\xee\xd1'\x00\xff\xb5\x0d\xf5\xab\x9b/C\ h\xc9\xcd\xf5=\x8d@\x87\xadw\xd7\xf7\xee\x9e\x0b|\ \x1f\xac\xdf\xff\x1d\x90\x83K>W\x7f\xcd\xfb\xfe\x0d\xc6\ \xea\xfa#1\x90\xf7K\x7f_?Q\x05\x0a3\xdeP\ \x9f\xfb\x1a\xe8\xc3\xeag\xea\xff\xf24\xe8\xcd\xf9\x87\xeb\ \xdf\xde\x04\xfb\xef\xd8S\x7f\xc3\x13\xb0\xdf\xbe\x93\xf5'\ \x06\x00\xefEw\xd4\x9f\xd8\x07\xf2\xbb\xe8\xa7\xf5\x0f|\ }\x1fB]\x8dl<\xfc\xe3\xfa\x87\xf7\xdc\x00\xebD\ \xeb\x1f\x9e\xf8\x13B+\x8f\xc7k\xff\x1b\xe4m\xe8\xaf\ \xe2\x89\xf7\x02\xdf\x06\x1f\x8b\xb7\x1d\xda\x8f\xd0\x96o\xc7\ \xc7\xbf\x03?\xc7\xf3\xf1\xf1\x17_\x059\xce\xc4\xa5\xcc\ \xbf\xc2\xba\xf3\xd9x\xe9\xbdq\xbd\x07\xe4!\xf2\xc3\xf8\ \xfb\xbfL\xec\x95\x12\xff\x08\x02}\xa8\x7fw\xfc\xb6\x83\ \x80\xdf\xd5;\xe2w\xdd\xfcS\x90\x9b\x9b\xe3\x0f\xac\xf8\ \x00\xc8\xcdS\x0dk\xeel\x05\xbdyG\xc3\xc0\xd1_\ \x22\xd4\xfc7\x0d\xfb\x8e\x82^\xad\xbe\xa6\xe1\x88\x06\xf3\ \x0f\xc9\x0d\x13\xd7\x83\xde\xae\x91\x1b\x94\xbb\xe1\xef#\x0b\ \x1b\xa6\x22\xbfBh\xee\xe3\x0d3\x0f\x82\x1c\xc7\xbe\xd8\ p\xedW\xc0\xbe,\xffa\xc3\xfb\xa6?\x0c\xf8<\xcd\ \xc6\xbe\xf3\x1b>\xfeL\x02\xe4\xed\x86\x86\xaf>\x0az\ 0&6<{+\x8c\x9b\xa6\xd88\xb6\xa4\xe1\x95\x1b\ \xef\x01\xba_\xdc\xf0\xea}\x17\xc1\xbe6&\xaa~v\ \x1c\xec\xd7\xe2\xc4\xc2\xfb@\xfe{\xfa\x12+\x16\x80]\ \xed~[b\xc3\x03# \xef\xe3\x09\xdc\xdc\x01\xfb\xdb\ \xc5\xc6\x81-\x09}\x0e\xe8\xed\xd6\xfa\xc4\x89\xa3\xa0'\ \xf13lliN\xdc\x84a\xbf\x8b/H\xfc\x03\x88\ 7\xaa\xfbP\xe2\x13\xa7k\x81\x9e_I|\xf6=\xf0\ \xfb\xfe_\xb0\xf1\xd0\x1f\x13\xdf\x7f\x08\xe4\xa7\xeb\x016\ ^5?\xf1\xecB\xd0\xabC_J\xbc\xfa\xec_\x83\ \xfc\xdf\xd5\x18\xf9r\x0a\xc6e\x8d\xb1\x1f=\x0b\x7f\xff\ N\xe39}\x9d\x00\xa7\xb6\xf1\xaa\x970\xec\xe3\x0b\x8d\ G?\x0a\xfa\x01\x96\xe7\xa6W\xc0/E\x22lL\x1c\ gc\xd7\x00\x1b\xb7\xbf\x97\x8d\xe2\x83M\x82\xd4\x06\xf2\ \x80\x9a:\xd2\xa0?\x17\x7f\xa6\xe9\xa2\x9d\xc0\xa7h\x01\ F\xb0s\xe9\x81\xa6\xf1\xeb~\x04t<\xdet\xec.\ x>V\xc5\xc6#\xd75\x9d\xdc\x0dr4\xff\xe1\xa6\ \x87\xaf\x00\xba\xd7\xb75}\xf7I\x90\xa7\x1d\xaf4=\ \xb7\x1e\xf0z\xeb\x8dM?\x7f\xe0&\xd8\xef\xbdM/\ n\x00\xfdl\xdd\xcb\xc6\xde\xfb\x9a\xe3\x84\xfeG\xfe\xab\ \xf9\xc2{\x81\xcf\xe7M7o\xd5\x80>\xed\x1d\xcdW\ \xff\x12\xecH\xfb\x83l\xdc\x96n\x96\xfe\x19\xec\xd2\xd5\ \x8f4_\xbb\xa4\x05\xf4\xec\x99\xe6\xbf<\x07\xe4\xa4a\ k\xf3\xf1\x8f\x01_[&\x9aO~\xe4|\xd8%j\ \xfe\xc71\xa0\xdb\x81\xc3\xcdw\xde\x0b|Y\xf8w\xcd\ \xa7\x0f\x03\xbeK\xdaa\x04\xb9X\xfa\xc1\xe6{\x96\x81\ \x1e\xcd\xfb-\x1b/\xfby\xf3\xb7\xb7\x02u\x06\xbe\xdb\ \xfc\xd4s@\xa7\xe1\x17\x9a\xff\xa3\x06\xf8v\xc1\xc1\xe6\ \x1f\x5c\x0b\xfb\xd8\xf7d\xf3\x8b5 \xc7\xe8U\x09\xa1\ \x89\x01\xe0\x00\xfa\x10\xeaF\x22\x12P\x16i\x08\xa3\x0c\ \xba\x14>\x19\xf0\x95G:\xeaB\x9d\xf0\x95\x87\xdfk\ \xf0\x13\x86O*\x92\x91\x04\x9f\xd3(\x07D\x9d\x80\xcf\ \x06<_@I\xf8I\x82\xbf\xf6\xbc\xae\xd9\xdd\xf0\xbc\ \x88zHt\x81b\xf0\xbd\xb3[\x14\xb2\x1a\xce\x5c\x9a\ 5\x8c\xbc\xde\xd5\xd9\x99\xc7\x9a\x8e\xf3\xaa,\xe9\xe9\x5c\ \xc7\x84dd\x0b\xc9\x0eI\xed\x09\xfesw\xa7\xd8\x03\ \xb2\x88\x1a\xc4\xa4Z0\xc6\x0b\xd2\xb8\xa1U\x91\xad\xdf\ \x1c\xbau\x03~/\xc3\xf7\x044\xba\x1f'\x8d\xe2{q\x06kZ\x00W\xdb\ A[\x0b@\x13\xca'\x90\x89\x14|\x0b\xf0\x998_\ \xf2Y\x87o'\xc4\xc4>\x1dk\x02\xd8(\xc5\x08\xa0\ y7D(=@y\x156Q\xa4\xf4\x16Q\x1a \ \x11/E\xfe\xe2\x848\xb7;\xd93 \xc9XP\xc4\ \x1c\xee\xeeL\xf60\xb8\xf3\xc5\x0cx\xa3\xf14\x97\xeb\ q]K\xb9\xbc\x04[b\x1b,Q\x84\x0d\x18\x9e\xa0\ \x1b\x01\xf4\x884S1\xd4y\x80\xa8@\xad+g0\ \xfb\xd9V\x11A\x10\xf6\xec\x82\x7f\x08\xa8\x96\x12P6\ \x98\xf9t\x9as\xf7\xbd kN@\x8d\x00'\x8f\x15\ \x81\xee;\x04\xda&\xb6\xd52S`#\xc9t\x8c\xd0\ \xb7\xd5$\x83\xb5\xd2B \x81e\x1b\xfa\xd4\x5c^\xc6\ \x06N\xb7\x12\x8a\x04/\xdbfQ\xd8\xa5\xc6\xbet&\ Zm\xd3\xd9\x1f\xee\x1a\x0ew\x80\x0a\xd9$5D\x02\ \x8c\x22\x90*M]\xa5\xd7\x0as\x08'\xc5),\x88\ z%\x8bl\x02\xb4\x0b\x00\x96P\x8a\x04\x01o\xa3\x8b\ \x18\xd4Qhta\x01L\xfe\xcb\xf07\x16_\x91\xe7\ :\xac\xc5\x96\xf4\xab\xcarC\xd0\xb3\xea4xKp\ \xcf9\xac\xeb \xf2 \xf6\xa2\xa4t\x04/\xdd^\x81\ w\xe8u\xf8\x9a\x16*\x08\x1e\xfe\xc0\x7f\x897#\xfa\ \xf0_}\x99O\xd8w9Xi\x12,\x9c\x05q9\ k[i\xc7:\x83\xea\x04\x01=GV'\xc6\xa7%\ \x05`;\xc0.\x04\x93L\x0ce\x01\x80\x08h/0\ )O\x7f\x96\x1d\x11db/@\xd2\x0ca\xa7\xae\x17\ \xb0?(\xc1\x12\xa16\xf8<\xc3\xa3\x11\x02v\x8a\xf2\ \xbe\xd5\x02x\x1e\x11\xa66A\x945\xf0}E\x01\x1f\ \x93tCo\xa5\xfb\xcf\x01\xab9d\xb7\x91\xf8\x0d\x17\ \xe0n\xa0)\x81\xca$\xa8\x87K\x5c\xb2D]\x04\x12\ \x02s\xffC\xb8\x91r\xc5B\x0a\x0ffX\xa0\xdb\xca\ \xcdO\xf8\xd7\xa8K\x92Mh9\xfaI\xa0\xfc0h\ (\x91 \x84\x0a\xdd\x0c\x0f\x0b\x05\xfa\x9cD?\xe5\ \x98L\xf0\xbfo\xa5Ts\xef\xa9\xd4\x9ah\xa0\x86\xdd\ \x10B\x83h\xf4\x8c\x12\xcd \x96_\xc8\x8a\xba\x90\xc4\ \xc5\xe0\x0a \xe2J\xe2\x0cx\xd1V\xc1\xe3\xbf^\ \xf0\xaeE\xb5 \xe8\x05\xfeaZT\x0c\x12\x00\xc2L\ A2\x98\x82m\xed\xee\xe4KXV\xca\x97\x19\xff\x19\ \xc8\x0cBZF\x18\x81n3\xcd\xf3\x09\x99\x93\x22m\ \x99h\xc20\x8d\xb2kv_\xc4\xb8$i\xa2&P\ \xe8:0\xa0\x94\xe0\xba\x99\xbdP\x5c\x09v\xbb\xc0\x02\ \x0cB8\xd5\x07\xdf\x02\xda\x03\x9f{A\xe2{\xe1\xf7\ \xad\x150\xe1\xdaR&\x904H$!\x8b0-\xc9\ \xb2\x90\xc6\xc4\xc6{\x91_0\xd5\x19\xb8\x94\x01\xd7\xa3\ \x0b\x19M\xcd\x11Fh\xc0D--\xa4%}\xb2;\ \xa9\xf5\x0co\xdf;\xd4\xbb{\xfb\xee\xd1\xc1\x83\xad\x95\ s\xa3*V17\x92\xf47\x93\xf0o\x91\xea\xfc$\ <+R\xdaUJy\x03\xcc\x8d\x9b\xaf\xcc\xe8\xbd\x0c\ \x22\x8f\xad\xe0\x91\xd9\xdbI\xcaa\xe2 iXCW\ 2y\xd1\x06\xcaD!\x95\x98O\x06\x81\x18\x10\xd9R\ (\x9d\xafF\xf6V\x09\xa7\xde\x1d\xc2)\x0d\xe7\xd4)\ oN\x89\x84\x91\xa6]\x96\x0c\x9c\xd3\x05Ia\xde\xe8\ h\x01\x170\xe1\x12e^[/UQp\x8a\x86\xc9\x0e\x7f\xec\xbb\xc8\xb2\xb2\ \x18\x86\xa8\x04\xf9\xe4\xb5\xc0\xb9\x8e\x98\x05\xa7+\x81\x7f\ !\xdf\xc4(\xb5\xb5\xb9\x12\xc6\x8b\x5c\x0d\xcf\xd2\x08\xd9\ k\xc5\xc5\xb0\xe2v\xdd\x90r\x90\x87BB*\xe5\xb0\ \xe3\x8cQ\xc9\xd2\xaf3N\xf2\x85\x9b\xe1p\x9f\xa1\ \xd9)q\xadDJ\x89\x8b\x18\xa3\x9c!\x96\xa7\xc8\xf9\ \xa48u\x09\xb0(\x94\xc9|\x8e\xa6>$\x98'A\ \xfe\x8cG\xa0\xb8\x96DX\xaa\xa6\x15[\x85\x83`\x98\ S\x22\x09\x81\xb8\x80\xa6qF,\xc8\x06\x93\xbc\xd6p\ \x992\xa3\xf3~\xc0\x84hw\xce\x93\x1a\xcddEC\ 4\x0a\x15\x89P\x87\xc5b\x8dUu\x80B\x98\xba?\ \x95\xfd\xc6\x87\xe6\xf3`\x15Z\xb2\x80DH\x00\xe5\xc3\ \x95,v\xa8\xcc\x84\xf5\xd3\xa2\x08K\x09HD\xe5\xf6\ \xb5\xa4\xc6\xa1Rdr\xb0]\x9d\x061\x05o\x9fj\ !\xb6\xd2\xb4\x0c\xfd\xaa\xcb\x15\xa6T\xc5\x90\x94\x02\xb6\ \xdd`0\xae\xed\xe08\x88>\x89h\x03\xac\x9f\xe2x\ \xe6i\xb4c\xc6\xb6iG\xe4w^\xaf&\x89\x1b\xc0\ \xd4\xa7\x05E%,\xd6\xf3\xaa\x92\x0e3\x12\xce5\x8a\ \x9c\xdcF\xe9\x1a\x8e\xc8j\x9e\xe7*!\xa1\xd5\xf5\x95\ m\x85j\x01\xf5\xbcT\xbaY\x06A\x02\xd1\x02\xb5\xcb\ \x82O\x80\xba\x81\xcfRxI*M\xfd\x85;)H\ \xf3\x92\x803H\x1c\xb0\xb6\xc2T\x82\xed\x04\xc2\x1c!\ \x0f\xb6\x1cX\xd4\xea\xa8i\x0a\x86&\x81_\xa5\x81\x0c\ \xb1\xd8\x1b\x04\x1d\x03G\xd3aQ\xe5\x06\xd7\xd6K\xa3\ H\x9d'I\x98\x07\x13nZ\x9fk\x22\xa8\xa7\x98Y\ \xc6a\x84~\x1b\xea\xadZj\x1a\x03\x0e[\xa52\xaa\ Q\x82\x09\x9c\xd0\x0a'\xbd7I\x97\xf3\xea\x0c\xa6$\ 5\xc3\x9d$\xab/\x91\xa8\x9b\xac`a\xb9\xbc/\x8b\ S\x93,\xd8P\xb01\xadj\x93B\xbb\xb0\x17\xeb\x86\ \xa8\x95V\x85\x03G\xac0\ 6\xc7\xcd^\x9eZ\x13\x16\xd4bj\x03\xce\xc2\xc2g\ a\x09\xc3Z\xe2\xfc!I\x91r\xd2\x0c&\xaeI/\ \xea\x10\x89\x82\x89\x13\x8ba\x04\x18%\xa2\x0d\x92\x91s\ \xa4\xef\xf5C\xea\x94\xa4L\x08a:\xdeB\x13\x06f\ \xce\x99n;\xd5\xa3~7\xf8\x93\x01\xb5\x10\xe6\xb3\xba\ A1\xceX\x01;\xb3S\x86\x95\x16\xb0<<\x89T\ z\x94`G\x89EZz\xb5k\xb5\x0b\xc8jXQ\ \x0b\x13YH\x960\x16\xf4\xbc\x98\xc2 \x99]!\xf4\ \xaeZ\xe7Jw\x88\xa2\xb3\x14S\xe6U\x01z@P\ f\xcb\xdf\xb2\xc7N\x11 \xad&\xbeS/\xa4R\xa0\ \x01\x99\x82\x1c\x22\xf4\xef\x99\xdd\x9a\xf0\x9bA\xe0\xb6A\ \x03)\xb2w\xbb>AgR\x0f\x91\xb6\xd2\xb2\xc9\xb2\ S\x1d\xa6\xd1Nc\xe3\xae>\xef\x08\xdc\x8b0,c\ Q\x07\x82\x82!\x82\xc4\x06\x0b\x19U\x96\xd5i\x22 \ \xe6q\x10\xe8\xba\xa6\x1b\xa1\x91\xe1\xac\xb6\xddQ\x19\xa9\ C4\xbc\xc5\xcb!\xdae\xf7J\xbd\xd9e>\xa1\x8a\ \x1d\x0b,\xe7\xa7g\xce\x88\x00t\x026F-\xa7\xb5\ \xe4\x05\x8e\x10\x04bw\xba\x1b\x1e\x0d\x10\xcd\xa5\x11B\ X\x0e\xe5\x176\xad+\x09\x9c\x88\x95\xb74\xcb\xb3\xa2\ \x08\xff\xeb\xd9\x82a\x10f\x92,6x\xe5\x03>+\ ;\xf7\x9c\xe3\xe9\x8e\x19\xa2Y\x9e#(\x14\xb4p[\ \xe3\xc6\xcd\xd0\x8a\x043\x16l\x13\x12\xb9\xa2\xb9\xffk\ dW\x87![1\xaeW\x05\xe0j\xeaH\x91\x1f\x88\ \x89\x8e\xf0s9Wn\xaf\xd0niY\xbc\xb2\xd2\x81\ \xaf\x86\xad\x10T\x10iTj\xab\x94\x1c\xe24\x96\x95\ \x98\xa3m\x96\xff+Ras\xbb\xe2&n>\xf6\x8b\ \x92\x11\xea\x90\x87K@Wf\xdf\xb0g\xc4\xe2\xb6q\ \xed\x1c\x0d\x88Q\x0a9\xecc\xc7\xc2,\xd8\xa0\xaf!\ \x0e\x0a\xa7\x14O\x03lSh\x99\xd3\xc0Z\xb5$+\ \xa0\xa2\xb65\x84nc\x7ff\x0f\xb1\xea\x8d\xf2\x01\xa5\ \x14|c\xd0[\x16\x8e^\x18b\x97U\xc8\xda\xd7E\ +\x8b\xb9\x15\xd1jM\x09J\xde\x190\xd79;\x95\ \xe2\xcb\x839r\x9e\x83\x05h\xf3.Gu\xd73+\ q\xd8\xbc\xa6+Ii\xc9LJB\xccZ)h\xc3\ \xeb$\xd4Ny\x18\xe8\x94u\xf6\x19\x0c|\x0e\x8d\xdd\ g\xa8\x85.\x09\xfe\xf7\x92C\xa2P[\xb3\xa5\xc4{\ \x07\x1b\xd2\x1c5\xbe\xee\x85\xce\xdbkZQ\xc2\x5c\xea\ \xbaCW\xf5\xf6\xde,C?\xe8\x9f\xa1\xdb\xd9\xecl\ \x13\xf1-h\xb2\x80V^<\xf0\x9a\xe3\xd5bI\x04\ g\xa2$rj\xb1\xc2\xa5\x9dJF\xd5r\xb4\x0b\xc8\ \x0fh\xf9\x8d>\xcf\x93\x1d\x8f\x1eK\xc7Eb/\xc0\ -\x1e\xf7!\xec\xd3\x83\x06;\xbf\xec\xf2E\xad\xa2\x1b\ \x0f6\xcc\x16\x8fK\x0e\xbe\xc0\xd7x\x97\x1ch\xfd\x8b\ \xd0\x80iJ\xe9\x05\xe1\xf3w\x17rI`\xaf\x9a1\ \xa5\x9e\x90\x80\x1dtx\xad2\xc77\x08\x8f\xd2 \xdc\ o\xde\x9b\x11@\xfb\xe1\xeb\x1d\x80\xc5X\x00\xe671\ <\xd8\xf1\x9a\xd5\xe4\xae\x9c\xda\x91\xb6Y.\xf5W\x1f\ /O\x1c!\xfe\xcco\x8a\x10x\xb9\xc2uu\xc3u\ \xa3\xc2\x17\x89\xaa5>\x17\xc2\xdc\xd6\xad\xf2\x93k;\ \xbe1\x82.`Y\x97\xbb\xca/\xa2\x99'\xa7i\xeb\ \x05\x0d,\x09\xb1R\x91@|\x02z\xdd\xa9\x82\xb0\xb3\ V\x97\xd9cBB\x13X\x99\xc2`nC\x0b\xb8\x19\ \xe2\xbc\xe0W~,\xcf\xfb&\xddw\xbc\xc8u0s\ \x0a=\xd1M\xd1\xf7L\x80\x0f\x12'\xb1\x803\x19\xd2\ \x07H\xaf\xf4\x12\xb7L \x12\xcfd\x03u\xdd59\ G\xc7\xb4u\xaf\xc4\xc2\x7f-\xf0v\x1f\xa9\x8b\xd3;\ I\xfc\x02\x81\xd7\xb5\xd7I\xd7\xab\x06dV\x05\x9d\xc5\ \xb5W\xc6\xfeI\x0a\xd5\xacI0\x82\x97C\xaf\xec\x86\ \xdex\xe9\x0d==\x0by@\x0a\x94\xd2\xba\xd4\x0a6\ (\xf0N\xeb>\xf0\xb8\x22\xc4;Yb\xf4\x14\x5c~\ \xf7\xce\x87\x9c[^[\xc7\x863\x00*\x17\x8eV\xff\ \x05\xab\xae\x82\xddg\xe9\xd5%\x99R\x22\x0b\xc0!Q\ \x00\x8a0\x85Q\xe1s\x91~\xce\xc3\xbf\xec\xde\xbab\ \xa6\xf8\xfc\xb2\xd3\x19^\x87!)\xe4\x1e\xb4\x1b\xadE\ {a\x1b}\x00\xe3\x00\x1a\x02\xb56\x7f\x16\xacKP\ )~!\xca9\xdb\xe4]\xf9ei\x85\xb6_\x1b\xd6\ Q\x8eB\x0d\x1f\xbbh\xc0~\x93\xa4\xb5\x032\xdf`\ \xe1\x0f\xfc\x8e\x9caey:\xcb\xde\x8f\xc3\xeaDf\ \x89B\xa3\xc7@\xeb\xd1:\x8827!z#\x00]\ \x886\xc3\xd7F\xf8\xf6\xbeQ\xd7E\x9f\xd9\x02s\xd8\ \xbd\xb2\xbc%=6\x9d:mzZL\xb9\xb1;k\ \xe4\xe4\x9e\xee,\x16\xd3\x9d\xa0\x97j\xba\xd8\xd3\x9d\xef\ \x11\xe8\xebw2\x10I\x094\xfbW\x98\x97\x04\xa9\x12\ \xae\x18\xd9\xb3{\xed\xde\xe1\xbe\xce\x03C\x83d\x14t\ \xacM\xc1\xdf n$5j\x10AC\xed\x10\x86U\ ]\x97\x922\x16\xc6D\xb9@^x\xb2~\xdd\x86M\ \xc2Z\xe1\xc2\xcd\x9b7n\x16\xfa\xd9\x0d\xbd.\xe1\xc2\ -\xeb\xd6\x0b\xdd\x9dy\x22}t\xe9N\x8a\x0e\x11\x8b\ FS,l\x19\xcc\xccJ$\xb6q\x16\xe6\xa8\xfb\x1f\ \x01\x12\x91\x0a\xdal\x88\xb3\xc9\x9b8\x034\x04\x13v\ \xec\xe8\x1a\x1a\xaa\x18\xf7\xfbg\x83{YX\xe0\xec\x95\ \xd1ye\xd8\xb4\xcc:50f<\xec\xec9Qx\ \x1a`\x06>\x0a\x7f[J\x91\x0a\x10\x11\x9c\x8eY\xd1\ c\x8f7=F\xb0% \x10F\xb1\x1beR\xc6\xd1\ ;\x22J2NwTJ\xaa*eVl.5>\ \xe5\x84\x10\x1c\x1a\xc9\xae\xfe0\xbd,}\x0d\xc1\x19\x07\ \xc9\xec\xe6q'\xb9\x8a\x14B\x87G\xdcV,\x8f\xdb\ \x22%o\x17\x1b\x85\xafaO\x0bc\xda\x95\xcd\xa0\ \xb5\x1b\x9dI+e\x13K[\xed\x97\x22\xb0k!^\ -=\xa5n\xde\xbe\x158;\xf6\x9e\xf6g/9\x81\ \xe2=\x1bD\xd1\xa7E\xc9\x00'cL\x13\x8f\xa3a\ \xca\xf2\x0e;&\xcd\xb1\x98\x94\xdd\x1a\xa7\x7f/\x0a\x8e\ \xd6&a:\x0b\xd3(La\xc7\xe8\xe8\xb0`\x9a\x10\ \xf2hAS\xe0\x09Q\x106\xaf\xdb\xc8sr\x1dW\ ,;\xe8\x96Y\xc9\x8eU\x12C\x82y\x01\xc8R\x13\ \xb7\x14\xa4(\xe5\x9d7\xeaK\x15I\x98\x15\xad/\x0b\ \xa05\xa4:\xe4\xcds\x92b\x92\xbc\xa3r\x13\xf9\xa9\ Y\x9a\xc8\x02\x8dx\x9c\x15n\xbbk\xdb\xe0\xc6\xd3\xab\ \xe3\x87I\xe3\x19\x92\xbe\xd1\xa8(\xc7\xa9\x91\xe4\x81\xe3\ le\xef\xb07=h\x90\x93\xc1\x90;h\x18\xc4\xaa\ H+5\xf4.&P\x87\xb6\x15\xf1w\x14\x90\x0e\x0f\ Z\xc8\xad\x5cT~\x9d\x10.\x07\xaeX\xca\xcb\xd8\x99\x01\ \xd3[9Y,\xe7\x05\x9d\x9c2\x92\xe3/JnS\ \x8b+'3\xe9')\xb2\x8d\xba\xfbIX\x09\xc3c\ F\xf8[\xee\xca\xe7T\xd8\x85\xe19\xd3\xef\xedw1\ \xf6\xf6;\x9fy\x97\xb9j\x81S\x1e1\x99\xc0\xb3\x0b\ \xf3\x88%\xed\xb3\xce\x02\xfe\x96=^ \xe4o/\xc8\ \x8bF\xd6g\xe9\x85\x10\xb6\x129\x04\xa9\xa2\xafU\xcc\ q\xe7\xe6z\xdf\x5c\x9f*C\xb4\xa6\xa7\xb28\xc7S\ ^\x0fH\xb3\xed\xd3\xf0D\xc6+\x1eu\x83\xa9\xe3\x01\ \x9f\x1f\x8c7\xa4f\xe5\x01w\x16\x0d\x11^\xb3+>\ \xf9\xf7\xa4\xecA+{'\xec\xce#\xf7+\x10c\x03\ \xaa\xf5N\xba\xf2\xd9\x87\xec\xea\x0b\x15\x1c\xf2\x96\xaa\x1c\ /,\x0b\ \xc6\xd9\x99\xb2*i^,w\x9d\xea\x11\x1c\x0bV\x00\ \xc4nI\x14\x5c\xd9\xe3\xdc]\x18\xe7\xcd\xc3:qZ\ \x9c\xc4\xad>\x90\x7fE)oW\x16\xcdW\xe8\x08\x15\ \xd9ng\xbc\xdc\xc5+3\xcc#\xe8T\xcfd\xea-\ V\xd0J\xa6\xc6\x9fM\xf1T\xcf\xdf\xc2\xdf\ a\xc8:<8\x87\x1c-I\x81\xbc\xf93\xdf>Y\ D\x03\x9fq\xf6\xd6\x9eq\xcfc\xe67\xf8\x22J\xe8\ \x8ao\xc2\x1d\x92P\x1c\xbc^h\xaf\x97[4;A\ \xb3^h\xef\xb8$zn\xd10\xdf\xbe]z\x17\xd3\ \xe4f\xd2\xaa\xd9;{\x0b\x1a9\xc3h\xdd\xbd+\x10\ \xd4*`\x0c\xa6\xa5\x10b\xe0\x06\x91\xfb2\x05k\x0d\ \xc4%&f\xce\x006RYa\x08\xa7%Q\x18\xe4\ W#|W\xd8\xe0Z\xc1\xd5\xb0A\xb3D\x99W\x10\ Y'\x8e\xfb\xaa\xf4<\xba\x12\x91\x02\xb6\x18i\xe7\xe0\ w\xa5}\xd7\xdb[r\xfc<\xc1\xc9\xae\xf1\x03Z3\ \xed\xa8$\x99(m\xee\x5c\xca[p\xe8\x09 \x04\xf9\ S\xa2,\xa5\x1d\xb1\x7f b\x0b\xadNR\x9bk\x5c\ *\x1cmoL\x99E\xce\xbc@\x80\xaf\xa1\x85,\x00\ 9\xf7\xab\xc0<\xc5\x8akD\x88X\xfd/\xde0(\ \xcf\ \x00\x00\x83L\ <\ \xb8d\x18\xca\xef\x9c\x95\xcd!\x1c\xbf`\xa1\xbd\xdd\xa7\ \x00\x00\x00\x05zh_CNB\x00\x00\x0a\x88\x00\x00\ \x05;\x00\x00\x05\x96\x00\x00\x05;\x00\x00\x0bs\x00\x00\ \x05;\x00\x00i\xe8\x00\x00\x05;\x00\x00r\xea\x00\x00\ N:\x00\x00r)\x00\x04\xbb\x04\x00\x00;P\x00\x04\ \xcf\x04\x00\x00<2\x00\x04\xd0%\x00\x00T\x04\x9d\ \xac\x8e\x00\x00H\x15\x04\x9e\x84\xd5\x00\x00a\x19\x04\xa1\ m^\x00\x00#\xac\x04\xcb\x1aI\x00\x00%;\x04\xcb\ Xj\x00\x00\x0b3\x04\xcbXj\x00\x00r\xad\x04\xd6\ W\xc0\x00\x00d\xa4\x04\xe9\x04\xab\x00\x00w;\x04\xfc\ \x86\xab\x00\x00`k\x05\x09\x86a\x00\x00/\x98\x05\x13\ \xccT\x00\x000}\x050N\xc0\x00\x00QC\x050\ \xa5\x13\x00\x00*\x88\x051\xccT\x00\x00;\x0d\x051\ \xccT\x00\x00cS\x05O\xa2\x10\x00\x00\x09{\x05O\ \xa2\x10\x00\x00q\xeb\x05_. \x00\x00&\x00\x05_\ \xa8`\x00\x00\x19M\x05i<\xfe\x00\x003'\x05j\ r\x94\x00\x00;\xec\x05jr\x94\x00\x00d$\x05t\ \x96\x00\x00\x00\x0b\xf3\x05t\x96\x00\x00\x00s\xdb\x05v\ \x1b\x9e\x00\x00\x12z\x05\x8c\xac5\x00\x00RZ\x05\xa1\ \x08\xc0\x00\x00me\x05\xa3\x9c>\x00\x002\xc0\x05\xa3\ \x9c>\x00\x00u\x0a\x05\xa8X\xf3\x00\x00\x04\xeb\x05\xaa\ \x8b\xc3\x00\x00Jk\x05\xaa\x8b\xc3\x00\x00m\x99\x05\xd4\ 9Z\x00\x00v:\x06\x02\x14%\x00\x00I_\x06\x09\ o\xb4\x00\x00>\xd7\x06\x1bw\xbe\x00\x00v\xd1\x06%\ \x07\xf4\x00\x0074\x06)o\xb4\x00\x00\x0aZ\x06)\ o\xb4\x00\x00Q\x11\x06)o\xb4\x00\x00rQ\x06-\ B\x0e\x00\x002M\x06-B\x0e\x00\x00t\x8c\x069\ \x82N\x00\x003\xd4\x069\x82N\x00\x00u|\x06:\ \xd1\xd2\x00\x00G\x9c\x06:\xd1\xf2\x00\x00l\xc4\x06<\ =\x10\x00\x00o<\x06G(\x05\x00\x007\xfd\x06M\ ?$\x00\x00 d\x06[\xec\xae\x00\x00@\x13\x06]\ 1\xde\x00\x00\x03\xe4\x06x\xc7\xb1\x00\x00.T\x06x\ \xc7\xb1\x00\x00N\xf8\x06\x96\xe7\xa4\x00\x00vy\x06\x9a\ K\x00\x00\x00\x0eI\x06\x9a\xec\x82\x00\x00B\xb4\x06\x9a\ \xf5C\x00\x00l8\x06\x9c(\x01\x00\x00e\xf7\x06\xb6\ \xbe`\x00\x00\x07\xac\x06\xc5)*\x00\x00P\xb2\x06\xcc\ \xd6\xa3\x00\x00E\x18\x06\xdcS\xa3\x00\x00\x07\xec\x06\xe5\ \x1f\xc4\x00\x000\xc3\x06\xe51\xc4\x00\x009\x87\x06\xe8\ Bs\x00\x00J\xa2\x06\xef\xbcp\x00\x00\x08\xec\x06\xef\ \xbcp\x00\x00qb\x07\x0b\x90\xfe\x00\x00\x15\x93\x07\x14\ *\x1e\x00\x00H_\x07\x19\x94u\x00\x00F\xba\x07\x1d\ \xe0`\x00\x00n_\x076\xcd`\x00\x00c\x14\x076\ \xcd`\x00\x00q&\x076\xcf`\x00\x00\x08:\x079\ \x94u\x00\x00F~\x07q\x00\x00\x1e\x14\x08\xc7\xd2\x01\x00\x00.\xdd\x08\xf6\ \x88`\x00\x00\x0c/\x08\xf6\x88`\x00\x00t\x14\x09+\ \x0f@\x00\x00!\x9c\x09.\xc9\xc5\x00\x00=T\x09>\ \x0d$\x00\x00K\xc7\x09AN\x12\x00\x00#4\x09W\ \xd7\xd5\x00\x00F&\x09^\x89\xd3\x00\x00D\xdb\x09`\ \x06\xb5\x00\x00I\x99\x09b\x06\xb5\x00\x00\x0c\xeb\x09g\ \x01\xd0\x00\x00n\x04\x09m\xcap\x00\x00-~\x09}\ R\xc0\x00\x00\x08\xb1\x09}\xacQ\x00\x00\x1bg\x09~\ \x0e\xa3\x00\x000)\x09\x8ct\xd3\x00\x00k\xcf\x09\x93\ \xd2\xfe\x00\x00O\xbc\x09\x96F0\x00\x00\x1e\xb5\x09\x96\ U\xce\x00\x00\x1e\xf0\x09\xa4\xc1N\x00\x00CN\x09\xb8\ \x7f\xb1\x00\x00\x00\x00\x09\xbae\xb2\x00\x00?\x9a\x09\xc0\ \xcbU\x00\x00C\xdc\x09\xc0\xcbU\x00\x00j\x10\x09\xc4\ O\x93\x00\x00\x22\xed\x09\xc4g\xff\x00\x00+T\x09\xd7\ \x1ds\x00\x0092\x0a\x06e~\x00\x00b\x06\x0a\x07\ \xed^\x00\x00Y_\x0a\x0c\x87\x0e\x00\x00X\xa1\x0a\x22\ ZW\x00\x00A\xcb\x0a_\xd7\x0e\x00\x00\x0e\x87\x0a_\ \xf3\xfb\x00\x005\xdf\x0a_\xf3\xfb\x00\x00`(\x0ai\ f\xc9\x00\x00,\xcc\x0aif\xc9\x00\x00I%\x0as\ >\xc3\x00\x00\x06S\x0a\x8b\xc3`\x00\x00R\xcd\x0a\x97\ \x00\x80\x00\x00\x0d\xba\x0a\xa2Yp\x00\x00kb\x0a\xa8\ \x9a\xe4\x00\x00J1\x0a\xc0(\x90\x00\x00m\xcd\x0b,\ \xa7!\x00\x00,\x22\x0b>\xcdE\x00\x00>\x99\x0bF\ q\xee\x00\x00\x13\xf9\x0bUq\xc1\x00\x00-\x0a\x0b`\ r`\x00\x00h\xae\x0bg\x8cn\x00\x00.\x10\x0bn\ \xb1\xee\x00\x00^\xa9\x0bv\x04\xf0\x00\x00\x17K\x0bz\ \xc1 \x00\x00\x09\xee\x0b{\xc6\x8e\x00\x00)\xf5\x0b\x89\ w\x94\x00\x006t\x0b\x89w\x94\x00\x00O=\x0b\xa3\ \xdc\x0c\x00\x00tO\x0b\xc8\xc7\x13\x00\x00b\x88\x0b\xe0\ \xa1\x13\x00\x008:\x0b\xe0\xa1\x13\x00\x00bE\x0b\xf9\ \x95\xb3\x00\x00\x1d\x91\x0b\xf9\x97\xc3\x00\x009\xc4\x0b\xfb\ \xb97\x00\x00A\x1f\x0c\x01\xe6\x82\x00\x00Ld\x0c\x1a\ \xb95\x00\x00I\xdc\x0c(\x19\x04\x00\x00G\x0c\x0c2\ \xc0S\x00\x00\x055\x0cP\xdb[\x00\x00\x06\x82\x0cb\ [\xa5\x00\x00G^\x0ce\x0f.\x00\x00H\xb4\x0ce\ \x0f.\x00\x00R\x8f\x0cs\x10t\x00\x00J\xf0\x0c\x96\ q\xc0\x00\x00\x0e\xe2\x0c\x96q\xc0\x00\x00\x18S\x0c\x99\ e\x80\x00\x00\x1f+\x0c\x9dN\x00\x00\x00\x0cm\x0c\xaa\ \xac\x07\x00\x00+\x92\x0c\xab\xf8D\x00\x00E\xca\x0c\xb5\ \x86\x80\x00\x00Qr\x0c\xb5\x86\x80\x00\x00iR\x0c\xdd\ \xc2\x03\x00\x00D\x95\x0c\xdd\xc2\x03\x00\x00jP\x0c\xe0\ \x1a\xf3\x00\x00i\x09\x0c\xfb\xe0\x8a\x00\x00 \xa8\x0d\x00\ \xf7U\x00\x00e\xac\x0d\x04\xc3c\x00\x00 \x0d\x06\ \xe1\xe0\x00\x00k\x0d\x0d\x11C/\x00\x00*\xdd\x0d\x1f\ .H\x00\x00\x0c\xad\x0d\x1f\x9f\xd3\x00\x00c\x93\x0d>\ P\xb3\x00\x00\x10\x83\x0d\x5c\xf5e\x00\x008\xc2\x0dq\ \x98\xde\x00\x00\x01\xe2\x0d\x99\xf9B\x00\x00\x05\xbc\x0d\x99\ \xf9B\x00\x00\x10\x1f\x0d\x99\xf9B\x00\x00D\x1f\x0d\x99\ \xf9B\x00\x00Q\xe6\x0d\x99\xf9B\x00\x00s\x0f\x0d\xa4\ $\xc3\x00\x00\x11\x94\x0e i\x22\x00\x00/\xdc\x0e.\ d\xa4\x00\x00C\x8d\x0e7I\xc3\x00\x00\x07\x00\x0e7\ I\xe3\x00\x00u\xfa\x0e_\x84\xe1\x00\x00)\xb2\x0ex\ \xa8B\x00\x00\x07f\x0ex\xa8B\x00\x00pK\x0e\x9c\ N\xa3\x00\x00\x1cv\x0e\xb2\xf0\x80\x00\x00fO\x0e\xc4\ J\xf0\x00\x00\x0de\x0e\xca\xc0\x99\x00\x00?N\x0e\xca\ \xc0\x99\x00\x00g\xdb\x0e\xda\xd4\xfe\x00\x00U\x1e\x0e\xe5\ 1\xe0\x00\x00'\xd7\x0e\xe8\xc0\x99\x00\x00\x1f\xb2\x0e\xf3\ 2\xb1\x00\x00$\x0e\x0e\xf32\xb1\x00\x00M\xf3\x0f\x02\ 3\xae\x00\x00=\x0a\x0f\x0a\xdc\x0c\x00\x00p\xac\x0f6\ \xb6\x90\x00\x00\x19\x99\x0f?r\xc0\x00\x00(l\x0f?\ \x86\xfe\x00\x006%\x0f]\xee>\x00\x00)\x13\x0f]\ \xee>\x00\x00N\x9e\x0fi\xafT\x00\x00k\xfe\x0fu\ \xb1\x0e\x00\x00=\xfd\x0fy\xa5^\x00\x004G\x0f{\ \x1e\x14\x00\x00\x1d2\x0f}\x11p\x00\x00\x0f,\x0f\x82\ \xa0\x8e\x00\x00\x18\x9d\x0f\x9c\x97\x17\x00\x00\x11G\x0f\xa6\ V\x80\x00\x00eu\x0f\xa7\xb6\x04\x00\x00\x1d\xd1\x0f\xac\ [\xe1\x00\x00!\x1c\x0f\xac[\xee\x00\x00\x22\x9d\x0f\xb3\ $q\x00\x00\x1a\xfc\x0f\xb3$q\x00\x00M*\x0f\xd1\ ?\x00\x00\x00S7\x0f\xd6\xe5\xde\x00\x00\x5c\x94\x0f\xd9\ \x03.\x00\x00%\xbd\x0f\xde{\xf0\x00\x00a\xba\x0f\xf3\ \x03\x0e\x00\x00\x02\xddi\x00\x00x\xa0\x03\x00\x00\x01,\ \x00\x0a\x00A\x00l\x00i\x00R\x00e\x00z\x00a\ \x00 \x00A\x00m\x00i\x00r\x00S\x00a\x00m\ \x00i\x00m\x00i\x00\x0a\x00M\x00o\x00h\x00a\ \x00m\x00m\x00a\x00d\x00r\x00e\x00z\x00a\ \x00 \x00A\x00b\x00d\x00o\x00l\x00l\x00a\ \x00h\x00z\x00a\x00d\x00e\x00h\x00\x0a\x00S\ \x00a\x00d\x00e\x00g\x00h\x00 \x00A\x00l\ \x00i\x00r\x00e\x00z\x00a\x00i\x00e\x00\x0a\ \x00M\x00o\x00s\x00t\x00a\x00f\x00a\x00 \ \x00A\x00s\x00a\x00d\x00i\x00\x0a\x00J\x00a\ \x00f\x00a\x00r\x00 \x00A\x00k\x00h\x00o\ \x00n\x00d\x00a\x00l\x00i\x00\x0a\x00K\x00i\ \x00a\x00 \x00H\x00a\x00m\x00e\x00d\x00i\ \x00\x0a\x00H\x00.\x00R\x00o\x00s\x00t\x00a\ \x00m\x00i\x00\x0a\x00E\x00h\x00s\x00a\x00n\ \x00 \x00T\x00i\x00t\x00i\x00s\x00h\x00\x0a\ \x00M\x00o\x00h\x00a\x00m\x00m\x00a\x00d\ \x00A\x00m\x00i\x00n\x00 \x00V\x00a\x00h\ \x00e\x00d\x00i\x00n\x00i\x00a\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x96\x0aAliReza A\ mirSamimi\x0aMohamm\ adreza Abdollahz\ adeh\x0aSadegh Alir\ ezaie\x0aMostafa As\ adi\x0aJafar Akhond\ ali\x0aKia Hamedi\x0aH\ .Rostami\x0aEhsan T\ itish\x0aMohammadAm\ in Vahedinia\x07\x00\x00\x00\ \x0babout_ui_tr\x01\x03\x00\x00\ \x00\x92\x00<\x00a\x00 \x00h\x00r\x00e\x00f\ \x00=\x00h\x00t\x00t\x00p\x00s\x00:\x00/\ \x00/\x00p\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\x00d\x00m\x00.\x00g\x00i\ \x00t\x00h\x00u\x00b\x00.\x00i\x00o\x00>\ \x00h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\ \x00p\x00e\x00r\x00s\x00e\x00p\x00o\x00l\ \x00i\x00s\x00d\x00m\x00.\x00g\x00i\x00t\ \x00h\x00u\x00b\x00.\x00i\x00o\x00<\x00/\ \x00a\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00Ihttps://per\ sepolisdm.github\ .io
\x07\x00\x00\x00\x0babou\ t_ui_tr\x01\x03\x00\x00\x00\x9a\x00<\x00\ a\x00 \x00h\x00r\x00e\x00f\x00=\x00h\x00\ t\x00t\x00p\x00s\x00:\x00/\x00/\x00t\x00\ e\x00l\x00e\x00g\x00r\x00a\x00m\x00.\x00\ m\x00e\x00/\x00p\x00e\x00r\x00s\x00e\x00\ p\x00o\x00l\x00i\x00s\x00d\x00m\x00>\x00\ h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00\ t\x00e\x00l\x00e\x00g\x00r\x00a\x00m\x00\ .\x00m\x00e\x00/\x00p\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x00d\x00m\x00\ <\x00/\x00a\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\ Mhttps:\ //telegram.me/pe\ rsepolisdm\x07\x00\ \x00\x00\x0babout_ui_tr\x01\x03\ \x00\x00\x00\x9a\x00<\x00a\x00 \x00h\x00r\x00e\ \x00f\x00=\x00h\x00t\x00t\x00p\x00s\x00:\ \x00/\x00/\x00t\x00w\x00i\x00t\x00t\x00e\ \x00r\x00.\x00c\x00o\x00m\x00/\x00p\x00e\ \x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\ \x00d\x00m\x00>\x00h\x00t\x00t\x00p\x00s\ \x00:\x00/\x00/\x00t\x00w\x00i\x00t\x00t\ \x00e\x00r\x00.\x00c\x00o\x00m\x00/\x00p\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\x00d\x00m\x00<\x00/\x00a\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00Mhttps://twitter\ .com/persepolisd\ m\x07\x00\x00\x00\x0babout_\ ui_tr\x01\x03\x00\x00\x00\x1aQsN\x8e\x00\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00\ l\x00i\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10A\ bout Persepolis\x07\ \x00\x00\x00\x0babout_ui_tr\x01\ \x03\x00\x00\x00\x08_\x00S\xd1N\xbaTX\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0aDeveloper\ s\x07\x00\x00\x00\x0babout_ui_t\ r\x01\x03\x00\x00\x00\x08\x8b\xb8S\xefSO\x8b\xae\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x07License\ \x07\x00\x00\x00\x0babout_ui_tr\ \x01\x03\x00\x00\x00\x04\x00O\x00K\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x02OK\x07\x00\x00\x00\x0babout\ _ui_tr\x01\x03\x00\x00\x00 \x00P\x00e\ \x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\ \x00 N\x0b\x8f}{\xa1t\x06Vh\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x1bPersepolis\ Download Manage\ r\x07\x00\x00\x00\x0babout_ui_t\ r\x01\x03\x00\x00\x00\x0aryR+\x9e#\x8c\x22\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12Speci\ al thanks to:\x07\x00\x00\ \x00\x0babout_ui_tr\x01\x03\x00\ \x00\x00\x04\x8b\xd1\x80\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0bTranslators\x07\x00\x00\x00\ \x0babout_ui_tr\x01\x03\x00\x00\ \x00\x0cm\xfbR\xa0N\x0b\x8f}\x94\xfec\xa5\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x11Add Down\ load Link\x07\x00\x00\x00\x0dad\ dlink_ui_tr\x01\x03\x00\x00\x00\ \x0cm\xfbR\xa0R0|{R+\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x11Add to ca\ tegory: \x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x08\ \x9a\xd8~\xa7\x90\x09\x98y\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Advanced Optio\ ns\x07\x00\x00\x00\x0daddlink_u\ i_tr\x01\x03\x00\x00\x00\x04S\xd6m\x88\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x06Cancel\x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x0ef\xf4e9N\x0b\x8f}e\x87\ N\xf6Y9\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Ch\ ange Download Fo\ lder\x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x0cf\xf4e9\ e\x87N\xf6T\x0d\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x12Change file na\ me: \x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x10h\xc0mK\ |\xfb~\xdfN\xe3t\x06\x8b\xbe\x7fn\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x1cDetect Sys\ tem Proxy Settin\ gs\x07\x00\x00\x00\x0daddlink_u\ i_tr\x01\x03\x00\x00\x00\x0cN\x0b\x8f}e\x87\ N\xf6Y9\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11\ Download Folder:\ \x07\x00\x00\x00\x0daddlink_ui\ _tr\x01\x03\x00\x00\x00\x08z\x0dT\x0eN\x0b\x8f\ }\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eDownl\ oad Later\x07\x00\x00\x00\x0dad\ dlink_ui_tr\x01\x03\x00\x00\x00\ \x0aN\x0b\x8f}\x94\xfec\xa5\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0fDownload li\ nk: \x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x0aN\x0b\x8f}\ [\xc6x\x01\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13\ Download passwor\ d: \x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x10N\x0b\x8f}u\ (b7T\x0dT\x8c[\xc6x\x01\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x1eDownload us\ ername and passw\ ord\x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x0cN\x0b\x8f}u\ (b7T\x0d\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x13Download userna\ me: \x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x08~\xd3g_\ e\xf6\x95\xf4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08En\ d time\x07\x00\x00\x00\x0daddli\ nk_ui_tr\x01\x03\x00\x00\x00\x10\x00H\ \x00e\x00a\x00d\x00e\x00r\x00:\x00 \x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x08Header: \ \x07\x00\x00\x00\x0daddlink_ui_\ tr\x01\x03\x00\x00\x00\x0c\x00I\x00P\x00 W0\ W@\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04IP\ : \x07\x00\x00\x00\x0daddlink_u\ i_tr\x01\x03\x00\x00\x00\x04\x96P\x90\x1f\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0bLimit sp\ eed\x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x04\x94\xfec\xa5\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x04Link\x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x18R\xa0\x8f}\x00 \x00c\x00o\x00\ o\x00k\x00i\x00e\x00s\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0eLoad cook\ ies: \x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x08f\xf4Y\ \x1a\x90\x09\x98y\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cM\ ore Options\x07\x00\x00\x00\x0d\ addlink_ui_tr\x01\x03\x00\ \x00\x00\x08\x8f\xdec\xa5ep\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x16Number of c\ onnections:\x07\x00\x00\x00\x0d\ addlink_ui_tr\x01\x03\x00\ \x00\x00\x04\x00O\x00K\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x02OK\x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x06z\xefS\xe3\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Port:\ \x07\x00\x00\x00\x0daddlink_ui_\ tr\x01\x03\x00\x00\x00\x04N\xe3t\x06\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x05Proxy\x07\x00\x00\x00\x0d\ addlink_ui_tr\x01\x03\x00\ \x00\x00\x0aN\xe3t\x06[\xc6x\x01\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x10Proxy pas\ sword: \x07\x00\x00\x00\x0daddl\ ink_ui_tr\x01\x03\x00\x00\x00\x0cN\ \xe3t\x06u(b7T\x0d\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Proxy usern\ ame: \x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x14\x00R\x00\ e\x00f\x00e\x00r\x00r\x00e\x00r\x00:\x00\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aRefer\ rer: \x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x0a\x8b\xb0O\ Okd\x8d\xef_\x84\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x12Remember this p\ ath\x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x08_\x00Y\xcbe\ \xf6\x95\xf4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aSta\ rt time\x07\x00\x00\x00\x0daddl\ ink_ui_tr\x01\x03\x00\x00\x00\x18\x00\ U\x00s\x00e\x00r\x00 \x00a\x00g\x00e\x00\ n\x00t\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0cUser agent: \x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x16\x00<\x00b\x00>e\x87N\xf6T\ \x0d\x00<\x00/\x00b\x00>\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x12File nam\ e: \x07\x00\x00\x00\x18afte\ r_download_src_u\ i_tr\x01\x03\x00\x00\x00\x14\x00<\x00b\x00>\ Y'\x5c\x0f\x00<\x00/\x00b\x00>\xff\x1a\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0dSize<\ /b>: \x07\x00\x00\x00\x18after_\ download_src_ui_\ tr\x01\x03\x00\x00\x00\x10\x00 \x00 \x00 \x00O\ \x00K\x00 \x00 \x00 \x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x08 OK \x07\x00\x00\x00\x14a\ fter_download_ui\ _tr\x01\x03\x00\x00\x00\x08bS_\x00e\x87N\ \xf6\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d Ope\ n File \x07\x00\x00\x00\x14aft\ er_download_ui_t\ r\x01\x03\x00\x00\x00\x18\x00<\x00b\x00>N\x0b\x8f\ }[\x8cb\x10\xff\x01\x00<\x00/\x00b\x00>\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x1aDown\ load Completed!<\ /b>\x07\x00\x00\x00\x14after_do\ wnload_ui_tr\x01\x03\x00\x00\ \x00\x14\x00<\x00b\x00>\x94\xfec\xa5\x00<\x00/\ \x00b\x00>\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\ Link: \x07\x00\x00\ \x00\x14after_download\ _ui_tr\x01\x03\x00\x00\x00\x16\x00<\x00b\ \x00>S\xe6[XN:\x00<\x00/\x00b\x00>\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10S\ ave as: \x07\x00\x00\x00\ \x14after_download_\ ui_tr\x01\x03\x00\x00\x00\x12N\x0dQ\x8df\ >y:\x8f\xd9gaO\xe1`o0\x02\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x1eDon't sho\ w this message a\ gain.\x07\x00\x00\x00\x14after_\ download_ui_tr\x01\x03\ \x00\x00\x00\x0ebS_\x00N\x0b\x8f}e\x87N\xf6\ Y9\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14Open\ Download Folder\ \x07\x00\x00\x00\x14after_downl\ oad_ui_tr\x01\x03\x00\x00\x00 \x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\x00 N\x0b\x8f}{\xa1t\x06Vh\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x1bPersepo\ lis Download Man\ ager\x07\x00\x00\x00\x14after_d\ ownload_ui_tr\x01\x03\x00\ \x00\x00\x0cn\x05\x96de\xe5_\xd7O\xe1`o\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x12Clear L\ og Messages\x07\x00\x00\x00\x10\ log_window_ui_tr\ \x01\x03\x00\x00\x00\x04Qs\x95\xed\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x05Close\x07\x00\x00\x00\x10lo\ g_window_ui_tr\x01\x03\ \x00\x00\x00\x14Y\x0dR6]\xf2\x90\x09Q\x85[\xb9\ R0Rj\x8d4g\x7f\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x1aCopy Selected \ to Clipboard\x07\x00\x00\x00\ \x10log_window_ui_t\ r\x01\x03\x00\x00\x00\x1a\x00P\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x00 e\xe5_\ \xd7\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0ePerse\ polis Log\x07\x00\x00\x00\x10lo\ g_window_ui_tr\x01\x03\ \x00\x00\x00\x0cR7e\xb0e\xe5_\xd7O\xe1`o\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x14Refres\ h Log Messages\x07\x00\ \x00\x00\x10log_window_ui\ _tr\x01\x03\x00\x00\x00\x08N\x0ab\xa5\x95\xee\x98\ \x98\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cRepor\ t Issue\x07\x00\x00\x00\x10log_\ window_ui_tr\x01\x03\x00\x00\ \x00*\x00<\x00/\x00b\x00>\x00\x22\x00 \x00a\ \x00l\x00r\x00e\x00a\x00d\x00y\x00 \x00e\ \x00x\x00i\x00s\x00t\x00s\x00!\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x15\x22 alre\ ady exists!\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00\xe4\x00<\x00b\x00>\ \x00<\x00c\x00e\x00n\x00t\x00e\x00r\x00>\ \x00T\x00h\x00i\x00s\x00 \x00l\x00i\x00n\ \x00k\x00 \x00h\x00a\x00s\x00 \x00b\x00e\ \x00e\x00n\x00 \x00a\x00d\x00d\x00e\x00d\ \x00 \x00b\x00e\x00f\x00o\x00r\x00e\x00!\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00A\x00r\x00e\x00 \ \x00y\x00o\x00u\x00 \x00s\x00u\x00r\x00e\ \x00 \x00y\x00o\x00u\x00 \x00w\x00a\x00n\ \x00t\x00 \x00t\x00o\x00 \x00a\x00d\x00d\ \x00 \x00i\x00t\x00 \x00a\x00g\x00a\x00i\ \x00n\x00?\x00<\x00/\x00c\x00e\x00n\x00t\ \x00e\x00r\x00>\x00<\x00/\x00b\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00rThis link has\ been added befo\ re! \ Are you s\ ure you want to \ add it again?\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\xf6\x00<\x00b\x00>\x00\ <\x00c\x00e\x00n\x00t\x00e\x00r\x00>\x00\ T\x00h\x00i\x00s\x00 \x00o\x00p\x00e\x00\ r\x00a\x00t\x00i\x00o\x00n\x00 \x00w\x00\ i\x00l\x00l\x00 \x00d\x00e\x00l\x00e\x00\ t\x00e\x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00d\x00\ o\x00w\x00n\x00l\x00o\x00a\x00d\x00e\x00\ d\x00 \x00f\x00i\x00l\x00e\x00s\x00 \x00\ f\x00r\x00o\x00m\x00 \x00y\x00o\x00u\x00\ r\x00 \x00h\x00a\x00r\x00d\x00 \x00d\x00\ i\x00s\x00k\x00<\x00b\x00r\x00>\x00P\x00\ E\x00R\x00M\x00A\x00N\x00E\x00N\x00T\x00\ L\x00Y\x00!\x00<\x00/\x00c\x00e\x00n\x00\ t\x00e\x00r\x00>\x00<\x00/\x00b\x00>\x08\ \x00\x00\x00\x00\x06\x00\x00\x00{This operati\ on will delete \ \ downloaded fi\ les from your ha\ rd disk
PERMA\ NENTLY!
\ \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x01\x0a\x00<\x00b\x00>\x00<\x00c\x00e\x00\ n\x00t\x00e\x00r\x00>\x00T\x00h\x00i\x00\ s\x00 \x00o\x00p\x00e\x00r\x00a\x00t\x00\ i\x00o\x00n\x00 \x00w\x00i\x00l\x00l\x00\ \x00r\x00e\x00m\x00o\x00v\x00e\x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\ \x00 \x00 \x00 \x00a\x00l\x00l\x00 \x00\ d\x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00\ \x00i\x00t\x00e\x00m\x00s\x00 \x00i\x00\ n\x00 \x00t\x00h\x00i\x00s\x00 \x00q\x00\ u\x00e\x00u\x00e\x00<\x00b\x00r\x00>\x00\ f\x00r\x00o\x00m\x00 \x00\x22\x00A\x00l\x00\ l\x00 \x00D\x00o\x00w\x00n\x00l\x00o\x00\ a\x00d\x00s\x00\x22\x00 \x00l\x00i\x00s\x00\ t\x00!\x00<\x00/\x00c\x00e\x00n\x00t\x00\ e\x00r\x00>\x00<\x00/\x00b\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x85This operation\ will remove \ \ all download it\ ems in this queu\ e
from \x22All D\ ownloads\x22 list!<\ /center>
\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x18\x00<\x00b\x00\ >\x8f\xdec\xa5ep\x00<\x00/\x00b\x00>\x00\ :\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x14\ Connections:\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x16\ \x00<\x00b\x00>]\xf2N\x0b\x8f}\x00<\x00/\ \x00b\x00>\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13\ Downloaded: \x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x1c\x00<\x00b\x00>\x98\x84\x8b\xa1RiOY\ e\xf6\x95\xf4\x00<\x00/\x00b\x00>\xff\x1a\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1cEstim\ ated time left: \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x14\x00<\x00b\x00>\x94\xfec\xa5\x00<\x00\ /\x00b\x00>\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0dLink: \x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00Z\x00<\x00\ b\x00>\x00S\x00o\x00r\x00r\x00y\x00!\x00\ \x00Y\x00o\x00u\x00 \x00c\x00a\x00n\x00\ '\x00t\x00 \x00r\x00e\x00m\x00o\x00v\x00\ e\x00 \x00d\x00e\x00f\x00a\x00u\x00l\x00\ t\x00 \x00q\x00u\x00e\x00u\x00e\x00!\x00\ <\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\ -Sorry! You c\ an't remove defa\ ult queue!\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x14\x00<\x00\ b\x00>r\xb6`\x01\x00<\x00/\x00b\x00>\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fSt\ atus: \x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x18\x00<\x00b\x00>O\ \x8f\x93\x90\x1f^\xa6\x00<\x00/\x00b\x00>\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Tr\ ansfer rate:\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00R\ \x00<\x00c\x00e\x00n\x00t\x00e\x00r\x00>\ \x00D\x00o\x00 \x00y\x00o\x00u\x00 \x00w\ \x00a\x00n\x00t\x00 \x00t\x00o\x00 \x00c\ \x00o\x00n\x00t\x00i\x00n\x00u\x00e\x00?\ \x00<\x00/\x00c\x00e\x00n\x00t\x00e\x00r\ \x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00)Do you want \ to continue?\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00*\x00A\x00r\x00i\x00a\x002\x00 \ \x00d\x00i\x00d\x00 \x00n\x00o\x00t\x00 \ \x00r\x00e\x00s\x00p\x00o\x00n\x00d\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x15Aria2 di\ d not respond\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00,\x00A\x00r\ \x00i\x00a\x002\x00 \x00d\x00i\x00d\x00 \ \x00n\x00o\x00t\x00 \x00r\x00e\x00s\x00p\ \x00o\x00n\x00d\x00!\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x16Aria2 did not \ respond!\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00P\x00A\x00r\x00i\x00a\x00\ 2\x00 l\xa1g\x09T\xcd^\x94\xff\x01\x8b\xf7\x80\ \x10_\xc3{I_\x85\xff\x01\x00P\x00e\x00r\x00\ s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \x5c\ \x06W(\x00 \x002\x00 y\xd2T\x0eQ\x8dk\ !\x5c\x1d\x8b\xd5\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\ FAria2 didn't re\ spond! be patien\ t! Persepolis tr\ ies again in 2 s\ econds!\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x14\x00A\x00r\x00i\x00a\x002\ \x00 g*\x8f\xdec\xa5\xff\x01\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Aria2 discon\ nected!\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00*\x8b\xf7h\xc0g\xe5O`v\x84\ \x7fQ~\xdc^v\x91\xcdT/\x00 \x00P\x00e\ \x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\ \x08\x00\x00\x00\x00\x06\x00\x00\x00'Check \ your network & R\ estart Persepoli\ s\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x08\ N\x0b\x8f}[\x8cb\x10\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x11Download Compl\ ete\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00$\x00D\x00o\x00w\x00n\x00l\x00o\x00a\ \x00d\x00 \x00S\x00c\x00h\x00e\x00d\x00u\ \x00l\x00e\x00d\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12\ Download Schedul\ ed\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x08N\x0b\x8f}r\xb6`\x01\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0fDownload Star\ ts\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x0aN\x0b\x8f}]\xf2P\x5ckb\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Download St\ opped\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00P\x00D\x00o\x00w\x00n\x00l\x00o\ \x00a\x00d\x00 \x00i\x00s\x00 \x00i\x00n\ \x00 \x00p\x00r\x00o\x00g\x00r\x00e\x00s\ \x00s\x00 \x00b\x00y\x00 \x00v\x00i\x00d\ \x00e\x00o\x00 \x00f\x00i\x00n\x00d\x00e\ \x00r\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00(Do\ wnload is in pro\ gress by video f\ inder!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x0a\x95\x19\x8b\xef\x00 \x00-\x00 \x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x08Error -\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x0a\ \x95\x19\x8b\xef\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x08Error...\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x0a\x95\x19\x8b\xef\x00\ .\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07E\ rror: \x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x18\x00H\x00i\x00d\x00e\x00 \x00\ o\x00p\x00t\x00i\x00o\x00n\x00s\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0cHide opti\ ons\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00.\x00M\x00i\x00n\x00i\x00m\x00i\x00z\ \x00e\x00 \x00t\x00o\x00 \x00s\x00y\x00s\ \x00t\x00e\x00m\x00 \x00t\x00r\x00a\x00y\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x17Minimi\ ze to system tra\ y\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x12\ \x00M\x00o\x00v\x00i\x00n\x00g\x00 \x00i\ \x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Movi\ ng is\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x12\x00N\x00o\x00t\x00 \x00F\x00o\ \x00u\x00n\x00d\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ Not Found\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x002\x00N\x00o\x00t\x00 \ \x00e\x00n\x00o\x00u\x00g\x00h\x00 \x00f\ \x00r\x00e\x00e\x00 \x00s\x00p\x00a\x00c\ \x00e\x00 \x00i\x00n\x00:\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x19Not enough f\ ree space in:\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00:\x00O\x00p\ \x00e\x00r\x00a\x00t\x00i\x00o\x00n\x00 \ \x00w\x00a\x00s\x00 \x00n\x00o\x00t\x00 \ \x00s\x00u\x00c\x00c\x00e\x00s\x00s\x00f\ \x00u\x00l\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1d\ Operation was no\ t successful!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x90\x00O\x00p\ \x00e\x00r\x00a\x00t\x00i\x00o\x00n\x00 \ \x00w\x00a\x00s\x00 \x00n\x00o\x00t\x00 \ \x00s\x00u\x00c\x00c\x00e\x00s\x00s\x00f\ \x00u\x00l\x00!\x00 \x00P\x00l\x00e\x00a\ \x00s\x00e\x00 \x00s\x00t\x00o\x00p\x00 \ \x00t\x00h\x00e\x00 \x00f\x00o\x00l\x00l\ \x00o\x00w\x00i\x00n\x00g\x00 \x00c\x00a\ \x00t\x00e\x00g\x00o\x00r\x00y\x00 \x00f\ \x00i\x00r\x00s\x00t\x00:\x00 \x08\x00\x00\x00\ \x00\x06\x00\x00\x00HOperation \ was not successf\ ul! Please stop \ the following ca\ tegory first: \x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x0ad\xcdO\ \x5cY1\x8d%0\x02\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x1dOperation was n\ ot successful.\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x14\x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPerse\ polis\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00,\x00P\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x00 e\xe0l\xd5\x8f\xde\ c\xa5R0\x00 \x00A\x00r\x00i\x00a\x002\ \x08\x00\x00\x00\x00\x06\x00\x00\x00#Persep\ olis can not con\ nect to Aria2\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x1e\x00P\x00e\ \x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\ \x00 kcW(Qs\x95\xed\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x1bPersepolis i\ s shutting down\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00X\x00P\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\x00 \x00i\x00s\x00 \x00t\x00r\x00y\ \x00i\x00n\x00g\x00 \x00t\x00o\x00 \x00c\ \x00o\x00n\x00n\x00e\x00c\x00t\x00!\x00 \ \x00b\x00e\x00 \x00p\x00a\x00t\x00i\x00e\ \x00n\x00t\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00,\ Persepolis is tr\ ying to connect!\ be patient!\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00,\x00P\x00e\x00\ r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00\ kcW(\x5c\x1d\x8b\xd5\x8f\xdec\xa5\xff\x01\x8b\ \xf7z\x0d{I\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\ +Persepolis is t\ rying to connect\ !be patient!\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x000\x00P\x00e\x00\ r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00\ ]\xf2b\x10R\x9f\x91\xcde\xb0\x8f\xdec\xa5\x00\ \x00a\x00r\x00i\x00a\x002\x08\x00\x00\x00\x00\ \x06\x00\x00\x00)Persepolis \ reconnected aria\ 2 successfully\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x0c\x8b\xf7z\ \x0d{I\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0ePlease Wait..\ .\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00L\ \x00P\x00l\x00e\x00a\x00s\x00e\x00 \x00r\ \x00e\x00s\x00u\x00m\x00e\x00 \x00t\x00h\ \x00e\x00 \x00f\x00o\x00l\x00l\x00o\x00w\ \x00i\x00n\x00g\x00 \x00c\x00a\x00t\x00e\ \x00g\x00o\x00r\x00y\x00:\x00 \x08\x00\x00\x00\ \x00\x06\x00\x00\x00&Please res\ ume the followin\ g category: \x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00H\x00P\x00l\x00\ e\x00a\x00s\x00e\x00 \x00s\x00t\x00o\x00\ p\x00 \x00d\x00o\x00w\x00n\x00l\x00o\x00\ a\x00d\x00 \x00p\x00r\x00o\x00g\x00r\x00\ e\x00s\x00s\x00 \x00f\x00i\x00r\x00s\x00\ t\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00$Ple\ ase stop downloa\ d progress first\ .\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00T\ \x00P\x00l\x00e\x00a\x00s\x00e\x00 \x00s\ \x00t\x00o\x00p\x00 \x00t\x00h\x00e\x00 \ \x00f\x00o\x00l\x00l\x00o\x00w\x00i\x00n\ \x00g\x00 \x00c\x00a\x00t\x00e\x00g\x00o\ \x00r\x00y\x00 \x00f\x00i\x00r\x00s\x00t\ \x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00*Pl\ ease stop the fo\ llowing category\ first: \x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00H\x00P\x00l\x00e\x00a\x00\ s\x00e\x00 \x00s\x00t\x00o\x00p\x00 \x00\ t\x00h\x00e\x00 \x00f\x00o\x00l\x00l\x00\ o\x00w\x00i\x00n\x00g\x00 \x00c\x00a\x00\ t\x00e\x00g\x00o\x00r\x00y\x00:\x00 \x08\ \x00\x00\x00\x00\x06\x00\x00\x00$Please \ stop the followi\ ng category: \x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00T\x00P\x00l\ \x00e\x00a\x00s\x00e\x00 \x00s\x00t\x00o\ \x00p\x00 \x00t\x00h\x00e\x00 \x00f\x00o\ \x00l\x00l\x00o\x00w\x00i\x00n\x00g\x00 \ \x00d\x00o\x00w\x00n\x00l\x00o\x00a\x00d\ \x00 \x00f\x00i\x00r\x00s\x00t\x00:\x00 \ \x08\x00\x00\x00\x00\x06\x00\x00\x00*Please\ stop the follow\ ing download fir\ st: \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x22\x00P\x00l\x00e\x00a\x00s\x00e\x00\ \x00t\x00r\x00y\x00 \x00a\x00g\x00a\x00\ i\x00n\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11P\ lease try again.\ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00\x0c\x96\ \x1fR\x17]\xf2P\x5ckb\xff\x01\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0eQueue Stopp\ ed!\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x0a\x96\x1fR\x17[\x8cb\x10\xff\x01\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x10Queue comp\ leted!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x0aQ\xc6Y\x07\x00.\x00.\x00.\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x08Ready..\ .\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x1a\ \x91\xcde\xb0\x8f\xdec\xa5\x00 \x00a\x00r\x00i\ \x00a\x002\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x15Reconnecting\ Aria2...\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x1a\x91\xcdT/\x00 \x00P\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12Rest\ art Persepolis\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x004\x00S\x00\ e\x00n\x00d\x00 \x00s\x00e\x00l\x00e\x00\ c\x00t\x00e\x00d\x00 \x00d\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x00s\x00 \x00t\x00\ o\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aSend \ selected downloa\ ds to\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x0e\x00S\x00e\x00n\x00d\x00 \x00t\ \x00o\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Send\ to\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x0af>y:N;z\x97S\xe3\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x10Show main \ Window\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x18\x00S\x00h\x00o\x00w\x00 \x00\ o\x00p\x00t\x00i\x00o\x00n\x00s\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0cShow opti\ ons\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00V\x00S\x00o\x00m\x00e\x00 \x00i\x00t\ \x00e\x00m\x00s\x00 \x00d\x00i\x00d\x00n\ \x00'\x00t\x00 \x00t\x00r\x00a\x00n\x00s\ \x00f\x00e\x00r\x00r\x00e\x00d\x00 \x00s\ \x00u\x00c\x00c\x00e\x00s\x00s\x00f\x00u\ \x00l\x00l\x00y\x00!\x08\x00\x00\x00\x00\x06\x00\x00\ \x00+Some items did\ n't transferred \ successfully!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x0e\x00S\x00o\ \x00r\x00t\x00 \x00b\x00y\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x07Sort by\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x002\x00S\x00t\x00o\ \x00p\x00 \x00a\x00l\x00l\x00 \x00d\x00o\ \x00w\x00n\x00l\x00o\x00a\x00d\x00s\x00 \ \x00f\x00i\x00r\x00s\x00t\x00!\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x19Stop all d\ ownloads first!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00F\x00S\ \x00t\x00o\x00p\x00 \x00t\x00h\x00e\x00 \ \x00f\x00o\x00l\x00l\x00o\x00w\x00i\x00n\ \x00g\x00 \x00d\x00o\x00w\x00n\x00l\x00o\ \x00a\x00d\x00 \x00f\x00i\x00r\x00s\x00t\ \x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00#St\ op the following\ download first:\ \x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x12\ \x00T\x00r\x00y\x00 \x00a\x00g\x00a\x00i\ \x00n\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Try \ again\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x14\x00T\x00r\x00y\x00 \x00a\x00g\ \x00a\x00i\x00n\x00!\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0aTry again!\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x08S\xd1u\x1f\x95\ \x19\x8b\xef\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11an \ error occurred\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x16\x00b\x00\ e\x00 \x00p\x00a\x00t\x00i\x00e\x00n\x00\ t\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bbe \ patient!\x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x000\x00f\x00f\x00m\x00p\x00\ e\x00g\x00 \x00i\x00s\x00 \x00n\x00o\x00\ t\x00 \x00i\x00n\x00s\x00t\x00a\x00l\x00\ l\x00e\x00d\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x18ffmpeg is not i\ nstalled!\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x12\x00f\x00i\x00n\x00i\ \x00s\x00h\x00e\x00d\x00!\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x09finished!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x18\x00m\x00u\ \x00x\x00i\x00n\x00g\x00 \x00e\x00r\x00r\ \x00o\x00r\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cmu\ xing error\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x12O`v\x84|\xfb~\ \xdfW(\x002\x000y\xd2Q\x85\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x19your system\ in 20 seconds\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00\x16\x00 \x00\ d\x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00\ e\x00d\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b do\ wnloaded\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x06\x00&N\x0b\x8f}\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x09&Download\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x06\x00&\x7f\x16\x8f\x91\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05&Edit\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x06\x00&e\x87N\xf6\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05&File\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x06\x00&^.R\xa9\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05&Help\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x0c\x00&\x00Q\x00u\x00e\x00\ u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06&Qu\ eue\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x0a\x00&\ \x00V\x00i\x00e\x00w\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x05&View\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x1c\x00<\x00b\x00>\x97\xf3\x98\x91e\x87N\xf6\ r\xb6`\x01\xff\x1a\x00<\x00/\x00b\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1aAudio\ File Status: \x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x004\x00<\x00\ b\x00>\x00A\x00u\x00d\x00i\x00o\x00 \x00\ f\x00i\x00l\x00e\x00 \x00s\x00t\x00a\x00\ t\x00u\x00s\x00:\x00 \x00<\x00/\x00b\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aAu\ dio file status:\ \x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00,\ \x00<\x00b\x00>\x00M\x00u\x00x\x00i\x00n\ \x00g\x00 \x00s\x00t\x00a\x00t\x00u\x00s\ \x00:\x00 \x00<\x00/\x00b\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x16Muxing \ status: \x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x1e\x00<\x00b\x00>\x00S\x00\ t\x00a\x00t\x00u\x00s\x00:\x00 \x00<\x00\ /\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0f<\ b>Status: \x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x1c\x00<\x00b\x00>\x89\ \xc6\x98\x91e\x87N\xf6r\xb6`\x01\xff\x1a\x00<\x00\ /\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1a<\ b>Video File Sta\ tus: \x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x004\x00<\x00b\x00>\x00V\x00i\x00d\ \x00e\x00o\x00 \x00f\x00i\x00l\x00e\x00 \ \x00s\x00t\x00a\x00t\x00u\x00s\x00:\x00 \ \x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x1aVideo file \ status: \x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00Nkd\x90\x09\x98y\x5c\x06\x96\ ;kb|\xfb~\xdf\x8f\xdbQewaw r\ \xb6`\x010\x02\x00 Y\x82g\x9c`\xa8v\x84u\ 5n\x90{\xa1t\x06Vh\x81\xeaR\xa8f\x82P\ \x5c|\xfb~\xdf\xff\x0c\x8b\xf7bS_\x00kd\x90\ \x09\x98y0\x02\x08\x00\x00\x00\x00\x06\x00\x00\x00\xba<\ html>

This option\ will prevent th\ e system from go\ ing to sleep. \ It is n\ ecessary if your\ power manager i\ s suspending the\ system automati\ cally.

\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0a\x00A\x00b\x00o\x00u\x00t\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x05About\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0c\x00A\x00c\x00t\x00i\ \x00v\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Ac\ tive\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x0ce\ \xb0^\xfaN\x0b\x8f}\x94\xfec\xa5\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x15Add New Dow\ nload Link\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x12e\xb0^\xfaN\x0b\x8f}\x94\xfec\ \xa5\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x18Add New Downloa\ d Link...\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x1c\x00A\x00f\x00t\x00e\x00r\x00 \ \x00d\x00o\x00w\x00n\x00l\x00o\x00a\x00d\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eAfter \ download\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x0a\x00A\x00p\x00p\x00l\x00y\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x05Apply\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x10\x00C\x00a\x00t\x00e\x00\ g\x00o\x00r\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x08Category\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0cn\x05\x96dN\x0b\x8f}R\x17\x88h\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Clear \ Download List\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00@\x00C\x00l\x00e\x00a\ \x00r\x00 \x00a\x00l\x00l\x00 \x00i\x00t\ \x00e\x00m\x00s\x00 \x00i\x00n\x00 \x00d\ \x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00 \ \x00l\x00i\x00s\x00t\x08\x00\x00\x00\x00\x06\x00\x00\ \x00 Clear all item\ s in download li\ st\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x10\x00C\x00\ o\x00m\x00p\x00l\x00e\x00t\x00e\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08Complete\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x16\x00C\x00o\x00n\ \x00n\x00e\x00c\x00t\x00i\x00o\x00n\x00s\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bConnec\ tions\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x0a\ R\x1b^\xfae\xb0R\x17\x96\x1f\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Create New Q\ ueue...\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x002\x00C\x00r\x00e\x00a\x00t\x00e\x00 \ \x00n\x00e\x00w\x00 \x00d\x00o\x00w\x00n\ \x00l\x00o\x00a\x00d\x00 \x00q\x00u\x00e\ \x00u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Cr\ eate new downloa\ d queue\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x12R \x96d\x90\x09N-v\x84N\x0b\x8f}\ e\x87N\xf6\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eDe\ lete Selected Do\ wnload Files\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x10\x00D\x00o\x00w\x00n\x00\ l\x00o\x00a\x00d\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x08Download\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x08N\x0b\x8f}r\xb6`\x01\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0fDownload S\ tatus\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00D\ \x00D\x00o\x00w\x00n\x00l\x00o\x00a\x00d\ \x00 \x00b\x00o\x00t\x00t\x00o\x00m\x00 \ \x00o\x00f\x00\x0a\x00 \x00t\x00h\x00e\x00 \ \x00l\x00i\x00s\x00t\x00 \x00f\x00i\x00r\ \x00s\x00t\x08\x00\x00\x00\x00\x06\x00\x00\x00\x22Do\ wnload bottom of\ \x0a the list first\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00,N\xce\x00 \x00\ Y\x00o\x00u\x00t\x00u\x00b\x00e\x00 S\ \xcaQvN\xd6\x7fQz\xd9N\x0b\x8f}\x89\xc6\x98\ \x91b\x16\x97\xf3\x98\x91\x08\x00\x00\x00\x00\x06\x00\x00\x00\ 1Download video \ or audio from Yo\ utube, Vimeo, et\ c.\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x14\x00D\x00\ o\x00w\x00n\x00l\x00o\x00a\x00d\x00e\x00\ d\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aDownl\ oaded\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x08\ \x00E\x00d\x00i\x00t\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x04Edit\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x10\x00E\x00n\x00d\x00 \x00T\x00i\x00m\x00\ e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08End T\ ime\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x04\x95\x19\ \x8b\xef\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Erro\ r\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x0e\x98\x84\x8b\xa1\ RiOYe\xf6\x95\xf4\xff\x1a\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Estimated Ti\ me Left\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x08\x00E\x00x\x00i\x00t\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x04Exit\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x08\x00F\x00i\x00l\x00e\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x04File\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x12\x00F\x00i\x00l\x00e\x00 \x00N\ \x00a\x00m\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ File Name\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x08e\x87N\xf6Y'\x5c\x0f\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x09File Size\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x12g\xe5b~\x89\xc6\ \x98\x91\x94\xfec\xa5\x00.\x00.\x00.\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x13Find Video\ Links...\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0c\x99\x96k!\x5c\x1d\x8b\xd5e\xe5g\x1f\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eFirst \ Try Date\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x08\x00H\x00e\x00l\x00p\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x04Help\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x08\x96\x90\x85\xcf\x90\x09\x98y\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0cHide Optio\ ns\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x14N\xcee\ \x87g,[\xfcQe\x94\xfec\xa5\x00.\x00.\x00\ .\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eImpor\ t Links from Tex\ t File...\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0e\x96;kb|\xfb~\xdfwaw \ \xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12Keep\ System Awake!\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x0cg\x00T\x0e\x5c\x1d\x8b\ \xd5e\xe5g\x1f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dL\ ast Try Date\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x16\x00L\x00i\x00m\x00i\x00\ t\x00 \x00S\x00p\x00e\x00e\x00d\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0bLimit Spe\ ed\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x08\x00L\x00\ i\x00n\x00k\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04L\ ink\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x10g\x00\ \x5c\x0fS\x16R0|\xfb~\xdfbXv\xd8\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x17Minimize\ to System Tray\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00&\x5c\x06b@\x90\x09\ v\x84N\x0b\x8f}e\x87N\xf6y\xfbR\xa8\x81\xf3\ QvN\xd6e\x87N\xf6Y9\x00.\x00.\x00.\ \x08\x00\x00\x00\x00\x06\x00\x00\x00.Move S\ elected Download\ Files to Anothe\ r Folder\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00&\x5c\x06b@\x90\x09v\x84N\x0b\x8f}e\ \x87N\xf6y\xfbR\xa8\x81\xf3QvN\xd6e\x87N\ \xf6Y9\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\ \x00\x001Move Selected\ Download Files \ to Another Folde\ r...\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x0cN\ \x0by\xfbb@\x90\x09\x98yv\xee\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x18Move Select\ ed Items Down\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0cN\x0ay\xfbb@\x90\x09\ \x98yv\xee\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Mo\ ve Selected Item\ s Up\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00Z\x00\ M\x00o\x00v\x00e\x00 \x00c\x00u\x00r\x00\ r\x00e\x00n\x00t\x00l\x00y\x00 \x00s\x00\ e\x00l\x00e\x00c\x00t\x00e\x00d\x00 \x00\ i\x00t\x00e\x00m\x00s\x00 \x00d\x00o\x00\ w\x00n\x00 \x00b\x00y\x00 \x00o\x00n\x00\ e\x00 \x00r\x00o\x00w\x08\x00\x00\x00\x00\x06\x00\ \x00\x00-Move currentl\ y selected items\ down by one row\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00V\x00M\x00o\x00\ v\x00e\x00 \x00c\x00u\x00r\x00r\x00e\x00\ n\x00t\x00l\x00y\x00 \x00s\x00e\x00l\x00\ e\x00c\x00t\x00e\x00d\x00 \x00i\x00t\x00\ e\x00m\x00s\x00 \x00u\x00p\x00 \x00b\x00\ y\x00 \x00o\x00n\x00e\x00 \x00r\x00o\x00\ w\x08\x00\x00\x00\x00\x06\x00\x00\x00+Move \ currently select\ ed items up by o\ ne row\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x14\x00N\x00o\x00t\x00 \x00A\x00c\x00t\x00\ i\x00v\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aN\ ot Active\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x12bS_\x00\x9e\xd8\x8b\xa4N\x0b\x8f}\ e\x87N\xf6Y9\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1c\ Open Default Dow\ nload Folder\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x0ebS_\x00N\x0b\x8f}e\ \x87N\xf6Y9\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14O\ pen Download Fol\ der\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x0ebS\ _\x00e\x87N\xf6\x00.\x00.\x00.\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0cOpen File.\ ..\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x1c\x00P\x00\ a\x00u\x00s\x00e\x00 \x00D\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0ePause Downloa\ d\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x14\x00P\x00e\ \x00r\x00c\x00e\x00n\x00t\x00a\x00g\x00e\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPercen\ tage\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x006\x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\x00 \x00D\x00o\x00w\x00n\x00l\x00\ o\x00a\x00d\x00 \x00M\x00a\x00n\x00a\x00\ g\x00e\x00r\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bP\ ersepolis Downlo\ ad Manager\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x16\x00P\x00r\x00e\x00f\x00e\x00\ r\x00e\x00n\x00c\x00e\x00s\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0bPreferences\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x10\x00P\x00r\x00\ o\x00g\x00r\x00e\x00s\x00s\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x08Progress\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x14\x00P\x00r\x00o\x00p\ \x00e\x00r\x00t\x00i\x00e\x00s\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0aProperties\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0a\x00Q\x00u\x00\ e\x00u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Q\ ueue\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x0a]\ \xf2Q\xfakdR\x17\x96\x1f\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0cRemove Queue\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x14R \x96dR\x17\ \x88hN-b@\x90\x09v\x84N\x0b\x8f}\x08\x00\ \x00\x00\x00\x06\x00\x00\x00#Remove S\ elected Download\ s from List\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x22\x00R\x00e\x00m\x00o\x00v\ \x00e\x00 \x00t\x00h\x00i\x00s\x00 \x00q\ \x00u\x00e\x00u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x11Remove this qu\ eue\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x08N\x0a\ b\xa5\x95\xee\x98\x98\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0f\ Report an Issue\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x1e\x00R\x00e\x00p\ \x00o\x00r\x00t\x00 \x00a\x00n\x00 \x00i\ \x00s\x00s\x00u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0fReport an issu\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x1e\x00R\x00e\ \x00s\x00u\x00m\x00e\x00 \x00D\x00o\x00w\ \x00n\x00l\x00o\x00a\x00d\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0fResume Downl\ oad\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x0cbS\ _\x00e\xe5_\xd7e\x87N\xf6\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0dShow Log Fil\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x0af>y:\ \x83\xdcSUh\x0f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\ Show Menubar\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x0af>y:O\xa7\x8f\xb9h\ \x0f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fShow \ Side Panel\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x10f>y:|\xfb~\xdfbXv\ \xd8V\xfeh\x07\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15S\ how System Tray \ Icon\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x16f\ >y:\x00/\x96\x90\x85\xcf|\xfb~\xdfbXv\ \xd8V\xfeh\x07\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aS\ how/Hide system \ tray icon\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x12\x00S\x00h\x00u\x00t\x00 \x00D\ \x00o\x00w\x00n\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ Shut Down\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x08\x00S\x00i\x00z\x00e\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x04Size\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x0e\x00S\x00o\x00r\x00t\x00 \x00\ b\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Sor\ t by\x07\x00\x00\x00\x10mainwin\ dow_ui_tr\x01\x03\x00\x00\x00\x0a_\ \x00Y\xcbkdR\x17\x96\x1f\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0bStart Queue\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x14\x00S\x00t\x00a\x00\ r\x00t\x00 \x00T\x00i\x00m\x00e\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0aStart Tim\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00 \x00S\x00t\ \x00a\x00r\x00t\x00 \x00t\x00h\x00i\x00s\ \x00 \x00q\x00u\x00e\x00u\x00e\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x10Start this\ queue\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x0e\x00S\x00t\x00a\x00r\x00t\x00e\x00d\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x07Started\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0c\x00S\x00t\x00\ a\x00t\x00u\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x06Status\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x10P\x5ckbb@g\x09m;R\xa8N\x0b\ \x8f}\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Stop\ All Active Down\ loads\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x1a\ \x00S\x00t\x00o\x00p\x00 \x00D\x00o\x00w\ \x00n\x00l\x00o\x00a\x00d\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0dStop Downloa\ d\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x0aP\x5ckb\ kdR\x17\x96\x1f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0a\ Stop Queue\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x1e\x00S\x00t\x00o\x00p\x00 \x00\ t\x00h\x00i\x00s\x00 \x00q\x00u\x00e\x00\ u\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fSto\ p this queue\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00(\x00S\x00t\x00o\x00p\x00\ /\x00C\x00a\x00n\x00c\x00e\x00l\x00 \x00\ D\x00o\x00w\x00n\x00l\x00o\x00a\x00d\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x14Stop/Ca\ ncel Download\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0aO \x8f\x93\x90\x1fs\x87\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dTran\ sfer Rate\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x1a\x00V\x00&\x00i\x00d\x00e\x00o\ \x00 \x00F\x00i\x00n\x00d\x00e\x00r\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0dV&ideo F\ inder\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x18\ \x00V\x00i\x00d\x00e\x00o\x00 \x00F\x00i\ \x00n\x00d\x00e\x00r\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0cVideo Finder\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x08\x00V\x00i\x00e\x00\ w\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04View\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00,\x00A\x00r\x00i\ \x00a\x002\x00 \x00d\x00i\x00d\x00 \x00n\ \x00o\x00t\x00 \x00r\x00e\x00s\x00p\x00o\ \x00n\x00d\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Aria2 did not re\ spond!\x07\x00\x00\x00\x12progr\ ess_src_ui_tr\x01\x03\x00\ \x00\x00&\x00A\x00r\x00i\x00a\x002\x00 \x00\ d\x00i\x00s\x00c\x00o\x00n\x00n\x00e\x00\ c\x00t\x00e\x00d\x00!\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x13Aria2 disconn\ ected!\x07\x00\x00\x00\x12progr\ ess_src_ui_tr\x01\x03\x00\ \x00\x00X\x00P\x00e\x00r\x00s\x00e\x00p\x00\ o\x00l\x00i\x00s\x00 \x00i\x00s\x00 \x00\ t\x00r\x00y\x00i\x00n\x00g\x00 \x00t\x00\ o\x00 \x00c\x00o\x00n\x00n\x00e\x00c\x00\ t\x00!\x00 \x00b\x00e\x00 \x00p\x00a\x00\ t\x00i\x00e\x00n\x00t\x00!\x08\x00\x00\x00\x00\ \x06\x00\x00\x00,Persepolis \ is trying to con\ nect! be patient\ !\x07\x00\x00\x00\x12progress_s\ rc_ui_tr\x01\x03\x00\x00\x00\x22\x00P\ \x00l\x00e\x00a\x00s\x00e\x00 \x00t\x00r\ \x00y\x00 \x00a\x00g\x00a\x00i\x00n\x00.\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Please\ try again.\x07\x00\x00\x00\x12\ progress_src_ui_\ tr\x01\x03\x00\x00\x00\x14\x00T\x00r\x00y\x00 \ \x00a\x00g\x00a\x00i\x00n\x00!\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0aTry again!\ \x07\x00\x00\x00\x12progress_sr\ c_ui_tr\x01\x03\x00\x00\x00\x1c\x00A\x00\ f\x00t\x00e\x00r\x00 \x00d\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0eAfter downloa\ d\x07\x00\x00\x00\x0eprogress_u\ i_tr\x01\x03\x00\x00\x00\x0a\x00A\x00p\x00p\ \x00l\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Ap\ ply\x07\x00\x00\x00\x0eprogress\ _ui_tr\x01\x03\x00\x00\x00(\x00D\x00o\ \x00w\x00n\x00l\x00o\x00a\x00d\x00 \x00I\ \x00n\x00f\x00o\x00r\x00m\x00a\x00t\x00i\ \x00o\x00n\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14Do\ wnload Informati\ on\x07\x00\x00\x00\x0eprogress_\ ui_tr\x01\x03\x00\x00\x00 \x00D\x00o\x00\ w\x00n\x00l\x00o\x00a\x00d\x00 \x00O\x00\ p\x00t\x00i\x00o\x00n\x00s\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Download Op\ tions\x07\x00\x00\x00\x0eprogre\ ss_ui_tr\x01\x03\x00\x00\x00\x16\x00D\ \x00o\x00w\x00n\x00l\x00o\x00a\x00d\x00e\ \x00d\x00:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bDo\ wnloaded:\x07\x00\x00\x00\x0epr\ ogress_ui_tr\x01\x03\x00\x00\ \x00(\x00E\x00s\x00t\x00i\x00m\x00a\x00t\ \x00e\x00d\x00 \x00t\x00i\x00m\x00e\x00 \ \x00l\x00e\x00f\x00t\x00:\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x14Estimated ti\ me left:\x07\x00\x00\x00\x0epro\ gress_ui_tr\x01\x03\x00\x00\x00\ \x04\x96P\x90\x1f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bL\ imit speed\x07\x00\x00\x00\x0ep\ rogress_ui_tr\x01\x03\x00\ \x00\x00\x06\x94\xfec\xa5\xff\x1a\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x06Link: \x07\x00\x00\x00\x0epr\ ogress_ui_tr\x01\x03\x00\x00\ \x00\x08\x8f\xdec\xa5ep\xff\x1a\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x17Number of co\ nnections: \x07\x00\x00\x00\x0e\ progress_ui_tr\x01\x03\ \x00\x00\x00\x0a\x00P\x00a\x00u\x00s\x00e\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x05Pause\x07\x00\x00\ \x00\x0eprogress_ui_tr\ \x01\x03\x00\x00\x006\x00P\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\x00 \x00D\x00o\ \x00w\x00n\x00l\x00o\x00a\x00d\x00 \x00M\ \x00a\x00n\x00a\x00g\x00e\x00r\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x1bPersepolis\ Download Manage\ r\x07\x00\x00\x00\x0eprogress_u\ i_tr\x01\x03\x00\x00\x00\x0c\x00R\x00e\x00s\ \x00u\x00m\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06\ Resume\x07\x00\x00\x00\x0eprogr\ ess_ui_tr\x01\x03\x00\x00\x00\x12\x00\ S\x00h\x00u\x00t\x00 \x00D\x00o\x00w\x00\ n\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Shut \ Down\x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00\x10\x00S\x00\ t\x00a\x00t\x00u\x00s\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08Status: \x07\ \x00\x00\x00\x0eprogress_ui_\ tr\x01\x03\x00\x00\x00\x08\x00S\x00t\x00o\x00p\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x04Stop\x07\x00\ \x00\x00\x0eprogress_ui_t\ r\x01\x03\x00\x00\x00\x1e\x00T\x00r\x00a\x00n\x00\ s\x00f\x00e\x00r\x00 \x00r\x00a\x00t\x00\ e\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fT\ ransfer rate: \x07\x00\ \x00\x00\x0eprogress_ui_t\ r\x01\x03\x00\x00\x00\xf6\x00<\x00b\x00>\x00<\x00\ c\x00e\x00n\x00t\x00e\x00r\x00>\x00R\x00\ e\x00s\x00t\x00a\x00r\x00t\x00 \x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00 \x00P\x00l\x00e\x00a\x00s\x00e\x00\ !\x00<\x00/\x00c\x00e\x00n\x00t\x00e\x00\ r\x00>\x00<\x00/\x00b\x00>\x00<\x00b\x00\ r\x00>\x00<\x00c\x00e\x00n\x00t\x00e\x00\ r\x00>\x00S\x00o\x00m\x00e\x00 \x00c\x00\ h\x00a\x00n\x00g\x00e\x00s\x00 \x00t\x00\ a\x00k\x00e\x00 \x00e\x00f\x00f\x00e\x00\ c\x00t\x00 \x00a\x00f\x00t\x00e\x00r\x00\ \x00r\x00e\x00s\x00t\x00a\x00r\x00t\x00\ i\x00n\x00g\x00 \x00P\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x00<\x00/\x00\ c\x00e\x00n\x00t\x00e\x00r\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00{Restart Persep\ olis Please!
Some change\ s take effect af\ ter restarting P\ ersepolis\x07\x00\x00\x00\x11setting_s\ rc_ui_tr\x01\x03\x00\x00\x00\xbe\x00<\ \x00b\x00>\x00<\x00c\x00e\x00n\x00t\x00e\ \x00r\x00>\x00T\x00h\x00i\x00s\x00 \x00s\ \x00h\x00o\x00r\x00t\x00c\x00u\x00t\x00 \ \x00h\x00a\x00s\x00 \x00b\x00e\x00e\x00n\ \x00 \x00u\x00s\x00e\x00d\x00 \x00b\x00e\ \x00f\x00o\x00r\x00e\x00!\x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00U\x00s\x00e\x00 \x00a\x00n\x00o\ \x00t\x00h\x00e\x00r\x00 \x00o\x00n\x00e\ \x00!\x00<\x00/\x00c\x00e\x00n\x00t\x00e\ \x00r\x00>\x00<\x00/\x00b\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00_This shortcut h\ as been used bef\ ore! \ Use anot\ her one!\x07\x00\x00\x00\x11settin\ g_src_ui_tr\x01\x03\x00\x00\x00\ &\x00R\x00e\x00s\x00t\x00a\x00r\x00t\x00\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00\ l\x00i\x00s\x00!\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x13Restart Persepo\ lis!\x07\x00\x00\x00\x11setting\ _src_ui_tr\x01\x03\x00\x00\x01*\ \x00<\x00h\x00t\x00m\x00l\x00>\x00<\x00h\ \x00e\x00a\x00d\x00/\x00>\x00<\x00b\x00o\ \x00d\x00y\x00>\x00<\x00p\x00>\x00 \x00S\ \x00p\x00e\x00c\x00i\x00f\x00y\x00 \x00a\ \x00 \x00p\x00o\x00r\x00t\x00 \x00n\x00u\ \x00m\x00b\x00e\x00r\x00 \x00f\x00o\x00r\ \x00 \x00J\x00S\x00O\x00N\x00-\x00R\x00P\ \x00C\x00/\x00X\x00M\x00L\x00-\x00R\x00P\ \x00C\x00 \x00s\x00e\x00r\x00v\x00e\x00r\ \x00 \x00t\x00o\x00 \x00l\x00i\x00s\x00t\ \x00e\x00n\x00 \x00t\x00o\x00.\x00 \x00P\ \x00o\x00s\x00s\x00i\x00b\x00l\x00e\x00 \ \x00V\x00a\x00l\x00u\x00e\x00s\x00:\x00 \ \x001\x000\x002\x004\x00 \x00-\x00 \x006\ \x005\x005\x003\x005\x00 \x00D\x00e\x00f\ \x00a\x00u\x00l\x00t\x00:\x00 \x006\x008\ \x000\x001\x00 \x00<\x00/\x00p\x00>\x00<\ \x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\ \x00h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x95

Speci\ fy a port number\ for JSON-RPC/XM\ L-RPC server to \ listen to. Possi\ ble Values: 1024\ - 65535 Default\ : 6801

\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ h\x00<\x00h\x00t\x00m\x00l\x00>\x00<\x00\ h\x00e\x00a\x00d\x00/\x00>\x00<\x00b\x00\ o\x00d\x00y\x00>\x00<\x00p\x00>\x00F\x00\ o\x00r\x00m\x00a\x00t\x00 \x00H\x00H\x00\ :\x00M\x00M\x00<\x00/\x00p\x00>\x00<\x00\ /\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00\ h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\x00\x06\x00\ \x00\x004\

Format \ HH:MM

\ \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x9e\x00\ <\x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00\ e\x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00\ d\x00y\x00>\x00<\x00p\x00>\x00S\x00e\x00\ t\x00 \x00n\x00u\x00m\x00b\x00e\x00r\x00\ \x00o\x00f\x00 \x00t\x00r\x00i\x00e\x00\ s\x00 \x00i\x00f\x00 \x00d\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x00 \x00f\x00a\x00\ i\x00l\x00e\x00d\x00.\x00<\x00/\x00p\x00\ >\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00\ <\x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00O

Set\ number of tries\ if download fai\ led.

<\ /html>\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x01X\x00<\ \x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\ \x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\ \x00y\x00>\x00<\x00p\x00>\x00S\x00e\x00t\ \x00 \x00t\x00h\x00e\x00 \x00s\x00e\x00c\ \x00o\x00n\x00d\x00s\x00 \x00t\x00o\x00 \ \x00w\x00a\x00i\x00t\x00 \x00b\x00e\x00t\ \x00w\x00e\x00e\x00n\x00 \x00r\x00e\x00t\ \x00r\x00i\x00e\x00s\x00.\x00 \x00D\x00o\ \x00w\x00n\x00l\x00o\x00a\x00d\x00 \x00m\ \x00a\x00n\x00a\x00g\x00e\x00r\x00 \x00w\ \x00i\x00l\x00l\x00 \x00 \x00r\x00e\x00t\ \x00r\x00y\x00 \x00 \x00d\x00o\x00w\x00n\ \x00l\x00o\x00a\x00d\x00s\x00 \x00 \x00w\ \x00h\x00e\x00n\x00 \x00 \x00t\x00h\x00e\ \x00 \x00 \x00H\x00T\x00T\x00P\x00 \x00 \ \x00s\x00e\x00r\x00v\x00e\x00r\x00 \x00 \ \x00r\x00e\x00t\x00u\x00r\x00n\x00s\x00 \ \x00 \x00a\x00 \x00 \x005\x000\x003\x00 \ \x00r\x00e\x00s\x00p\x00o\x00n\x00s\x00e\ \x00.\x00<\x00/\x00p\x00>\x00<\x00/\x00b\ \x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\ \x00m\x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\xac\

Set the se\ conds to wait be\ tween retries. D\ ownload manager \ will retry dow\ nloads when th\ e HTTP server \ returns a 503\ response.

\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x80\x00<\x00h\x00t\x00m\x00l\x00>\ \x00<\x00h\x00e\x00a\x00d\x00/\x00>\x00<\ \x00b\x00o\x00d\x00y\x00>\x00<\x00p\x00>\ \x00S\x00e\x00t\x00 \x00t\x00i\x00m\x00e\ \x00o\x00u\x00t\x00 \x00i\x00n\x00 \x00s\ \x00e\x00c\x00o\x00n\x00d\x00s\x00.\x00 \ \x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\ \x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\ \x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00@

Set timeout \ in seconds.

\ \x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\xb6\x00<\x00h\x00t\x00m\x00l\ \x00>\x00<\x00h\x00e\x00a\x00d\x00/\x00>\ \x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00p\ \x00>\x00T\x00h\x00i\x00s\x00 \x00f\x00e\ \x00a\x00t\x00u\x00r\x00e\x00 \x00m\x00a\ \x00y\x00 \x00n\x00o\x00t\x00 \x00w\x00o\ \x00r\x00k\x00 \x00i\x00n\x00 \x00y\x00o\ \x00u\x00r\x00 \x00o\x00p\x00e\x00r\x00a\ \x00t\x00i\x00n\x00g\x00 \x00s\x00y\x00s\ \x00t\x00e\x00m\x00.\x00<\x00/\x00p\x00>\ \x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\ \x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00[

This\ feature may not\ work in your op\ erating system.<\ /p>\x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\xc6\x00<\x00h\x00t\x00\ m\x00l\x00>\x00<\x00h\x00e\x00a\x00d\x00\ /\x00>\x00<\x00b\x00o\x00d\x00y\x00>\x00\ <\x00p\x00>\x00U\x00s\x00i\x00n\x00g\x00\ \x00m\x00u\x00l\x00t\x00i\x00p\x00l\x00\ e\x00 \x00c\x00o\x00n\x00n\x00e\x00c\x00\ t\x00i\x00o\x00n\x00s\x00 \x00c\x00a\x00\ n\x00 \x00h\x00e\x00l\x00p\x00 \x00s\x00\ p\x00e\x00e\x00d\x00 \x00u\x00p\x00 \x00\ y\x00o\x00u\x00r\x00 \x00d\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x00.\x00<\x00/\x00\ p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00\ >\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x08\ \x00\x00\x00\x00\x06\x00\x00\x00c<\ head/>

U\ sing multiple co\ nnections can he\ lp speed up your\ download.

\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0c\x00A\x00c\x00t\x00i\x00o\x00n\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Action\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x0ce\xb0^\xfaN\x0b\x8f}\ \x94\xfec\xa5\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15Ad\ d New Download L\ ink\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x0ce\xb0^\xfa\x89\ \xc6\x98\x91\x94\xfec\xa5\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x12Add New Video L\ ink\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x0c\x00C\x00a\x00\ n\x00c\x00e\x00l\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x06Cancel\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x10\x00\ C\x00a\x00t\x00e\x00g\x00o\x00r\x00y\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x08Categor\ y\x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x0c\x00C\x00h\x00a\x00\ n\x00g\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06C\ hange\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x002\x00C\x00\ h\x00a\x00n\x00g\x00e\x00 \x00A\x00r\x00\ i\x00a\x002\x00 \x00d\x00e\x00f\x00a\x00\ u\x00l\x00t\x00 \x00p\x00a\x00t\x00h\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x19Change \ Aria2 default pa\ th\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x1c\x00C\x00o\x00l\ \x00o\x00r\x00 \x00s\x00c\x00h\x00e\x00m\ \x00e\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0e\ Color scheme: \x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x08\x81\xea[\x9aNIR\x17\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x15Columns \ Customization\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x16\x00C\x00o\x00n\x00n\x00e\x00\ c\x00t\x00i\x00o\x00n\x00s\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0bConnections\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x10\x00D\x00e\x00f\x00a\ \x00u\x00l\x00t\x00s\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x08Defaults\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00 \x00D\x00o\x00w\x00n\x00l\x00o\x00a\ \x00d\x00 \x00O\x00p\x00t\x00i\x00o\x00n\ \x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Down\ load Options\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0cN\x0b\x8f}e\x87N\xf6Y9\xff\x1a\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Downlo\ ad folder: \x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x14\x00D\x00o\x00w\x00n\x00l\x00o\x00\ a\x00d\x00e\x00d\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0aDownloaded\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x0cbS_\x00\x90\x1aw\xe5\x97\xf3eH\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x1aEnable \ Notification Sou\ nds\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x10T/u(|\ \xfb~\xdfbXv\xd8V\xfeh\x07\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x17Enable syst\ em tray icon\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0e\x98\x84\x8b\xa1RiOYe\xf6\x95\xf4\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Esti\ mated Time Left\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x12\x00F\x00i\x00l\x00e\x00\ \x00N\x00a\x00m\x00e\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x09File Name\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0c\x00F\x00o\x00n\x00t\x00:\x00 \ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Font: \ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00R\x00H\x00i\x00d\x00e\ \x00 \x00m\x00a\x00i\x00n\x00 \x00w\x00i\ \x00n\x00d\x00o\x00w\x00 \x00i\x00f\x00 \ \x00c\x00l\x00o\x00s\x00e\x00 \x00b\x00u\ \x00t\x00t\x00o\x00n\x00 \x00c\x00l\x00i\ \x00c\x00k\x00e\x00d\x00.\x08\x00\x00\x00\x00\x06\ \x00\x00\x00)Hide main wi\ ndow if close bu\ tton clicked.\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x0e\x00I\x00c\x00o\x00n\x00s\x00\ :\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Ico\ ns: \x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x0eN\xcee\x87\ g,[\xfcQe\x94\xfec\xa5\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x1bImport Links\ from Text File\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00$\x00K\x00e\x00e\x00p\x00\ \x00s\x00y\x00s\x00t\x00e\x00m\x00 \x00\ a\x00w\x00a\x00k\x00e\x00!\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x12Keep system\ awake!\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x06\x8b\ \xed\x8a\x00\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aL\ anguage: \x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \xd0\x00M\x00a\x00x\x00i\x00m\x00u\x00m\x00\ \x00n\x00u\x00m\x00b\x00e\x00r\x00 \x00\ o\x00f\x00 \x00l\x00i\x00n\x00k\x00s\x00\ \x00t\x00o\x00 \x00c\x00a\x00p\x00t\x00\ u\x00r\x00e\x00:\x00<\x00b\x00r\x00/\x00\ >\x00<\x00s\x00m\x00a\x00l\x00l\x00>\x00\ (\x00I\x00f\x00 \x00b\x00r\x00o\x00w\x00\ s\x00e\x00r\x00 \x00s\x00e\x00n\x00d\x00\ s\x00 \x00m\x00u\x00l\x00t\x00i\x00p\x00\ l\x00e\x00 \x00v\x00i\x00d\x00e\x00o\x00\ \x00l\x00i\x00n\x00k\x00s\x00 \x00a\x00\ t\x00 \x00a\x00 \x00t\x00i\x00m\x00e\x00\ )\x00<\x00/\x00s\x00m\x00a\x00l\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00hMaxim\ um number of lin\ ks to capture:(If br\ owser sends mult\ iple video links\ at a time)\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x10g\x00\x5c\x0fS\ \x16R0|\xfb~\xdfbXv\xd8\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x17Minimize to\ System Tray\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0cN\x0by\xfbb@\x90\x09\x98yv\xee\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x18Move S\ elected Items Do\ wn\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x0cN\x0ay\xfbb@\ \x90\x09\x98yv\xee\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Move Selected It\ ems Up\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00&\x00N\ \x00o\x00t\x00i\x00f\x00i\x00c\x00a\x00t\ \x00i\x00o\x00n\x00 \x00t\x00y\x00p\x00e\ \x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x13No\ tification type:\ \x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x1a\x00N\x00o\x00t\x00\ i\x00f\x00i\x00c\x00a\x00t\x00i\x00o\x00\ n\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dNot\ ifications\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x08\x8f\xdec\xa5ep\xff\x1a\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x17Number of co\ nnections: \x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x22\x00N\x00u\x00m\x00b\x00e\x00r\x00\ \x00o\x00f\x00 \x00t\x00r\x00i\x00e\x00\ s\x00:\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x11N\ umber of tries: \ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x04\x00O\x00K\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x02OK\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x14\ \x00P\x00e\x00r\x00c\x00e\x00n\x00t\x00a\ \x00g\x00e\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aPe\ rcentage\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x16\ \x00P\x00r\x00e\x00f\x00e\x00r\x00e\x00n\ \x00c\x00e\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0b\ Preferences\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x1c\x00P\x00r\x00e\x00s\x00s\x00 \x00\ n\x00e\x00w\x00 \x00k\x00e\x00y\x00s\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0ePress n\ ew keys\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x08\x00\ Q\x00u\x00i\x00t\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x04Quit\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x22\x00R\x00\ P\x00C\x00 \x00p\x00o\x00r\x00t\x00 \x00\ n\x00u\x00m\x00b\x00e\x00r\x00:\x00 \x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x11RPC por\ t number: \x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x002\x00R\x00u\x00n\x00 \x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \ \x00a\x00t\x00 \x00s\x00t\x00a\x00r\x00t\ \x00u\x00p\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Ru\ n Persepolis at \ startup\x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x06S\ \xe6[XN:\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07S\ ave As\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\x10\x00S\ \x00h\x00o\x00r\x00t\x00c\x00u\x00t\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x08Shortcut\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x12\x00S\x00h\x00o\x00r\ \x00t\x00c\x00u\x00t\x00s\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x09Shortcuts\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x10f>y:N\x0b\x8f}\x8f\xdb^\ \xa6z\x97S\xe3\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1dS\ how download pro\ gress window\x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00\x0af>y:\x83\xdcSUh\x0f\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0cShow men\ ubar\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x0af>y:\ O\xa7\x8f\xb9h\x0f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0f\ Show side panel\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x08\x00S\x00i\x00z\x00e\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x04Size\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x0c\x00S\x00i\x00z\x00e\x00:\x00\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Size:\ \x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x0c\x00S\x00t\x00a\x00\ t\x00u\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06S\ tatus\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x0e\x00S\x00\ t\x00y\x00l\x00e\x00:\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x07Style: \x07\x00\x00\x00\ \x0dsetting_ui_tr\x01\x03\ \x00\x00\x00&\x00T\x00i\x00m\x00e\x00o\x00u\ \x00t\x00 \x00(\x00s\x00e\x00c\x00o\x00n\ \x00d\x00s\x00)\x00:\x00 \x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x13Timeout (sec\ onds): \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x10]\ \xe5Qwh\x0fV\xfeh\x07\x5c:[\xf8\xff\x1a\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x14Toolbar\ icons size: \x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x0aO \x8f\x93\x90\x1fs\x87\xff\x1a\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0dTransfe\ r Rate\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00(\x00V\ \x00i\x00d\x00e\x00o\x00 \x00F\x00i\x00n\ \x00d\x00e\x00r\x00 \x00O\x00p\x00t\x00i\ \x00o\x00n\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14\ Video Finder Opt\ ions\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x10\x00V\x00o\ \x00l\x00u\x00m\x00e\x00:\x00 \x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x08Volume: \x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x12\x91\xcd\x8b\xd5\x95\xf4\x96\x94\x00 \ \x00(y\xd2\x00)\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00'Wait period be\ tween retries (s\ econds): \x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x1c\x00A\x00d\x00d\x00 \x00t\x00o\x00 \x00\ q\x00u\x00e\x00u\x00e\x00:\x00 \x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0eAdd to qu\ eue: \x07\x00\x00\x00\x0atext_u\ i_tr\x01\x03\x00\x00\x00\x0c\x00C\x00a\x00n\ \x00c\x00e\x00l\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06\ Cancel\x07\x00\x00\x00\x0atext_\ ui_tr\x01\x03\x00\x00\x00,\x00C\x00h\x00\ a\x00n\x00g\x00e\x00 \x00D\x00o\x00w\x00\ n\x00l\x00o\x00a\x00d\x00 \x00F\x00o\x00\ l\x00d\x00e\x00r\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x16Change Download\ Folder\x07\x00\x00\x00\x0atext\ _ui_tr\x01\x03\x00\x00\x00\x18\x00D\x00e\ \x00s\x00e\x00l\x00e\x00c\x00t\x00 \x00A\ \x00l\x00l\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cDe\ select All\x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x08N\ \x0b\x8f}\x90\x09\x98y\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x10Download Option\ s\x07\x00\x00\x00\x0atext_ui_tr\ \x01\x03\x00\x00\x00\x0cN\x0b\x8f}e\x87N\xf6Y9\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Down\ load folder: \x07\x00\x00\ \x00\x0atext_ui_tr\x01\x03\x00\x00\ \x00\x0aN\x0b\x8f}[\xc6x\x01\xff\x1a\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x13Download p\ assword: \x07\x00\x00\x00\x0ate\ xt_ui_tr\x01\x03\x00\x00\x00\x10N\x0b\ \x8f}u(b7T\x0dT\x8c[\xc6x\x01\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1eDownload\ username and pa\ ssword\x07\x00\x00\x00\x0atext_\ ui_tr\x01\x03\x00\x00\x00\x0cN\x0b\x8f}u\ (b7T\x0d\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x13Download userna\ me: \x07\x00\x00\x00\x0atext_ui\ _tr\x01\x03\x00\x00\x00\x06\x00I\x00P\x00:\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x03IP:\x07\x00\x00\x00\ \x0atext_ui_tr\x01\x03\x00\x00\x00\ \x04\x96P\x90\x1f\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bL\ imit speed\x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x0a\x00\ L\x00i\x00n\x00k\x00s\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x05Links\x07\x00\x00\x00\x0atex\ t_ui_tr\x01\x03\x00\x00\x00\x08\x8f\xdec\ \xa5ep\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16N\ umber of connect\ ions:\x07\x00\x00\x00\x0atext_u\ i_tr\x01\x03\x00\x00\x00\x04\x00O\x00K\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x02OK\x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x006\x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\x00 \x00D\x00o\x00w\x00n\x00l\x00\ o\x00a\x00d\x00 \x00M\x00a\x00n\x00a\x00\ g\x00e\x00r\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bP\ ersepolis Downlo\ ad Manager\x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x0a\x00\ P\x00o\x00r\x00t\x00:\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x05Port:\x07\x00\x00\x00\x0atex\ t_ui_tr\x01\x03\x00\x00\x00\x0a\x00P\x00\ r\x00o\x00x\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x05Proxy\x07\x00\x00\x00\x0atext_\ ui_tr\x01\x03\x00\x00\x00\x0aN\xe3t\x06[\ \xc6x\x01\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10P\ roxy password: \x07\ \x00\x00\x00\x0atext_ui_tr\x01\x03\ \x00\x00\x00\x0cN\xe3t\x06u(b7T\x0d\xff\x1a\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Proxy \ username: \x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x14\x00\ S\x00e\x00l\x00e\x00c\x00t\x00 \x00A\x00\ l\x00l\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aSel\ ect All\x07\x00\x00\x00\x0atext\ _ui_tr\x01\x03\x00\x00\x004\x00<\x00b\ \x00>\x00A\x00u\x00d\x00i\x00o\x00 \x00f\ \x00i\x00l\x00e\x00 \x00s\x00t\x00a\x00t\ \x00u\x00s\x00:\x00 \x00<\x00/\x00b\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aAud\ io file status: \ \x07\x00\x00\x00\x1bvideo_f\ inder_progress_u\ i_tr\x01\x03\x00\x00\x00,\x00<\x00b\x00>\ \x00M\x00u\x00x\x00i\x00n\x00g\x00 \x00s\ \x00t\x00a\x00t\x00u\x00s\x00:\x00 \x00<\ \x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Muxing status\ : \x07\x00\x00\x00\x1bvideo\ _finder_progress\ _ui_tr\x01\x03\x00\x00\x004\x00<\x00b\ \x00>\x00V\x00i\x00d\x00e\x00o\x00 \x00f\ \x00i\x00l\x00e\x00 \x00s\x00t\x00a\x00t\ \x00u\x00s\x00:\x00 \x00<\x00/\x00b\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aVid\ eo file status: \ \x07\x00\x00\x00\x1bvideo_f\ inder_progress_u\ i_tr\x01\x03\x00\x00\x00\x08\x9a\xd8~\xa7\x90\x09\ \x98y\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Adva\ nced options\x07\x00\x00\x00\ \x13ytaddlink_src_u\ i_tr\x01\x03\x00\x00\x00\x0a\x97\xf3\x98\x91h<\ _\x0f\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dAu\ dio format:\x07\x00\x00\x00\x13\ ytaddlink_src_ui\ _tr\x01\x03\x00\x00\x00 \x00F\x00e\x00t\x00\ c\x00h\x00 \x00M\x00e\x00d\x00i\x00a\x00\ \x00L\x00i\x00s\x00t\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x10Fetch Media L\ ist\x07\x00\x00\x00\x13ytaddlin\ k_src_ui_tr\x01\x03\x00\x00\x00\ ,\x00F\x00e\x00t\x00c\x00h\x00i\x00n\x00\ g\x00 \x00M\x00e\x00d\x00i\x00a\x00 \x00\ I\x00n\x00f\x00o\x00.\x00.\x00.\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x16Fetching \ Media Info...\x07\x00\x00\ \x00\x13ytaddlink_src_\ ui_tr\x01\x03\x00\x00\x00>\x00P\x00l\x00\ e\x00a\x00s\x00e\x00 \x00e\x00n\x00t\x00\ e\x00r\x00 \x00a\x00 \x00v\x00a\x00l\x00\ i\x00d\x00 \x00v\x00i\x00d\x00e\x00o\x00\ \x00l\x00i\x00n\x00k\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x1fPlease enter \ a valid video li\ nk\x07\x00\x00\x00\x13ytaddlink\ _src_ui_tr\x01\x03\x00\x00\x00\x1e\ \x00S\x00e\x00l\x00e\x00c\x00t\x00 \x00a\ \x00 \x00f\x00o\x00r\x00m\x00a\x00t\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0fSelect a\ format\x07\x00\x00\x00\x13ytad\ dlink_src_ui_tr\x01\ \x03\x00\x00\x00\x18\x00V\x00i\x00d\x00e\x00o\x00\ \x00F\x00i\x00n\x00d\x00e\x00r\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0cVideo Fin\ der\x07\x00\x00\x00\x13ytaddlin\ k_src_ui_tr\x01\x03\x00\x00\x00\ \x0a\x89\xc6\x98\x91h<_\x0f\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0dVideo forma\ t:\x07\x00\x00\x00\x13ytaddlink\ _src_ui_tr\x01\ \x00\x00 h\ \x00\ \x00p!x\x9c\xcd<\x09t\x1c\xc5\x95%kF\xf7\ \xe5\x03clcZ\xc68\xf2%\xf9\x0e\x08!\x90e\ \xcb\x12\xb2d\xd9\x92e0\x87\xdc3S\xa3i\xab\xa7\ {\xdc\xdd#Y\x86lx\x84\xb0I\xe0\xed&\x1c&\ \x10\xe7\x00r\xf0\xc0\xd9\x84\xcd\x86\x1c\x9b\x03\x02\x84\x0d\ \xc9BB\x08\xc9&\x0e\x8bB\xc8\xe2}!\xc7:\xf0\ \xb8v\xb3\xbf~\xf553}\xcc\x18\xbco\x19\xe4\x9a\ \xa3\xebW\xd5\xbf\xff\xaf_\xd5\xf1\xf5\xc4\x82'\xffx\ \xf4\xf6\x7fm^\xfc\xdd\xfdw\x7f\xfb\xd7_ \x84\xcc\ Je\xb7\x10R\xf9cB\xa2\x17\x12R\xfe\x0co+\ \x1f\xe6\xed\x95Gx\x1b\xfb\x14!\x83\xed\xd0\xf6\x90\xc8\ ?G\x08\xd9\xbf\xce\xdb\xf3;I\xf4fx\xfe\xaa\ {I\xf4\xee(!\x9d}\xbc\x1d\xdbB\xa2\x0f\xec'\ d\xfb'H\xf4\xe9'\x08\xe9\xfa\x12Y\xb2\xea\x7f\x08\ \xe9]@V\xb2q\xda\x0e\x92\x95\x0c~\xdb\x83d%\ \x83\xdb\xf6\x22Y\xc5\x9e[\xbb\x9bl?\xf2\x18!\xeb\ W\x90\xde\xa9\x0b\x08\xd90\xcc\xdb\xad\x83d\xc7\x9d1\ \x98\xdf\x092\x1c=\x17\xe6\xab\x90\xd1\x9bo'\xa4g\ \x0d\xd9+\x1d\x86u\xbd\xcc\xdb\xf8\x06\xb2\xf7\xc8\x1b\x84\ T\x9d\xc5\xdb\xb8H.\xfb\xd6W\x09\xe9XN\xee\xb8\ \xa7\x89\x90\xc8_\xc8\xf7\xbe\x088\x99\xf3PY\xd9\xef\ \x00'])\xde\x8e\xdf^\xb6\xe0\x81g\x09\xd9\xf4\xb9\ \xb2\xd8\xb5\x7fG\xc8\x19\xfb\xca\xa4\x07\xbe\x0cp\x97\x97\ \xdd\x94i d\xf7\xd7\xcan}\xe3Rx\xee\xdf\xcb\ \xdeZ\xbf\x15~\xff\xd3\xac\xb9\xb7~\x06\xc6\xf9\xc8\xac\ a\x00G\xaa\xef\x98\x15\xef\xdbEH\xbd<+[\xbb\ \x09\xf0\xf4\x01\xde^\xd66\xeb\xf68\xccw\xd1\xaff\ \xdd\xf5j\x86\x90\xb9\xf3f\x1d[\xd4E\xc8\xf2Wg\ }\x9d\xcdk\xed\x19\xb3~U\x0f\xf8\x15\xc9\xac?\xaf\ \x86q\xce}z\xd6\x1b\x8f?\x0e\xf4\xfady\xf5\x8c\ B\xc8\xce\xed\xe55\xbb\xca\x08\xe9\x8f\x94\xd7\xaf\xbb\x9a\ \x90\xda}\xe5\x8b\x1f_I\xc8\xb6\x8e\xf2\x8e\x0f\x94\xc3\ \xfc&\xcb\xfb{^\x04\xfc\xcc\xf0v\xef\xdd\xe5c}\ \x80\xffK.(\xbf\xe1(\xf4k\xbe\xa6\xfc\x96g\x9e\ \x82y\x1c-\xff\xe6\xf1G\x08Y3]~\xfc8\xe0\ \xbd\xfe\xdc\xf2\x97\xbe\x08\xf3Z9\xbb\xfc\xf7\x1f\xbb\x8e\ \x90e7D\xae\xea\xdb\x00t\xbc0B\x8f\xbd\x0ax\ \xbe?r\xf8\xcb0\xde\x9eaha>\xeb\xc5\xc8u\ \x15\x9f#\xa4\xbd:r\xf3\x8f\x0c\xc0\xc3\xf9\x91\x8f\xf7\ }\x0bx\xe8\xd3\xbc\xdd\xf31\xde\x8a\xbb\x22\x9f\xba\xe1\ g\xf0\xf9\xaf\x91\xbb\xd3\xd0_\x90#?\x5c\xd8G\xc8\ \xd2\x0d\x91\xe7\xf6\xc2:/;\x109\x11y\x80\x90\xe4\ w\xa3\xd57\x8a0\x9f?D\xe7\xfeh\x84\x90\xd6\x93\ \xd1\xb5\x9f\x9bKH\xcb\x87\xa2\xeb\xd8\xe7\xcd\xaby\xbb\ \xf7dt\xacU\x00\xbc\x5c\x12\x1d\xbb\x0f\xf8i\xde\x1d\ Q\xa9\x03\xf8h],:\xb9\x08x\xb7\xfe\xa9\xe8\xcd\ \xc7\x00\xcf=/F\xef\xae\x02\xf8cZ\xf4\xde\xa3\x9d\ \x80\xd77x\x9b\x18\x8a\xdew\xd9I\xc0gu\xf4\xfe\ \x9b\x1e%\xe4\xe2{x;\xf6\xf9\xe8\xb3\x17\xec#\x84\ \xdeVQ\xad\xfe\x13\xd0\xeb\xbf*\x16M}\x07\xe6\xb5\ \xbdb\xcd\x16\xa0\xc3\xda\x1by\x1b\x7f\xa6\xe2\x82\xeb\x07\ a\xbc\x87x\x9bx\xac\xa2\xe3\x22\xe0\xa3\xfd\xdf\xaf\xd8\ \xde\x02x\xde(V\x0c\x5c\xbc\x8c\x90\xc5\xc7+\xaeZ\ \xf7\xf9E\ \xc5]\xafv\x13r\xf5\x7fW\x1cm\x01\xfa\x5c~c\ \xc5\xe3+\x18=\xaf\xad\xf8\xd1s\xf7\x12r\xe1L\xc5\ K\xe7\x00\xff\xb7m\xa8xi\x1d\xb4\x9bR\x95\xb5\x1f\ \x85\xf56}\xadr\xde\xca%\x84\x5ctC\xe5Y\xb7\ e\x81\x9f\x9f\xaa\xdc\xfc4\xe0\xa3\xa2\xab\xb2\xa3o6\ !g\xbe\xcc\xdb-\x03\x95W,\x87\xdf\xcf\xaa\xa8L\ (\xdf\x04~\x97*?q\x15\xc8\xd7\x95\x17V\x1e]\ \x07\xfc\xb2_\xae|\xfd\x0dX\xe7\xe5\xbf\xad\x8a\xfc\xf0\ / _OV\xed\xf9\x05\xe0\xb1\xa5\xaej|\xcd=\ \xc0_/U]\xdf\x0f\xe3\xf4\xebU\x0f\xfc\xa6\x1a~\ \xbf\x89\xb7{\x1e\xad:v\xd6!BF/\xa8\xfaf\ \xe7AB\x16^[\xf5\xc430\xff5\xe7U\xafj\ \xbc\x84\x90%\x15\xd5\x9d\xf5\x80\x87K>]\xdd58\ \x87\x90s\xbe_\xbd\xf7\xe7\xc0\x07\x1d\xb1\xea\xab?\xfc\ SX\xd7g\xab\xf7W\x00\xbfw>V=^\x06\x02\ \xb3\x7fnu\xfaI\x90\x87U\xffY\xfd\xbec 7\ \xf3\x9f\xa8\xfe\x9b\x06X\x7f\xeb\xfb\xabo}\x06\xd6\xbb\ \xf5\x86\xea#=0\xefE\xe7U\x1f\xd9\x03\xfc\xbb(\ V\xfd\xf0\x0f\xf7\x00\xff=\xc0\xdb+\xbfS\xfd\xd8\xce\ [a\x9c\xf7W?6\xfeWBVh5\x95\xaf\x00\ \xbf\x0d\xae\xae\xa9\xfb[\xa0\xdb@\xaaf\xe9\xbe\xbd\x84\ \x5cpQ\xcd\xd8\xcf\xe1s\xcd\xea\x9a\xb1\x93o\x01\x1f\ \x1f\xa9\x91\x92?\x80q\x1bx\xdbym\x8d\xde\x09\xfc\ \x10\xf9F\xcdM\x8f2}\xb5\xbf\xe6\x0e\x02\xf2P\xdd\ ]s\xcf\xe50\xbf\xab[j\xee\xbb\xeb\xb7\xc07\xc9\ \x9a\x87[>\x0a|s\xbcv\xf5\x17\x9aAn\x94\xda\ \x9e\x83\x7f \xa4q[\xed\x9e\x83 W\xab\xf6\xd5\xee\ \xd7\xa0\xff\x15[j\xc7o\x06\xb9]\xfd\xa1Z\xe5A\ \xf8}dN\xedd\xe4O\xa0ov\xd5\x1e~\x04\xf8\ \xb8\xe2\x96\xdak\xbe\x0f\xfa\xe5=\x8f\xd6~x\xea6\ \xc0o\x05o\xb7\x96\xd7\xde{\xbc\x0e\xf8\xed\xefk\xff\ \xe5\x09\x90\x83\xbdW\xd4\xbep7\xb4\x1b?\xc3\xdb\xbd\ \x0bj\xdf\xb8\xfd+@\xd7Gk\xdf\xfa\xc6{A\xef\ \xaaue\xbf\xbb\x1e\xf4\x97P\xb7\xf0\x1b\xc0\xff\x9d\x7f\ \xadk9\x0b\xf4\xeaE\xcb\xeb\xd6?<\x0c\xfc\x1e\xaf\ \xa3\x8d\xad\xf0}\x94\xb7\xdb\x97\xd4\xe9M \xb7\x17\xff\ \xaa\xee\xc8A\x90\x93\x9a{y;\xf7\x83uwRX\ \xef\xa2\xbb\xeb>\x09\xecM\xaa.\xad\xbb\xffX%\xe0\ \xf3\x1f\xea\xbez#|\xbf\xedi\xde^\xf1|\xdd\xaf\ \xbf\x07\xfcs\xe1\xd5\xbc\xbd\xf2\xf5\xba\x17\x16\x82\x5c]\ qg\xdd[/|\x84\x90\xb3[\xea#\x8f\xc6A\x0e\ \xee\xaa\xaf\x98y\x01\xf4\xc8\xcf\xebgw\xb7\x01_\xfd\ \xb9\xfe\xcaW)\xac\xe3w\xf5\x07?\x0e\xf2\x01\x12{\ \xe7\x1b`\x97\xca_\xe7m\xdd>\xde\xb6\xbf\xcc\xdb\x1e\ \x95\xb7\xb1G\x1b\x04i)\xf0\xc3\xc6\x86\xd6\x04\xc8O\ {O\xc3{\xfb\x80N\xd1ahA\xcf\xd1-\x0dc\ 7\xcc\x00\x1eG\x1b\x0e\xdd\x07\xcfG\x7f\xc2[\xf1\xba\ \x86\xa3\x83\xc0G\x0b\x06\x1b\x1e\xbb\x14\xf0^\xf5B\xc3\ /\x9f\x05~\xea{\xb0\xe1\xa5u0\xaf\xf3.lx\ \xf9\xe1;a\x9ek\x1bN\xae\x07\xf9\x14\x9e\xe5\xed\x96\ \x07\x1bk\x18\xfe\xc5W\x1a7?\x04t\x9e\xf7\xc7\xc6\ \x8b5\xc0\xcfy\xc7\x1b\xaf\xfa\x03\xe8\x91\xe5\x1f\xe3m\ \xf7h\xa3\xf4%\xd0KW\x7f\xbb\xf1\x9a%\xf3\x80\x1e\ \x89\xc6\xf7\xcd\x06>\xa99\xd9x\xfdg\x80\xaes\x7f\ \xd6x\xf4\x8e3a]\xcf6~~\x14\xf0v\xf9\xce\ \xc6/<\x04tYxv\xe3\xb1+`\xbeg\xdf\x02\ -\xf0\xc59\xb5\x8d_Y\x06r4\x7f\x1fo\xbb~\ \xd3\xf8\x93\x8b\x01;\xdb\x9fl|\xee%\xc0\xd3\xae\xaf\ 5\xfe[9\xd0m\xe9+\x8d\xcf_\x03\xeb\x18}\xae\ \xf1d9\xf01yK\x22$\xb5\x16(@n!\x1d\ `6\x04\x92\x22\x1a\xa1$I.\x82w\x06\xbc2D\ '\xed\xa4\x0d^\x19\xf8^\x83O\x14\xde\xa9D&\x12\ \xbcO\x904i%\xe3\xf0\xde\x80\xe7\xb3$\x06\x9f$\ \xf8\xb5\xf3\x1d\xf5\xee\x80\xe7E\xd2Y\xc5\x08\x5c\x01\x7f\ }\x1d\xa2\x90\xd2h\xf2\xa2\x94ad\xf4\xf6\xb6\xb6\x0c\ \xd5t\x9aQeIO\xa4[\xc7%#\x95\x8d\xb5J\ jg\xf0\xcf\x1dmb'\xf0\x22\xa9\x15cj\xd6\x18\ \xcbJc\x86V\xc6\x96~W\xe8\xd2\x0d\xf8^\x86\xbf\ qxB\xc4I\xa7\xe1\x93\xff\xa2\x0a\x97_*\x84|\ \x14\x0c\xe4\xa3\xc0\xa02\x1d\xd7\xc4tk\x9a\xe6\xac\xb7\ 3\xec\x81w\x84\x86)\xa4\x95\x81\x93n%q\x98r\ \xbaD4\x94\x06!\x1c\x0dS\x92aP\xad5\xae\xa6\ }\xd0\xe0\xf3\x80/\x1aV\x92.@\xc2\x90\xc7\x84\x04\ \xa2\x90\x13d\x92\x1c@:N\x13jO\xab\xa9\x8b\x01\ \x11\x86l\xf8\x9e\x90\x9bH?\xf4\xd7\xc9a\xf2\x0a1\ \xcav\x91\x09\xbb\x7f\xcdV:Ie\x95\xcd\xcf\xb3g\ \x03\xd9\x013\x88\xc3\xb8\x0a\xebo\xf7\xab\xdc!\xc5\xa9\ \xa2S\xcfN\x11\xb2\x93\xf4\xdb\x8f\xce\xda\xd9\xef\xf9\xd4\ f\x9f\xa5n\x85\xf7S0\x9c\x0c\xad\x08\xb4\x10\xc8\x00\ \xb4\x0a\xfc\x8d\xb3\xe7m\xb8\x8b\x9cE\x0b[\xd5)E\ V\xc5\x840 *\xe28\xd5<\x07\x5c\x02Xx\x1b\ \xc0\xbe\x06\xc0\x042\x01-\xc3\x08\xfbD\x81-\xdam\ \xc0s\x8634.\x89\xb2`\xa4DeB\x17\x0c\xb5\ \xdd\x07\xab=0E\x0d\xa6\x08X%']X\xad\x1d\ \xd1DE\x97EC\xf5A\xebj\xd2\x0b]\x0f\x93\x19\ \x5c\xe1\x0c\xae{\x02\xde\x1bH\xe0\x93\x00T\x82oS\ \xf8\x8c3\xb1\xd9]\x89\x04\xccF\x88\x8b\x06\x1dW\xb5\ \xe9v\x81\x01\xaf\x17\x13\x09YR&\x5c\xe0\x17\x02x\ \x11V\xca\x80\x9f\x04\xd0* 8\x0e \xddsl\xea\ JL\x8aJ\x9c&\x84\x9d\x19CR\x15\xdd\x07V\x0d\ \xa0\xff\x04LJwq]E7\xeb)\xfb\xf48\x1f\ x\x86a\xf45\x98\x81\x81|\xc7D\x9bi\xa1i\xf8\ \xc4\xb0=\x01\xdf\xa4a6\x09\x98\x99\x8e\xd8c(\x10\ m\xf8\xf3\xbb\x01\xf3\xe3\xd4!k\x8f*'8U=\ \xc6[\x120\x1eu\xa3/\x0f\x9c/\xfa\x1a\x80\xb0\x14\ \x84M\x06`q\x17\x80\xaa^*\x06\xf5\xab\x22}\xc0\ \xd3\xedD\xb0{D\xfa\x86\x02\x9ef\xa2\xa5\xb8H\x12\ \xd9\x01O\xf8<-\x90a`^\x03z0\xe4\xc5\xf2\ \x16\xec^f\xc3\x0e\xb6\xc4\xb8\xaaNHT\xf7\x1d}\ 1\x19\x01\xe4O\x02\xe2c\xf0\x92|\x98\xa4n@\xd5\ h\x08\x83xJ\xbb'#\x0d\xa1\xb8\xb8E-:\xa4\ jF{@\x07\x0d\xba\x1c\x22\xd3\xae\x0e\x9azh\xda\ \xa7\xc3<`{\x09\xd6\xc4\xe4h\x02e\xe7\xa4k\xac\ \x9a\xdd4I5-\x80~-Hw\x19\x98GD\xd5\ \xa0\x00vd\x80\xc1\xb0\xf36*^\x05p>\xe1\x82\ Y\xb7G\xa7\x9a\x00\x1aG1|\xa1.\x03[\x12\x03\ \x8b\xd4\x03p\x98!\x16P\x971#\xccl\x0c\xfb\xc5\ \xcd1s:b\x9d=\x92L\x05EL\xd3\x8e\xb6X\ '\x87\xbb@L\x82-\x19K\x98\x1c<\xa6k\xf1\x1c\ y\xe7C\x0c\xc3\x10\x87}\x00\xd7\x03\xe0a\xe9p\xd1\ 0\x9b`\xa2\xec\x05\xc4\xe5\xef\x1c1\x10\x04ag?\ \xfc\xc3\x80\xcc\xcb\x03\xe2\x16\xcb\x1e\xc0\x1f\x93\x22\x01W\ ;\x0e\xeb\x9eF\x1b\x9c+\xec\xf5\x00-C\x15\x01W\ \x1d\x02s\xa3\xb9\xd0B\x81gt\x9b0\x8d\xdc\xdb\xf8\ }\xb3\x85\x06{\xa4\x85\x80\x02[\x07t\xab\xe9\x8cL\ \x0d\x9ahf\x18\x09\x1ev\xa1=,\x0a\xac/~\x99\ \xfc:\xf8\xf5\x87\xd7j\xc2\x1b@\xbbj-!\x8d\x88\ \x99@\x1dix\x8e\xd1\xc4h(NRA\xd4\x8b\x19\ f+\x19D~;`\xba\x80\x0a\xbeSlz\x08\xe4\ M\xf8FC\xdf\x8b\x02\xde\x04xw\x18y\xfd0>\ \xc7p\xdcj\x0f\xbed\xab\xaa\xbc\xc7\x10\xf4\x94:\x05\ \x96\x11\x8cn\x9a\xea:\xb0>\xb0\xbf()\xad\xc1S\ )\xd6&\xf8\xb3\xc9\xf6\xe2~\x05\ 9[\xc8\x93\x98\x14\xd2\xf1\xa4\xc9\xfb\xf9\xdc\xb9\x86\xf9\ G\xaa\xa6M7\x0b\x97\x83R\x8d\x8b\xcca1Y2\ A\x93bV68\xaf5\x87s\x91`\xae\xe0\x11\x18\ \x87\xcf^\xf5\xf1\xca\x1a\xd9\xa8\x86hd\x8bb\x9c\xd5\ 6\x5c\xc60\x92\x89\x0f\xa6\x815$\xb6\xe89\xc6|\ \x18\x03\x93\x0a\x10\xc2\x08 p\xb4\x98\xa1\xb6\x16(\xa7\ .T\xdc\x1a\xda9\xae\xf2\x99\x03f R\x99\x19\xf0\ \xb0}\xf6\x14VXr\xbfU\xcd1YqU1$\ %K\x1ds\x15\x86\x00\xce\x14]\x98\xe5\x10\xc9z\x17\ \xb1'1\xe2\xe2\xd1\x17\x9b\x9b\xe1\xf8\x22]\x9a$\xae\ \x07\xa5\x9d\x10\x14\x95\x11U\xcf\xa8J\x22x\xa4\xd6R\ Fr\xf9=\xf3=\xc7\x0aq|\xfe\xb1\xb4\xc1\xd0\x19\ \xe4\xd9\xbc\x13\x18\x22\x19\xe0vk\xb6l\xe8\xf8\x84\x7f\ >\xd0q\xdc\xb9\xcf\x9cA\xf9\x89\xe18\xdc\xaa\xac\xb7\ #\x0aFl\x9e\xe6\x8c\xe3wo\xc23,Hv\x16\ \xdcc/\x98\x0b\x0c_/80B\x06t;\x10\xb5\ \xd9\x95a\x14\x0cM\x02k\x8a.\x0a\xd3\xe0\xeb\x05\x9d\ \x02\x0f$\xc2<\xc3\x95\x1e\x08b\x089\x81\xd1\xba[\ U;T\x9fkML\x8fs\xf5L\xc3\xc8\x90\x02\x03\ ,s\x17\x19\xb4\xa4\x86>`\xc24\xb2)3\x9e?\ l\x1a\x03\xa6zx(\xc2\x94\x1eO\xe3\xe9\xf8\xb4\x83\ ^\xd1\x87\x04\xce\x1c\xdf\xd3\x9d\xa2\xf1\x09\xeeX(\xd4\ \x98R\xb5\x09a\xb9\xb0\x9b\xea\x86\xa8\xe5gf\xfd\xe7\ \xbd\xcc#@\x8aa6\x9c\xa2\xd3\x7f\x98Y\x17\x8fT\ \x96\x15\xc6\x86A?\x8e\xf2\x9c\xabv\xf3\x9c\x02'\x07\ aC\x1f\x8e\xa7h\x22+\xd3\x10A[\xea1y\x07\ \xa5\xb9q\x5c\xa3\x03\x9c!(\x04-\xcb= s\x8e\ \x9fA2\xbf\x82Z\xd4\x81\xde\xe4\x82\xaef2a\x13\ \xbf\x0cE,\xdf9r4#\xcb\xd30^\xb1\x22\x93\ I\xb3\xe5.\x1bXb\xe8\xa9b$\xc3DW\x07\x8e\ \xe3\x0e\x9f#Z-\xf6\x84$\xf4w2\x9a:\x0e\x02\ \x06\x81\xc2\xb40)%\xa8\x0a\xce\xa9\x02\x91l\x08[\ \xd7\xd9\x11\xa0@\xd68\x99\x98m\x9a\xa6j\xc2\x9a\x10\ ;\xd0`wne\xaf\xbc\xee\xad\xad\xad\xc1\xddk\xec\ \xeeN\xe2\xab\x12\xbb\x86\x19 \x96=\xb2\x93\x8a\xa6\xcd\ \xd6\x90\xa1\xcd\xb4\xa5\x13\xbf\xf6\x02.\xc0\x99\xb4\x13\x8d\ Az\xa4\x1f\xb7$td\xb1id\x01N5\xd1t\ \x17d\xf8\x959\x14\x0e[\x9c9 )RZ:L\ \x99\xc1\xd2\xa7u\xf0>A\x8d\x89\xd3\xc1#5\x91\x01\ \x8c\x0e\xc7\x91\x07f\x5c\x12R=\xa0NJ\xca\xb8\x10\ &\xd5\x0b1\x03\xc3\xdd\x18\xe6\x04\xcd\x98\xd9Epa\ \x1cX\x83`cz\xd4l\x985k\x01Xl\xc5q\ ;\xdfu\x02s8V\x1aE0\xf7\xb7\x1c\x22\x9d\xc5\ SE\xcd\x8e\xa7 \xf8\xa1T\xd03b\x9c\x02\x17\ \xb6\x87\xdb\xcd\xc2\xf0\xc52f:f\x09\x18\xc7\xbf\x9d\ g7\xcf\xde\xe9\x04\x03\x10\x0a3\xdb\xa9g\xe3q\xe0\ \xf6dV\x0ea\xf0\xdbJ\x1b\x13\xbe\xebGwR\xc6\ \xd4\xd1j\x8e\x11\x90?\xbe\xa5\xc3\xb2\x07\x8e\x82\xe0:\ \x9d\xe7^E\xc2\xb7~&q\x04\x06\xf30z\xd5\x85\ \xbb/nL\xf6\x06\xaeL\x18\x92\xa9\xa8\x03zA\xe5\ @@C\x85\xa4*\xcb\xea\x14c\x10k\xab\x06\xa4\x5c\ \xd3\x8d0y)\x0d\xf1\xad\xc5!>D\xba\xe7y\x99\ 7'i^\xac\xfd\xda\x17\xb8yi\xc9@\x16)\xc1\ 8\x98a\x9b\xb9Df\xc3\xc1d\x8d\x0d+\x04u\x82\x19\xee\xe7\ z\xd8\x8cY\xd3y\x09\xa7\xda\xa2\xbd\xe8\x8dfB6\ \x09\xaf4f\x88\xc7Q\x04\x9c$\x83U;\x9c1\xad\ \x11u\x8d\xb3 \x99Lg(K\x81`\x1c&)\xa0\ \x04e9\xd4T\xcc+\xccj\xba\x80V'%E\xd2\ S\xa1P\xe6\xc3\x84\xb3\xe4\x10N\x95\xe7@0A\xe5\ (\x84t\xf6\x10\xe3\x00\xca\xb2T\xc1\xa0\xd6#\xbbY\ \xe6\x91\x0b\x00\xfb\xc4\x08\xb6\x9e\xacE\xf1\xcb`@f\ g\xce\x1dA\xc0\xa4\xaf\x99Ob\xa9\xf0\xb5V.<\ ,\xb1\xe4fewb\xb7\xd6\xb5m\x8de\x1c.\x18\ \xee\xfeyYQ\x07\x81\xcb\xad|\xa3\x7f\xef\xf9d\xd8\ \x5c\xe5\x04\x0a\xfb\xe1<\x18\xd1\xe5\xdb\x12\x92\xe1\xdf\xbf\ \xca*\xecr\xf5`\xc5[A=\x86\x01w\xe3\xae\xa4\ Wty/\x953\xfe=\xe6\x14\xfaGN\xf5\xe9r\ \xf4N\xfc;\xd7\xa0\x8e\xc7<\xb7k\xc0Q\x89N\xf9\ \xf7\xd9hoX\xb2\x1c\x053=V\xb1\x83\xa5\xa5\xac\ -\xc0v\x22xV\x96ue\x13\x92\x8a\xa5\x06\xe0\x82\ \xb2\xdd\xc0v\xc1\xdae\xf4\x1e\xd2\xa9\x02s\xb3r\xf8\ `l/p\x80\xf3wq\x03yoez\x81v\xb6\ 2\xc3`Z\xf8\x1a5\xb3\xe0\xa5\xe3k\xd4\xcc~\x17\ \x8d\xaf\x06$\xab]\x05\xef\x90\x16k\xe0\x83\xd8\x81m\ {\x1a\xa0\xc3&\x1d\x1e\xea\x02\xd7p2\x80\x876\xa3\ 5\xf0\x0aI\xad\xea\xa5\xfc\xda\xa1\x5c\xaf\xf0\x0cV\xab\ =H\xa7\x9c\xc21\xab\xb8\xd7{\xbc\x85\x1e\x1b\x1dY\ \xf45\x15'\x00\xe8b\xf5f\xb6\x86\x08\xc2T\xaf{\ j.Le2 \x85\xdd\xc7\xc2\ \xbd#\x16\xb0\xa0\xe7\x94[\xfd\xc2\x13\x16\x1e\xbd\xc3n\ \xfc+\xecQt\xdd\x88g\xdfQW(e\xe4l.\ U\xf0{\x00}z\xc6r\xb2|awL\xbc\x89\xa1\ \xa9\x8a\x11\xbd\x8ca\x9c\xbb|y2\x7f\x0e\x05\x05\x17\ \xfcFB3Uh\xde%\x91\x11\x8d\x94\xef\xb2\x86q\ \x1bSA\xd4\xe7&=\x1a\xbaU\x19|A=\x9e\xa2\ i3\x00\xf6$biu'\x1e \x16\xfbz\xbe\xb9\ \xe5\x1f|9~P\x84\x82\xfc\x95\xdfu\x81\x9ey+\ \x0f\x88E\x97qx\xf6-\xaeV\xc1\x93\xb1\xb7`4\ ~\xd0E\x8b\x8a\x1e\xd5\xbe\xbb\xaf\xb0G\xaa\xa0\xda\xbd\ `\xdf\xcb\xd4\x16[\x10\xad3\xa8~\x99\xe2\x1d'\xec\ ~\xd9\x98\xe9\xa6L\x22\xd3\x9d$\xd6\x91\x1b\x03\xb3\x16\ \x9c\xc9\xd0!\xb1\xe7\xb3\x027\xce\xb0V\x9e\xe7\xd1\x99\ S\x18\x97U\x08,cY\xc3P\x15\xf8 \xc5'\xc0\ 3\xf4\x99r\x03\xd8Z\x1em\xab9W\x15V\xf6\xc5\ \xed\xcc\x9aG\xb7\x95\xf6N\x98e*X\x88\x153M\ \x86\x81\xe1|\xc1\xc9\x87~J3\xd6&\x9f8%N\ \xd0f\x1f\xe8\xcf\xa2\xb3\xc7\xae\x9b\x1aG\xa90\x5c\xc1\ \xa2s\x1b\x18\x17G\x11\x8b!\xd3v)CN\xe2\xd0\ \xcc\xcepK\xa0\xe3w2Z\x89\x16\xdc\x9a\xe7\xb4\x88\ \xe1\xa5\xae\xe3\xbc\xe0\x0b\xc7\xe0\xc5\x0b\xd6\xca4\xa4\x9a\ a\xdb\x0d\xe7$\x7f\xfe\xcddo\x9b\x99mF\xf5\x15\ \xa8\xe7]c\xdaxH\x0d\x88\x87\xa4t6\xed\xf2\xe7\ \xd9}`:\xbf\xab5\xc3Ld{GL\x03#\xa0\ \xa7EY\xeel\xe9K\x0a1M\x9dbwG\xea\x94\ yz\xb69\xe0W\x02\xf0\xde\x10\x1d\x89\xe8\xa3\xac\xe8\ h\xe3\x1d}\xb0\xbb\x94\xfc\xc0\x14o\xddu\x1a\x9e\x15\ \x9f\xc4\xbd\x88[E\ \xaay<\x94\xb9\xc6Y{\x8b%\x91\x13Vx\x15\xfa\ \xe3&\x9cc\xe6wg\x15w\x8a\x15D\x10\xf3j\xd9\ \x8c/\x11\x87\xbc2\x9d\xae\x14\xbb\x99C\xf4\xe9\xbf\xd0\ \xbb\x7f\x0e#T[0\xfc\xc8\x13X\xf8\xe0\xf1|\x9d\ \xf3\xbc\xdb\x12\xb2\x1e\xbe\xd8/\xa2\x06\xc0\xb3\xd70\xea\ !\x19i\xe22F\xc3\xc6\xb4\xec?\xd82\xdfx\xb1\ \x05\xc9\x1f\x07e\xecRi#f\x1c\xd7bFq+\ \x02\x00{\xee\x81\xfb\xb83\xf3\xdc;\xe2\xa1.M/\ \x12\x117\x8brv\xcf\xaaFU9\x1b\xe0\xe7-+\ \xa8l\xb2n\xfe\x16,\xad\xe2\xf6\x1d\xcd;\xc0\xb1j\ \x81\xc3\xac1\xe8!\xa3\x80\x1d|\xfd\xf7\xfc\xc7O\xeb\ u\xdd\xf9\x83\xb5\xa2&\xe1%E\xaf\x119\xa7\x1e\x84\ Wg\xf3\xfc|\xc1\x09\xbf\xad\x94\x17\x15\x0a]\xb2\xe7\ **\xf8\xdd\xdbv\x87\xf2\xbe\xa1v\xaf\xe7\xea\xec+\ \xee\xdc\xa6,\xcajFu\xaf\xe7=\xed@\xfeC\xa7\ {O\xb1\x90\xc2AWi{=\xed\x7f\x8fv\xfe\xd3\ \x0ba\x8e\x5cu\xf2\xfaQ\x87V\x92\xab\xb0)\x90\x16\ \xa7\xf5,\xcd\x22t\x91\xc6\xf8\xadIc\x1e\xfb\x86\xa7\ \xe1XM\xe8\x98\xa7\xf54L\xe8\xe8\xa5]\xf7\xef:\ &;w\xda\xb0\xee+\xcf?\x85j\xd1Nu\x95)\ \x98;\x01\x8e\x03h\x92\x093\xf9\xed\x81\x00W\xa2N\ J`\xb4\xee\xae\xd1\x8a\x99n\xf7$\xa6i\xf2\xaa\xdb\ z\xa8\x11O\x09\x034!\x89\xc2\x0e\xf3\x88\x87\xef\x08\ \xed\xae\x11<\xab+\xdd[vC\x16h\ {\xd9\x94\xb2[\xdf\xdf\x02\xdf\xffe\xd9\xf7\xbf\xf76\ !\xbbg\x96\xbdF\xdb;w\x95}\xb0j\x13<\xf7\ z\xf9\xf4[\xef!d\xeai\xe5k^\x83~\xb6O\ c\xed\xcd_*\x1f\x02\xb0dZ[\xf9E'\xff\x8c\ \x90\xc4\x96\xf2x\xcfy\x84\xcc\x12\xcasuk`>\ ~\xcb\xda\xeb/(\xcf\xbd\x03t\xde\xb6\xbc\xfc\xaf?\ \xb5\x91\x90k\x8e\x94\xdf\x1e\xaf\x80\xf9\x19\x83\x16\xc6\xbf\ d^\xf9\xa1\xf7\xb2\x80\xff\xdf\x94\x7fed1!\xe2\ \xa5\xe5GN\xe9$duE\xf9\xb7\xe8x;\xca\xca\ _\xfe\xf7\x1c\x8c\xfb`\xf9/\x1b`~\xbf0R\xfe\ \xc7f\xc0{\xc5+\xe5\xef?\xf3\x0c\xf0\xc6u\x15\x95\ \xbf\x9b\x03\xf8>]Q\xfb\x9aB\xc8\xd8\x81\x8a\xe8y\ e\x84\xec]W\xd1\xb0\xf2bBf4T\xcc\xbe\xf3\ _a\x1e\x86+N}f\x19!\x97j\x15\xedW\x03\ \xfc\xc63*\xb6v\xfd\x16^7\xb0\xf63\xbff\xed\ \xdd?\xa9\xd8\xdd\x03\xf8&\x1e\xa98p\x18\xfaiY\ Wq\xcbK\x7fG\xc8\x0d\xab*\x0e]\xb8\x1a\xf8\xf4\ 3\xac\xbd\xa7\xa6\xe2\x89W\x9f&\xe4\x13++^}\ \x15\xf8\xe3\xe4g*^}\xef\xfb\xd0\xcf\xe2\x8a7\xbe\ \x0a\xe3\xfa\xf89\x15o\x7f\xeeJBV\xde\x19\xa9\xbf\ \x12x\xba[\x8c4l\x00\xbc;\xae\x89\xcc\xbe\xaa\x9f\ \x90\xf5/E6?\x0e\xe39\xfcd\xe4\xa2\x9e3\x81\ \xcf\xbf\x13\xb9\xf8r\xe0\xbb\xde\xae\x88t\xe4=\xe0\x97\ C\x91\x11\xda\xd6\x1f\x89\xec\xff\x1a\x8c\xe3SoC\x0b\ \xe3\xddty\xe4\xca\xaa\x07\x09\xd9yc\xe4\xc6\x1f\x1b\ 0os#w\xf6\x00\xf3u\ \xf5u\x91{3\xd0\xef\xf2\x99\x91\xe7\xe7\xf4\xc08\xdf\ \x8f<\x7f\xfe\xa5@\x97\x1ck\xef}!\xf2\xf3\x9d\x80\ \xdf\xf5\xff\x1e\x99\x88V{\xf1u\x7fO\xc8\xae\xe7\x80\xb2 \xaf\ b\xad\xb51\xdaN\xf9Y\xedH\x19\x08\xc8\xbb\xde\xaf\ \xcd<\x07\xf4<\xbb\xad\xf6\xf2A\xe0\xd3\xe8c\xb5\x97\ \x1f\x019\xb9\xe0\x9b\xb5W4\xc2|\xb4\xf7\xd5\xdeh\ \xc0\xf3\xb7?\x5c{\xebK@o\xf9p\xed\xc1.\xa0\ \xc3\xe2\x0bj\x0fn\x07\xb9\xb3\xf8p\xed\x03O\x03?\ \x9d\xffF\xed\xb7\xfe\x1a\xf8\x00(\xfc\x84\xf48!C\ \x9f\xa8}\xea\xf9\xed\x84\x5c\xf0U\xd6\xde\xba\xb6\xf6\x07\ \xdbn\x05\xbc\xe6\xd7\xfe`\xe4?\x09Y{e\xed+\ \xa7\xc1\xbcn\xb9(Z%]A\xc8\x81C\xd1\xea\x7f\ \x82\xf5>\xba5Z\xff\x19\xe0\xd7\xdcg\xa3\x0bv\xed\ $d\xc7K\xd1\xcd\x1a\xc8\x91\x83\xe9\xe8\xeeW\xe0\xfd\ i/Dw\xbf\xfb\x01\xc8\x99\xc7Y{\x95\x10\x95\x93\ ?\x22\xe4\xac\x18k\xc5\xe6\xa8\xde\x01\xeb\xa8\xeag\xd1\ \x1b\xbeO\xf5\xe6\xf6\xe8\x1d\x04\xe4\xdc\xd4\xa3\xd1\xfb.\ \x80q\xde\xbe2\xfa\xf0\xa1\xdf\x01\x1d&\xa2O-\xb9\ \x19\xc6\xff\xbd\xba\xe6\x87\xe6\x83<\x8d\xb5\x9f\xae\xab{\xff\xf6\xaf\x13\ \xf2\xb1o\xd7\xbd\x7f\x07\xe0\xbf\xb5\xaf\xee\x83o\x7f\x1c\ \xc6?\xa5\xbe\xec\xf7\xb0\x8e\xa4\xdf\xd7\xcf\xf96\xf0Y\ l\x7f\xfd\x92\xd9\xa0\xf7/\xfaM\xfd\xaa\xa7\x86@\xbf\ \x9c[?\xf0\xcb\x0bA\xdf\xce\xac\x8f]\x08r\xf7\xe2\ \x9ez\xa9\x09l\x91K\xbe\xc3\xda\xcc)\xf5\xfa\x14\xa0\ _\xfc\xf7\xf5\x07\xf7\xc2\xfcN\xefg\xed\xbc5\xf5w\ I@\x97\xc5\xbf\xa9\xff\x02L\x1f\x99\xd2Z\xff\x95#\ \xd50/?\xac\x7f\xe4\xcf\xa0W/\xfc\xbf\xf5\x7f{\ \x0d|\xbe\xe7\x01\xd6\xde\xb2\xa5\xfeW\xdf\x03\xbe\xdfu\ \x80\xb5\xb7\xee\xab?:\x07\xe4\xd7-e\xf5\x1f\x1c\xbd\ \x1e\xe4\xc4\xdd\x0d\xe4\xdf`\x9e?;\xaf!\xf2\xfd8\ \xbc&\x0dU\xaf\x1d\x05\xf9\xbe\xbba\xea\xc6VX\x07\ \xbfm\x98\xd7\xd2\x0dp\xf66\xcc\xfb\x22\xf0\xd3\xb5\xff\ \xd4\xd01\x00\xe3=\xe9\xc1\x86O\xbe'\x11\xd2\xf3\xed\ \x86\xbdw\x82|){\xbd\xe1\xae\xf7\xc1\xde\xaa\xfc\x1d\ kOjb\xed\x05\xff\xc2\xda\xf4\x00k\xef\x1bjx\ `!\xd0\xe9\xe4M\x0d\x8f\xd7\xcf&\xe4\xc6\xe6\x86_\ \xbe\x1b\x85u\xf9\x8f\x8d\x82\xbc\x00\xe4\xff\xdb\x8d-\x09\ \x90G\x17\x9c\xd5\xf8\xf1\x1e\xf8^\xf5;\xd0\x82\xfe|\ \xf0\xad\xc6\xdd\x07@\xdf\xac\xbe\xb4q\xdf\xc3\xd0O\xcd\ (k\xef.k<\xdc\x0f\xfc\xbe\xb0\xbd\xf1\xf1\x7f\x86\ \xf1\xde4\xa7\xf1\x07[`^\xa7\xeem|\xee\xa9\xbb\ @\xee~\x93\xb57\x7f\xac\xf1\x7f\xbf\x0c\xeb@}\xb3\ \xf1\x8d\x950\xbeU[\x1b\xdf\xa4\xef/\xd9\xd7\xf8\xee\ *\xe0\xff\xe5\x07X;\xf2`S\xf9\x99 7\xb7]\ \xde\x14\xa5\xf3~\xf7\x15M\xb3\xff\x00\xebE\xbf\xabi\ \xed7\x80\xef\x84\xe7\x9b\xd6i0\x0f\xab\xdelZw\ \x0d\xf4\xb7\xb9\xa3\xe9\xa2w@/\x9cy?kS\x17\ 7\xc9\x8f\x82~\xba\xfd\x8fM\xb9\xc7\x80\xef\x07~\xdc\ 4\xfe \xac\x8f\xce\x97Y{\xc5\xec\xa6\xcb\xe6\xce\x00\ ~\xe9o\xba|*\xf0\xf5\xf4{\x9a\xae\xba\x07\xf8n\ \xdeg\x9a\x0e\xdfq2\xd8\x13o4}i\x07\x8c\xe3\ \x86w\x9b\x1e\xfa\x06\xf0\xcb\xa2yMG.\x84q/\ \x9b\x0b-\xf0\xed\x19\x0f5}}!\xc8\x99\x05[X\ \x9b|\xb1\xe9\xa7\xeb\x80\x0f2\xcf6\xfd\xfc\x0d\x98\x87\ \xfd\xd3\x9a~Q\x01\xfc\xd3\xfa\xe5\xa6__\x06t8\ \xd0\xd5\xf4n\x05\xe0Q\xfe+\x99\x90/7\x03\x07\x94\ 5\x93(\xe9$i\x22\x93A\x22\x91\xfdD$\x02\xbc\ \xce\xc0k\x8d\x0c\xc1+\xfa\x17\xfd\x8d\x92>\xa2\x92\x14\ \xbe\x93\x81\x7f\x13\xf0\xb9\xf3\xfd\x18\xbcV\xa1\x974\xbc\ N\xe1\xbb\x09\xf84\x05O\x0d\x99\x7f\x8f\xc0+\xc1\x84\ d=)C\xcb\xfa\xd5\x89\x01\xaf\x93fo:>C\ an1\xdf\xd5\xf0\xfd=\xd0\x87J\x14\xf8L\xc4~\ \xa2d+\xfcK\x9f\xe9F\xbc$\xf3\xa9n\xd2\x02\xa3\ \xb1ze\xd8o\x86gi\xbf\x0a|{\x18\xde1\xe0\ WG\x0c\xf3\xc7\xc5FO\xbf\xb7\x03G\xc3zU(\ \xa4\x1a*\x1a\xab\xe0\xf7`\xb43-\x0fJ\xfbE\xa1\ 3#kCbF\xce\xc8\xd1>5%f2bB\ \xc3\xf7c\x095\x9d\x16S\xfb\xc5\x84\x94\x8a\x0e\xc1\xbf\ #)\x01\x1e\xa2\x1f\xca\x12|W7\xc4$|M\x17\ \x13rt\x0b\xfc\xa9\x09\x9d{R\xaa\x92\x10\xd3rt\ \xab,\x0a\xddbF\x82\x8f\xba[\x06\xe9W\xa1\xfb\xcd\ )]T\x84a\xd9\x90\xf5\x94\x0d\x0b\xc0+\xc2\x0e1\ \x05_Ud\x11\x96>\xa9\x13cj\xce\xd8\x9d\x93w\ \x1bZ\x19\xcc0\xb9\x85\xb4#\x8dRH\xf7$9\x07\ \xfe2\xe0'\x0b\xe3o#\xad\xf0\x93\x85\xf75x%\ \xc1_*RV\x871g\x80\x8a#H\xa9\x14\xc9\xc1\ \x0c\xb7\xc0\xdf*\xe98\xae\xa7\xdb\xe1\xfb\x22\xe9\xb0\xe9\ \xd8\xd3.\x0a)MJ\x9e\x932\x8c\xac\xde\xd6\xda\x9a\ \x954]\xca\xaaiYOdZFd#\x95\x8b\xb5\ \xc8jG\xf0\xc7\xed\xadb\x87\xe7\xd0\x0f\x85\x0e\xdd\x80\ \xf7\xd3\xc8\x9e\x1a\xb2@\x0b\xb2\x91\xff\xa0\x0a\x87_j\ \x0f\xf9$\xe8\xcb'\x81!\xa5\xa5\x11M\xcc\xb4d$\ \xd7x;\xc2\xbep\x5cd\x18\xc3\xb92\x10\xe9\x16\x12\ \x07\x943%\x92\xa1\xb4\x1e\xc2\xc90&\x1b\x86\xa4\xb5\ \xc4\xd5\x8c\x0f\x19|\xbe\xe0K\x86f\xf2\x14\x10!\x0b\ \xe8\xa8\x88\x8c\x0e\xaf\xa8h\x12\xc8@!\x926bS\ :i7\xc2\x80\x0d\xc1\xb3\xefYd\x13\x99 \xa3\xc8\ \x0b\xb4w:\xec\x1c\xed\xd3\xee'\xbaI\x1a\x95\xd2*\ \xc5\xd4\xb3\x87F\xd2\x0bp\xe3\xf0\x9cB\xff\xb5\x9f\xab\ \xee\x95\xe3\x92\xa2K\x9e\x0fE\xc86\xb2\xd5\xfej\xf9\ \xb6\xad\x9e\xdf\x1a$\xe7B\xb7:\xca<*?\x15\x94\ \xbd\x1a\x0e\x9d\x11\xc0\x00\xe4\xd3\xf0\x1bGI\xa8\x013\ K\xc8\xc6\x0a|\x12L\x9eS\x1c\xc2\x08\x9b\xd41%\ \xad\x8a\x09\xa1OT\xc4\x11I\xf3Df\x15*\x9a\x0c\ v\x19G\x15\xe0\x00\xd2\x01\xc0\x04\xbe+\x02\xf5\xf6\xc1\ ;G\xe1\xb7\xcd\x066m(+\xc5e1-\x18)\ Q\xd9\xa3\x0b\x86\xda\xe6\x09c&\x88x\x0d\x85y\x0e\ z3\x0a\xe6\xa2nX\x13\x15=-\x1a\xaa\xcfdl\ \x00-p)\x8c5g\xf2\xb3\x00\x7fQ\x8d\x90F\x84\ \x95b\xe8f\x03\x9b\xda\x99H8\xa4\xe9\x95\x95=\x14\ d\x83\x98H\xa4\xe1o\x0e\xe8\x8a\x02\xa0G\x11$]\ \xbaq\xf8\x97\x02\x1b\x81\xcf5D\x82\xa7\x0b\x820T\ !.\x1a\xd2\x88\xaa\x8d\xb7\x09> \x04\xe0\x97\xac\xcd\ \x07t\x01\x88\xc0\xb4\x22\xb2\xdc\x04\xe5\x11\x8e\xed\x13\xa3\ \xa2\x12\x97\x12\xc2\xb6\xac!\xab\x8a\xee\xd3c# M\ 9*\x87BP\xb3\x9f\xaf\xdaH\x9fN\xfb<\xd5M\ 6\x22\xc5\x14\xa4\x98\x86\xc3d\xdcH\x97\xa5\x8e\x03\xd4\ J\xa2\xf2\xcc\x8d\xc0\x12#\x92C\xe8.5\x9d`,\ \xe8\x01\x7f\xad\x0f|\x05\xa5\x96\x057\x89\x0b2ec\ \xc31\xa2\x09-)\xa7%A\x01M\xedK\xf1\x01\x14\ \x0ctB\xe3\xf6\xb4\xa6q5RQ$\x9aJ\xe3M\ \xf8L3\xdf\xd5\xc98\xae\xd57q\x8c\x16.Ll\ \xed#\xe36\x0e\xa7n\x92\x0c)n\x08C\xe3\xba!\ e\x84\x01M\xdd7.\x0cI\x86!+#~\xb3\xb5\ \x16\xb0)\x91\xc2nF\xcb#\xaf\xef\xb0\x97\xc1\x0a,\ \xecR\xc3\x81\xa4\x81Yt\x04J\xdfO\xd8\x9d7:\ \x8b\x04\xf8\xd8o\xeaV\xa0\x9c,r\x11\xba\x90o\xb2\ \xfb\xa7]\xfa\xa2\xbe\x1e-B\x83\xa3\xbc\x88\x14cs\ \x91+\x01\xe0t\x1b`V\xd4\xf51UK\xf8\x02M\ \x92~\x9b\xf5\x16\xa3\x04\x90Me)\xda\xf2K\x80\x96\ \x02\xc8\x1c;z6jsm\xd4r\xba\xa4Q\x0e\x16\ D\xc5\xc1\xd3\x07\xcb-Eay\xacD\xb20\xf1%\ \xd2,\x90\x1b\x0c\x88\xe4Z\xa3\x8a\xddY\xcdf\x18\x84\ !g$\x9f\x1e\xa6\x81\x1f\xa0\x90\xe5\x80\xc2[\x880\ \x8fHM\xb7$\x06\xb1t\x94\xf4\xc0j\x86'\x88`\ ?\x13\xe9\x19\xf0\xfd\xfeBd\xd4\x0cZE\xd6\xba\xa7\ \xa2|\xd4|\x07'\xcdQI\xbd\xe0B\x18\x82\x9e\x95\ $?\xea\xd7X\x9c\xef\x80\x0f\xd0&\x0bL\x11\xe7\xac\ 67\xa8\xa5\xa7\xa4\xd5\x91\xdd\ c\xb2\x02\xd0]\xca\xb1\xcb\x5c,\xfc\x92\xac\xdc\x98V\ Y@\xc2\xfb\xa9A0=\xa8q \x13\xde\xee\xd1\x91\ p\xcc\x0fb\xc4\x15P\xfck\x88n\xda\xf6rL\xcb\ \x08\xac4\xaa&\xb3y\xe2`\xceF5K\xdd\x9c4\ \xa8\x7f\x09\x9d\xde\x8di9\x1bSEf\xb4z#\xd4\ \x0c\x96\xab\x8b\x1aEE~\x1a\xb9\xf9\x02r\xf9w\xdf\ \x0d#\xa6\x0b\x85\xfar\xef\x98\x22\xec\xf8&i\x06\xa8\ QM\xd2SEN\xd32D \x8bc\xd0\xf2B\x16\ L\xdf\xc7\x00\x19t(\x1d]5\x08C\x03\xf5\xd7\xa3\ \xeb\xb9\x80\xb9\x5cdK\x96\x05\xe8\x80\xec3\xe5\x8f\xa5\ R/\xc5 \xc5|\xbb\xdb\x93\xa8\x9cY \x88i\x0d\ \xac\xe9qA\xda'\xeb\x86>\x1f\xd9;\x03\x12\xc0\xec\ \xdf\xa5I\xca\x88)\xe3\xda\xcd\xf0\x17\x1b@\x07p\x91\ \xe4\x8a\xb9P.\x9a\xc0\x05H\xff\xb6B%\xecU\xce\ \xf6\xa6Y<\xc3@\xc1.\x14\xf9\xf3\x9ci\x91/\x87\ \xa7US\xf4\xe9\xe4\x03$\xe3^x-!\xafZ\x9f\ \xb0\xbf\xe8\xec\xeeG\xfc\x16s\xd88\x81\x1b\xc56p\ D4\xbc\xd6!%\xdd#\xccW<\x1a\xc8\xeb\xf68\ \x98\x0f\x92\xd61L\xc5'5\x1e\x84\x94\xa8\x0b1\x09\ D\x19X\x13\xc0\xf31)\x09&\xf6|\xc1\xe3\xbfN\ 0\xbd\xc7\xd5\x9c\xa0\xe7\xcc?\xc6D\xc5\xa0\x8b\x04\x9e\ \x14\xc0\xbd@)\xbc\xae\xbd\xd5\x04a+4\xdf\xa9\x99\ \x1105\x86\xc9\x06*F\xed4\xb4\x89\x9c\x85\xcd\x96\ |\x0e\xb9RCG\x88\x91\xa6\xd8\x1fk\xf1\xb8-#\ \xddS\x02Op\xb1\xdcQ\xb4\xb4-\x89M\x99\xd5\x9a\ \xc0\x84i\xaf\xb5\xa3\xdf\xd1A6\x91\x1f\x81x\xeb\x01\ \x9d\xd7\x03\x16C\x0f\xd9\x01R\xb6\x0f~\xfb\xe1\x95e\ \x15\x04O\xd7e\xf9\xd3E\xc3\xbb\x22uK\x8419\ \x9d\x16\x12\x125\x1c\xbc&J\xb0\xa4<\xcc'\x0d\x22\ \xe9BRS3t\xca4\x98n-!$d}O\ {L\xeb\x18\xd8<\xd8\xd7\xd9\xbf\xb9\x7f\xb8\xf7\x82\xf9\ %\xcc[\xe2#\x9b7\xc3^&\xd6\x0c\xb2\xd9\xb2t\ \xa43S\xc1\x9a4\x81\xcbX7-\x0e\x0b\xe7$\x1a\ \xb1l6\x17#\xe6\x86=>k^\x13\xa6\xd8\x10M\ \xe1a\x89\xab\x050\xaf\xf9\xb8\x05\xe1\xa0\xa3\xc8+\x86\ \x0f>\x1d\xc2\x07\x9a\x94QG\xbd\xf9@\xa4lb\x19\ \x03\xb2!etAV\x98\xe9\xb47'\xe5$\xca\x03\ \xc8\x1a\x0b:\xe1\x9b\x96\xd9\xa0/\x00\xc9\xa0\x1b%p\ \x04Ybr\xc4F\x0f/\xdb\xdbx\x9c\x01\xa3\xda\xe8\ 8\xda\x9c\x01\xe9\x0bd\x99\xaf\x01>\xe1\x0bf:g\ lK\x89b\xa0\xb4\xdbP\xe8deq\x225\xd3l\ \xb3d\xbfe\xc4e\x00\xb27\xdcS\x01\xeef\x1d\xbc\ ?\x11\x0d\x09\xf0\x02\x85\xb4\x944\x8aA\xe0\x98\xcd|\ \xdf\x1e\x0f\x9a=nBB\xa9H<\xa6\xc0v\xd8<\ \xab\x98&\x92\xa5V\xf6\x13+\x92\xe0\xbdb\xd9\x0a\x08\ Z1V\x08\x9a\xa9\xf2$**\x83xyD\xcb\xa9\ #\xa1j\xda\xf8|\xe1\x02P+q\x91Z\xf9&[\ '\xa4\xa4\x98K\x1b\x8c_\xe7\x87s\xa2\xe5\x92\x0e\xe1\ t\x19\x08\xd3\x9b\x82M\x14\xaa!\x1a\xb9\xa2\x98o-\ \xe7\xea\xf26\x9e\x812\x8e\xf2y\x12)\xe3\x07m&\ @\xc3\x8d\xa1$8\xf1\xb0|\xa5b\x80\x0e\x14\x88\xd8\ \x1d\x9cu\xc0\xdb\x13,\xbce\xa0\xdb\x993\xa7\xc8\xc3\ &\xb0\xd1YjI\x94M\xaaK\x95\xc7U\xc5\x90\x95\ \x9c\xe4\xa8\xf1\xb05\xd9\x89l!\x92U\xc8D\x8b\x91\ -,\xc6\xd1`\xe2\xb3fVE\xce\xb1\xe2:5Y\ \x5c\x05J(!(*\x9dh=\xab*\x89`8-\ \xc5\xc3!\xbc\xc58\xd3\x13V\xb0\xc9H\xbeR\x1a0\ \xf8\x1d\x82\xd7\xe3\xdc\xaa1\xcc\xb5k\x19\x8a\x1e\x9e\x80\ )F\xa8\xe1>\x8e\x9c\xe4e\xd69zj\x15\xaeC\ \xc9\x9ch\xcb\xc4w\x06\xdae\x0f\x94-\x1e6N0\ \xe7h(K\x86\xa9\x9c\xcf\xed2\x0b\x86&\x83U\x80\ \x06\x1b\xd5\x08\xab\x04]\x82\x99O\x84\xd8\xd2\xb8\x89\xe8\ \x10F\x07\xc20I\xc8\x96\xb8\x13b\x8d\x9b\x96\xb3\x83\ \xdet\x0b=\xdd\x8c\xaeJa\x93\xf0I\xe0\xf5\x09\x84\ \x96Db\xee\xcf3\xbf4\x14f\x16\xa1\xd8\xe6\x05\xfd\ $\x81\xe6\x00\x15<\x9a\xf9T\x90\x1b\xb6xcJ\x8a\ \xefa\xa6\x91\x22\x19c\xaa\xb6GX$\x0cJ:F\ \xef\xdc\xfb\xf2\xfe\xb86\x97\x12\x14\xf2\xd8\xef\xb2\xa2@\ a\xd4\x0f\x86\x92E\xa1\xac`\xc8\x93\xd2\xcc\x814\xcd\ \x864\x14OI\x89\x5cZ\x0a]n\x9b\xac\x88&)\ e\xe7\xc7\xd9\x05\xc3\xf0g\x08\xd9V\x85\x0cH\xb6\x05\ \x97\x86\xf1\xcc,'D\xa6p\x90\xd4l6l@W\ \x80:\x0d7\x0b-nf\x1ea\xdc\xf4\x9f\x9d\xddT\ \xe6\x8f\xa9v\xb0\xd6R\x02\x1a\xf2<\x0bb\xb1\x96\xed\ \xc4P^T]\xeb`\x89\x8d\xb6\x8c\xb6XVSG\ `\xb1\x82\x0b6.\x8c\xca\x09I\x05\x83]IHZ\ \xc8\xe2\xa0[M\x8c\xc1\x99\xd7\xb1\x9c\x0f\x90n\xd64\ U\x13\x96\x87\xe8\x16w\x17-\xf4'\xaf\x8b\x96\x96\x96\ \xe0.\xa6\xe4a\xe1\xc4\xaa\xab\xb1\x830\xf5\xb6\x10\xec\ E\x91\x8b\xfeYv\xb3\xcf\xdeO7\xd0\x07\x8c_{\ \xef\xc7\xbf\xe3n\xdcH\xa0l\xeb\x84\xd7,A\xca\x0c\ \x97\xfd\xd8\xb9\x13xSP\xb2\xc8\xa6Ch;-6\ \xf0\x93\xfbdE\xce\xc8\xfb%\xaa$u\xb6)nh\ \xe2x\xd8\x00{\xedX\x06[\x9d\xf1B~\xb3a\xd4\ \xf6\xa9\xa3\xb22\x22\x84I\x9b\x99\xe0N*(\x07\x99\ \xb2\x101\x00\xe3\x04_j\xfbA\xd3u\xa9\xb90\x9d\ \xda\x01\x92Q4\x03\xb1,*\xb6\xdf4\xe4$L\x96\ \x11\xcdp,\x95\x98\xb1\x02::\x93=\x9b\xc2\x93\x14\ 57\x92\x02GS\x92\x04=+\xc6%\xe0\xee\xb6`\ \xf8g\x01u\x16{:\x8a^*7g\xc6i\xf9\xd5\ t\xda6\xc7\x15\x12u\xd4\xf0z.\x1e\x87\xf5\x94\xcc\ \xa5C\x96\xd0\xa1c\x85\x8ef\xb3\x84\xbc\x95\xb6\xe34\ \xcc\xfc\x8da\x88,\x81\x14\xa5\x0b\xe3\xad\xbc\xddY\xaf\ D\x1b\x1d{\xb2\xe2J\xee\x0d\xaf\xee\xc0\xf1\x09\x03i\ I\xd4\x81\xdc \x00\xc1\xa9\x93\x84\xa4\x9aN\xabc\x94\ \x85\xac\x5c\x1d\x90&\x9an\x84\xad\xc3\xd5\xc7B\x8a\xe2\ &!D\x82\xcc\x08T\xce\xd1b\xf5o\xcc\xc7\xc0\xb2\ \x9c\x1a:\x1b\xa3\x9cIf\x0d\xe7\xa8iT\x09y\xb6\ \x8b\x13g\xb3\xed\x1d\x1b\xa9\xd393\x0a<\x15\x1c\xaf\ i\xd3P\xd9\x80vN\x98\xcd\xec\x8d-\x0b\x8f\xb88\ \xc73\xbc\x0f\xff\xeb\xa9\x1c\xa6\xe2\xa0w\x1f\x0c-Y\ \x94\xf1\x990y\xd1\x8f\x16\xa1F\xae\x8di\xb3\x1bS\ C\x1b\xa7x2\xd7\x82\x12\xc9e\x93\xfee\xa1~F\ \x18\xeaEc~\xb1\x0f\xe6\xbc\xc9\xac\xd9\xd6va\xf2\xc8\xa8\xa9_y/.\ x\xf7\xc3k\xcb^1\xf7\xda\xcc\x8d{g[~H\ R\x12\x82nm\xcb[\x0cNS\xf4\x83\x91\x9bU\x80\ \x5c~\xd7\xd5\xd8uX?\xed0/\xf9\xa9*V\x00\ \x9c\x0e\xe8-;*\xc5\x82\xe4\x0a\x96\x19P\x05\xca\xfb\ eS\x86h\xe2\x0a\x05\x22\xecD(a{*^@\ \x03=d\x04P\x94\x87l\xe0f\x9d\x86Ar\xd9\xf4\ \xe8\x0a\xb7\xd2\x14\xce\xb4\xd2\xcd\x08\xb3c=\xf3\xa1\xef\ \x093\x1e\xc7L0\xcd4n\x0c\x974\xe3\x0c\xad!\ \x15\x94/\xdb\x902#\x96\x86\x19\x1b\xd7`\x82y\xbb\ %4\x102l\x0ay\xcd\xb2\xf4\xb9\xb9\xa5)\x08\xb1\ \x10\xd3g\x18\xd7\x9c%\x99\xbd$w\xe1\xa6c\x18k\ ;#\x9dM\xc5\x97k\x1f\xce\xd4\xd0!\xe3\xda\xe1\xc2\ J\xf3\xc0\xea\xf8\xf4\xc7\xe9C\xc7\xab8\xa6a\x8c\xc5\ \xa5&\x9c\x08\xc4\xb0\xa5\x1d\xc2\x22\x19\x05}\xb8\xa8\x17\ \xb5\xfb\x09!W\x1b\xe6\xa3H\xe8\x1b\xf0\x11)\xcb\xd6\ \xe6\xednf\x83\xb1\xe0\x90\xc1-\xcf\xa9\xe0\xccI\x18\ :S\xe3\xf1\x1ce\xc4\xb0\x9d&\xdd\xd7\xabp3A\ ]\xd1~\xc3Z\x5c\xf1\x19\xac\xf0\x1a1\xfdo\x07o\ \xb6\xec\xd8r5P\xb8\xa4\xf3\xc2\xec\xb3\x92\xc9LV\ \xa2!$\xf4Ke\x05\x84y:\x1d\xaa\xd2\xa6\xe5\xe9\ G\xbe\xcb\xda\xa4\xac\xc8z*\xb4\x8f\xe6<\xd23+\ =\x83\xbbU\x06J\xc34j;\xccSrDV&\ \xb7\x8f\xf2\x1e\x12>L\x08\xf3\xe1\xff\xc2B\x16g\xa7\ d\x05)\xd8+q\x16$\x86\xfa\xcd\x08\x1e\xdd\xfaX\ a\xed}\x84\xb1\xaagf\x883\xc7\x5c\xd2\x05&<\ q=\xf1\x0ai\x91w\xed\x8aC\xeeEV\x84\xd8\xbf\ \x97i\xd0K\x1f\xf2\xb0\xb59\xc2\xa5\xcf-\xda\x9c\x90\ \x0d\xffg\xa7\xc0\xb3]\x9e\xb9\xb0\x95\x8bh\x16\xac\xff\ \x93Q\xccX\xa6Am\x89{\xa6[Jg\xfd\x9f\x99\ kB\xf31\xcc\x9c\x82\xaeEh\x83\x05\x0f9O\x1d\ rH\xec\x90\xa51\xffg7xl\x09[.W~\ \x15\x16\xddMJ\xa0b\xc5\xed[\xcf\xe4\xdd\xce\x5cB\ VY\xca0\xdb?n\x13\xac}\xe9\x0f\x13\x01,\x0f\ \xd3\x8bB`}\x00\x02>+\xd4\x07<\xdd\xc6\xee\x93\ q\xc9~$\xa0s%\x80\xf6J\x05\xf0\xee\xdaI\x05\ \x98\xcc\xa9\xe4w\x80\xfc\xa6r\x07\xee\xf9\x9c ^*\ \x1e\x81\xe2y\xa9\xecf\xe8\x86\xd6gg`\xca:\xf0\ o\xba\x07\x9b\x80\xaeY\x82<\x15K\xe3\xf8w\xd6#\ %\xcc\x09-\xb3\xec\x9a\xb7l\xe3\x96U/\x05\x09x\ \xc7\x16\xcd\x98\xbdj\xa6\xca\xb7\xb2}-'\xb6\x05^\ oD\x05 sF\x80\x82B\xd7\xb26d\x1b\x8e\x9c\ \x07y\x84\xf8'i/&\xect\x08\xcb\xc6\xe2\x83\xe5\ \x0c+\xcb2\xcb\xc7\xbf\x10K\xb6\xd8\x0d\xdc\xdad\xfd\ \xb0dB;\xe4cNY\xd6N\x0ash\xdb\xea\xcc\ \x81=\x9dO\xb4\xa7\x8cL\xba\xa3=\x05~hkG\ {LM\x8cw\xb4g\xad\x9c1'a,\xabI\xa3\ \x12M\xf7\x00\xeb\xcfT\x84\x98\x046\xa2\x9a\xe1N=\ -I\xd9\x16>\x91\xac\xc7@\x93B\xa2f\xb9\x086\ \x99\x9cd[\xe6YuL\xd2\xc0\xa5\xc14s\x0cL\ \xe7\xf4,xT\xd8\x91\xd3\xbd\x983\xd4\x0c\x18@q\ 0F\xc6[\x80\xc1\xb24\xa7\x0c\xf1kE\x9c\x83\xf4\ U^]\xbd#\xf6\xb1v>H_u\x9a\xbee\xd2\ \xd13\x9d\xe0@\x8f\x06\xe8\x99A\x9f\xda\xec\xfc\xc4\x8c\ c\xa9\xd5>\x89\x16R\xf7Kc\x85\xf5\xda\xde\xb8\x9c\ ?\xf9\xb8\xe4E\x15fybd\x06\x16\xbc\x91\xa2\x89\ 8t6\xde\xb4\x1d\xa2\xe2\x06\xdf\xd8I\xeb\x0fl#\ )H\xd3wb\xb2Y\xda^\x0f\x9c\xa6\xef\xccfY\ (\xdb\xef\xd9\x8d\xf9\xc1?'<\xb3\xd1\x0c\xe6\xf9?\ \xbe\x09\xdc.\xb4o8\x07\x9f\xcf\xf1\xb4\xb2n\x02\xdd\ ?'\xe5\x85\xd5Bp\xa4\xd5\x03\xb8U+\xa8\xc2(\ .\xd7\xd5\xbd\xad\x9d\x8fmqs#0L\xa9\x97j\ '\x89\xda\xce`:\x10\xedF\xcc\x93,\xccm\xa9\xe1\ SZ\xbc\x1f\x9d\xe1\x95-\xea\xd8\xd3\x5cr\xa8\x7f\x1f\ \xb4\xd4\x9fE+\xad\xe5!\xb9\x16\x88%h\x83\xf2\x14\ \xddKb\xfaFM\x02F\xc1U\x816i\xe0j\xb8\ \xc2\x86\xbf\xdf^\x9e\xf9Z\xd8\xc0\xf1\x19\xa6\x1208\ \xf5\xc5\x92\xf8\xc69\xce\xb2\x96\xb2\x0e\xee\x14{5\xe2\ \xda\xc4t\xbf\xe78ikL\xacE\xc1\x90\xf6\x19L\ \x9dc\xc9u\xce\xc0,\x7f\x9cR\xd9h\xa6/$\x9a\ kB\xdb\xf9\xfe\xe3JN\x02]K\xe1\xc0\xd9&\xfe\ \x0aP\xdd\xe6\xbc\xbd\xc1.\xc1\xa5`\x03y\xe5\xa5\xfa\ e\xf6\x17\x93\x17\xee\x13\x93\xe4*\xd0X\xd2\xbd]\x22\ d\xafnj\xc2\x050\xea\xcc\x10\xb7\xaf&\xdc\xeb[\ \xe1i\xf3\x95\x9c\x95\x05&\x9e?\x8c~\xdf\x93\x15\xbc\ \xc3O13&Ai\x1b-\x94B6\x06\x0bl\x0c\ b\xaa\x01\xb6\x80\xa0&\xa3h P\xe9\xc2\xe2M\xfe\ H]\x19\x80\x94d\x06\x8c-C\x97\x05Gs\xf6t\ \xb3\xfa\x19\xc7\xa5\xa2\xeff1\xf4C\xbfy\x81\xa9]\ \xe9\x19R\x12.\xb9\x1d&+\xa9\xf8\x8a.\xd38'\ \x1cV\xda\xc3`\xb9Z*\x08M\xe6\x8bQ\xfb\xe9\x02\ 0Gr1\xa9Y\xd8!g$\xb5Y\x90\x8cx\x80\ \xe8\xf0\xe2\x88\x09\xd7\x91>E\xc4\x13\xa6\xf8\xc6\x01\x22\ \xc1a\x80\x22O;\x186\xcb\x97\xbd;\xa9\xe7\xf3\xbf\ \x1c%\xbd\xd9\x8a\xe5x?\xb5\xa4\xd8\xd4zG&;\ \x99\xf4\x14!\xa1WJ\x06\xaa\xa4\xf3\xcc\xd8\x9e\x91G\ \x91}A\x14i\xf4\x09\x8bD\x82\xa3\x22\xa7\x06\xd5Z\ ;Q\x1d\xf4\xf0\xfa\xc5 j.p\x95Q{\xfat\ y\xfd\xd1\x82j\xff\xfeVch\xdc\x92\xd8\xfcrq\ \xb4\x0c\xbft\xf2\xf4`\x17\xf4'0\xef\x90\x1a\x85z\ \xa0\x1e\x5c\x06\xb6\x93\xe8\x92\xfalc?ckA\xdb\ \xedr,\xc2.\xba\xec\x05\x1a\xe2\xdd$\x06\x19\x0a5\ \x05a\xa7Hp\xd4\xe9X\xf2\x0a\xb93%\xbc;\xdd\ Ez\x90i\xf9\x22H/\x82\xba%L\x98I\xe0&\ \xfa\xdc\x9e\x0c\x96M\x22\xc1\x99P\x19\xa6\xfa\x9c\xcev\ \xfd\xd7\x92sQ\x84$\xb8\x11\x17\xba\xa0\x13\x9c\xfb\ \xe9\x0e\xf2N\xdb\x0a\x1e\x9fu\xd8O\xe7\x98\xb8'\xc8\ 8(\x9cl\x06V\x09\x98\xec\x86^\xb1\xa8\xb9>\xa6\ sM\x86\xacsM\xfc\xf8\xc7\xf7h\x13?\xab\xf2\x84\ \xa6\x8f\x9ad\x1e6\xd3G\xbdq\xb8\x0d3\xb0\x9d\xa4\ \xd1\x13f\xdb\x10\xbeP\x9a\xb1+\x0bKX#\xe7\x0a\ \xe4\xed\xf1\xb4\xf4\xd1\xda\x1c\x1f+\x08\xd3\xe0\x14\x15\xd4\ \xbb\xc6\x95\xc5{\x0f\xf3\xd0_\xe20\xf3V\xe5\xca\xd2\ \x06\x1b\xb8P\xbb`\xbctt\xac*\x87\xcfz\xf2v\ \xf0\xc2\x0c\xd2Yn\xdcz\xd0}\xdbd&\x05\xfaE\ d\xfb\xcc\xad\x5c7\xb9K\x07>\xd3\x0b\xf8\xf6\x00\xc1\ \x9c\xf5\x19\xfd\xe2<\xe0\x02r\x83\x81\xde?S\x87a\ \xf3k\x1dN\xa3\x10+c\x19\x9d$\xa7\xc4\x0cQ\xc5\ m=\xc5H\x8f;\xc9\x04\xe6&4P\x8c\xbaE*\ xG\x9a\x1a\xb0\x97pi\x01\xf1N<\xeeg\x04\xe3\ \x9e\xcb\x16\x85y#f\x8d\x8b\x05!\xb1(\xcd\xde\x0e\ \x0b\x8b}rr\x0e\xcf \x9e5\x81N\xd1$;R\ \xc3\xac\xf8s\xd6Y\x88\x0c\xf9\xd0N\xf6\xf0\xb3\xdb\x02\ N\x9a\xc9\x13%\xf5\xf6i3\x81Rb\x03p\x19\x1f\ \xe1.f\xaf\x9fE\x00\xb3HR^G6\x0e\x889\ \xdd9\xba0\xc8!\x190\x0b^\xac\x92A\xf7V-\ \xcd\xc6\xa65\x81\xe2H`\xfc\xf4\xa3;\xe2\xc4\x7fX\ \x1a\xc9?V\x8a\x0b4\x0dh\xf4T)I\x89\x07\xfb\ \xef\xecT\xae\xbc\xd4M\xc7[\x1a0\xf3/\x83\xe2]\ \x03f\x14\x9br\x0a;j\x82\xcfu\xd7h]\xb7!\ \x07aqjQ\x9b\xa9\x95!{\xa9k}\x02'!\ \x05\xbd\x0e\x13\x0f\xb2\xd2\xdc\x100\xe9\xc0\xf8\xcc\xb1g\ \x87yV\xe0;\x89-&r\x05\xea\xda\xb4\xa7\x83\xa3\ \xb0\xed\x9e8\x17yF\x80\x93Ib\xe2\xe0\x14\xda\x07\ \x19\xd3\xa5\x9f\xae\xd2d\x9e\xae\x22*\xdc\x01+'\xa2\ w9\xb8\xf7\xb5\x98`Xr\x0a7\x0f\x09\xb3\xb0\xc3\ e\xd3Z\x9f\x5c\xb8B\xd7\x8a?\xf4&\xed\xb8\x1f\x98\ \x19G\xcf\xbb\x09\xf6\xe6W\xfb&\xfa\xc5\xec\x14J'\ \xb5\x85\x8e&W\x90\x7f\xd7')\xb9\x98\x18 \x91\xfc\ \x07\x93%\xa2\x19\x10\xb7vv\xd8n\x86\xe6\x1aL\x13\ \x82\x19\xa2^\xeb\x80\xa8\xb0cp\xfd|V/H\x8b\ \xf1\xf5\xbf\xda\x0e\xcc\xf1\xb96'1l\x1c\x9fF\xe8\ \x89\xab\x01\xe6g\xaa\x00\xa7V\xec\xf7\xc4a8\x87b\ \xd8\x8a^>W\xb9'\xc8\x81h6\xba\x13\xf0\x9c\xc8\ \xcbP*g\x84X\xd8\xf5|$\xc7q:\x83\xc35\ \xc5f2\xfa\x05\x877\x15\xe4\xf9\xa6IQ\x19X\xec\ \xa0B\x96\xd4\x11\xb42\xbc\x00\x14\xab2\xea\x18\x90\x10\ \x8dQ\xd2\xc9\x8a\xc1\xa1\xc96\x0ftK\x15\xe3S\xcc\ #\x1c\x8b\x90\xe2\x8d.p\x13\xdc\xc4\xd1.\x82\x82\x13\ \xf5|T\xdf\xd9\xa7\x0e\x0f\xd4\xe7\xe7\x87\x96\x9e\xa5j\ \xfb\x02|z\x1c\xe6\x85\xd2\xd3`\x98K\xe0\xa8O\x7f\ \x5cV\x15\xe0R\xbc\x0ah@x\xe1\x0a\xc0\x0bF\xb1\ \xcc\x17E\x18!\xbcwV\x01\x80R\xd9\xa5\xc9L\xa9\ \x0d\xe7\x96\x0dy\xb0Z\xdd\xc7\x9c\x97D\xc0\x19\x14j\ +;\x0f\xbd\x08:.\x08?\xc0\xc4\x99\x1b\xfb\xbc\x92\ \xc1\xc0\x98\xdd\x12\xb2\xc8\xacipW\xc0[Gf\xd9\ {3N\xcf;\x16\x99yOJ\xa0kUj\xbf\xf5\ ;\x8a\xeav\x8ao*a$8\x93\xf0\x04\x9cB2\ \xcd*\xdc:\xe1Gm\xf8A\xfa\x8b/\x10\xf5C|\ rJ\x97\xfcz/17\xdd\xaf\x9bI\xcc\x97i\xb4\ A\x94\x9a-\xe3\xf5d\x1b\xc6\x83\x92\xe8\x18d\x08\x9f\ \xc7VB\xa4\xc4v\xc3{\x94\xa4\xaae\xb0\x0a\xdc\x0f\ \xe0\xaa\x82\xeb!\x8a\x07\xe4\x9c\xf6\xc1\xed\xd3x\x01\x99\ \xe3s:\x18_\xfbP\xe7\xec\xac\xb6\xf9\xf5\xd3\x5c\xf4\ \xf9_|\xcf3<\x8e\xfc\xf2\x05q|G\xb8{\xf5\ X\xcf\xdd^\xe0 U\xd5k_H\xe0=\xd2c9\ .\xfdd\xef\xe3\xd2}\xa1\xcc\xcd\x8bh\xf9E\xab*\ 1Z\xe5\xd7\xcbG\x19]\xf2^}\x05\x0e\xb0Cv\ \xe6\xdc\xfa=Z\x9c\x7f\xe1\x0d\xb4 \xa1\xd9\x09CY\ I\xc4\xa5\x82\x8dP3\xc2\xef\xa1EE\x9cz\xe6\xba\ \x0b\xc3u\xd0\x99/2e\xd6\xa9\x81\x85\x87\x9cy\x95\ \x8a\x17U\xc8H\x02\xcfT\xb4Oq\xf4:\xb9\xd2]\ \x0c\x17\xe7\xaep\xe1\x8df~\xb2U[\x1c$\x91\x0e\ ,\xf8\x9f/\xed\xf3q\xb7r\xdc}\xcf\x08\x0e8\xb6\ \x8d?\x13\xb4\xb0R\xd3<\x10\xc4}p#=\xe3\xd1\ z\x04\xcb\xee\xe2x\xbb\x0c(^q\x8f$H\xc9$\ =\xb8\x02\x0f\x87\xa6v\x09\xed\x91\xaac\xa7S\xd7A\ pSuv\x05L\x9e\x92{)\xf0\x8c]\x0d=\x0d\ \xeb4%\x96\x93\xcd\x9f\xb6\xcb\x1f}?\x19\xe7\xedn\ \xe7\xfac)vL\xda\x14\xee\xfa\x15s\xfc\xe6\xee\xfc\ \xe37\xf5\x148\xe3qX\xa4\xf6\xc9\xb9 \xb1\x02\x0f\ \xce\xdd\xae\xd3l<\xb6G\xa8*R\xe1\xc1\x9a>d\ m)\xbe\x80\xd7m\x01\x16\xb2\xc6|\x7f0e\xed%\ e\xf4S3\xcf\xbaH+i\xc7+\xac\xcc\xe4\x9c\x19\ 4\xb5r\xad\x04;\xf4h\x1d.\xa9\xe1\xcc\xc7=\xf2\ \x9au|5J\xac\x0a\xb2-\x00i\x1bh\xa7\xe5@\ \x86\x01\xe0\xa5Vr>h\x91^\xfb5\xcd\x8f\xa7\xb7\ (\xa6\xcd't\x13\x06\x8b\xce\xc7l?\x98\x96>\xac\ \x04\x83z\x15YM\xf0\xa8,\xb2\x96\xac\x81\x9f3\xe1\ W@\xc7\xdd9\x9c\xb2\x0d?=\x0b\xbe\xbd\x92\x94\x96\ }\x7f\xbbw\xf6\xbd\x80\xb7\x8a%\xc1T\x140\xaa\xaa\ 0\xbd\x09\xbc\x22l\x19\xda\xd6\xbf|p`c\xeb\xf9\ }\xbd\xb4\x15tI\x1b\xa5\x17P\xa8\x98\x16\x07\x8ce\ \xa8-\xc2\x80\xaa\xebr,-\x09;\xc4t\x8e^\xa0\ \xb2r\xc5\xaa\xd5\xc2ra\xed\x9a5g\xae\xb16\xcb\ \xda\x84\xb5g\xadX\xe9\x93X\xdf`M\xbb3\xe5\x03\ %My'\xe7\xefZFb\x9b=m\xdcm\x1a\x84\ U'\xbaK\x80\x05\xc2\xee\xab3\x08;\x9b!gN\ \xb4\x93>\x93\x17\x896\xa5\xb8`\xee\x97\xc41\x17\xc3\ :\xf1\xc1:\x0d\x85>\x93\xc3\xf7\xad{BX\xda\x9f\ b\x9a/\x8e\xf4\xe6O2\x0d\xbe\x1c+\xe8\xbc\xd2b\ \xd9\xe0*o6\xe84`>\xa9\x8d\xd4&\xec\xd4T\ \x10\xb0\xf4\x82\x11!#\x8e\x0bq\xdc\x9e\x03\xed\x08s\ \x9c\xd1\xe7\x83\xea\xa7gi\xc7EM\xc2\xfag\x9ac\ \x98\xc0k\x0f\x98\xdc\xb6\x0fD5'u~\xb1s\x0e\ \xb8\x962\xe7]\x9cc@\xaf@\xed\x86\x19\xef\x83\x9f\ Rh\xb1\xda\x9b\x16]\xe8)\x08\xdd\xddm}}E\ c\xff\xc3\x92\xb0g\x8b\x9a]\xac\x9a\x7f\x01\x9b\xdb\xd0\ \xb5\xf8\x9a9@\xa3\xc4\xba&M.\xc6[3EY\ \x0ay\x8f&s\x95B\x9dm\xde\xd4\x19\x92l!\x01\ \xc65;\xa8SNr\xc5\xd9\xa2\x9c\x96\x12-E/\ \xf5\xa7\x8e\x99pF \xe1\x0a\x0f#u\x08j\xe5\xc9\ Y\x97\xd985_\x0a\xe1\xf7\xb4u\x9f\x09\xa0\x92\x9d\ \x9d\x9c\x17T\x8b\x15>9\x85\xd1\x00\x91\x14\x1f\x1fM\ \xe3\x18\x9c#\xde\xd3\xf6\xb8y-\xd5\x0d\xc6\xf10\xde\ \xdd\xc5L=\xc3\xde\x80\x92\x88\x93:\xef\xc4\x86X\x08\ e\x0dh\x983Kd\x98#\xfe\x0c\x83\xb5V\xac\x8c\ \x99\xaa\x8f1\x11DHL2\xc6\xa8u\xa2I\xc8D\ -\x8eWc\xd5ka5\x18~>.p\xe7\x13\x08\ c)x\x0c\xfb\x14\xba\x87\x87\x07\x04K1\xd1\xaf\xe6\ 4\x05\xbe!\x0a\xc2\x9a\x15g\x9a\x81,]*\x9a\x1b\ \xc9\xe1\xe3\x5c\xc6b\x11\x1cV\xc8\x9b\xa5V\xd2\xad\x0f\ \xa04\xcd\xed\xce\xd1\xd2z\x8b\xe0~\xf5l\x1e\xa3\xff\ \xd31\xd7N&q4q\xd7JH\xe3\x1a\x9d\xe0,\ +\x0d\xd7\x87A\xf8\x93\xeft\xcf\xa7-\x05l\xed\xac\ \x05W^\xd2\xe0\xe3>\x8c2\xa9\xd8\xbfC\xf1\xd28\ \xf8\xc2\x80\x0a\xc5\xa4\x04\x9e\xab&\xa1N\xa4AR<\ \x8a\x17\xa8\x8cu\x86\xe6\x91\xf7\xb4\xf4\x17w\xf0\x8a\x17\ \x7f\xe5\x93T\xae:a\xc7e\xf8\x8c9f\xfb\xc49\ \xf1\xc7\xec\x8e\x04\xd1\xf1\xaf=\xf8\xde\x10\xfc\xf4\x02\xc4\ a\xf8w\x08\x99\xb1\xd0Ea\xac}\xd4\x9c\x0a\x16t\ r\xee\x97`\xf1XfK\xb1C\x91\xd3\x9c\xaf[,\ \xf9\xb5\xf0\x02QqT\x95A\x04\x0c\x0d\xf5\xb6\x0e\xf7\ \x0e\x81\x8b\x03\x0c\x9e\xa2\x8e\x22U;0=-\xc2\x06\ `~j\xb1\xd0\x0b?\x0csv\xc6@\xca\xc8\xfa\x9e\ \xa2m\x91\xff*\x22&\xffUD|B\x8a\x88=\x84\ \xee\xeb%\xf1\x9a{e\xf2w\xca\xca\x9c\x9b\xe9u|\ \x97\xe3\xe5\x88\xc4\xa9\x22=J\x043\xfc\xc1\x8c\x0d\xcb\ \x87\xe7y%\xb8`\xb7\x94\xd9\x8b{\xcf\xdev\x9d\xd2\ 2\x03n\x83\x9cMK|\xc4\x16\x8f0MI\xe9,\ \x8b,\xd3dR\x9c\x13\xcb\x1a(^\xb3\xd7\xdb\xe5\xd6\ |\xee\x05\x16\x5c\xb3=\x01\x8fg>\x9ajk\x0fD\ \xdaJF\xc4\xde~tj(,\x80N\xd1\x8c\x0f\xb4\ b\xae\xb5.|\xaa\xe8\xe2f\x8fg\xfd\xeb\xc4\xaa\xd8\ e\xd3>\xcfm\xc9\x7f\xce\x96Ln\xaf\xdf\xdbsf\ \x92.\xff\x00\xdd\xd9\xe6\xf5\xd6\xe66\xa5\xe9\xce\xda\x17\ n\x16\x22\xb1\x10\x14g*O\x84\xb3\xf8\x91\x15\xf9q\ ]7\xbbQM\x83\xcf\xac\xc7S\x92}\xd5\xa8\xd7\x84\ [A4\xde\x9ar\xdb\x92\x96_\x13\xc7 \x9b\xb5\xe0\ \x9d\x1d\x83\x93\x00R.\x03khcN\x07\xd1$\xef\ \x17\x03X\xbd\xb4jg\x8f\x0e\xbe\xeb*\xc9\xb5p\xb3\ nh\x5c\x9e\x97\xefl\xc5\xc2\x18u\xfaL\x01\xc6T\ \x83U\xe7hULr\x95\x8e.\x9b\xf0\xc4$yo\ 0K}\xf5\x5c,\x89\x99\xd5:\x06\xc3\xfar\xba\x1c\ o\xc6\xa5\xa37\x0b---X\x84n2\x87\xe3\xfc\ :\xf7\xae{\x91x \x00n\x8d\x19*\xf3\xa3\xef\xa6\ \xc0t\xd5\xc2\xe2\x88\xe0\xe3\xa0N2\x0b\x85\x9d\x0dR\ \x9a\xab\xef\x03:m\xdf\x8c\xc9\xcc\xf5\x5c\x81\x0ern\ \xaf\xd5\x88;\xd5\xcd=\xd1\xa3\x84\xbf2\x83\x1f@\xd6\ \xb4@\xb8\xb3\x83\xd9m\x9a\xd4\x96\x8b\xd3\xc4\xe3\xa4L\ \x8f;\xa5\xaa\x1b|=\x1a\xb1\xa4\xba\x17\x94\x82\xe6\x87\ \xf6\xa4o\xe8z\xc0\x98\xbc;\xe5\x93\xfc\x9d\xf2\x85\x80\ J,\xc7\xf5\xe8a\xbd\xad\x00G\xf3h\xaf\xe7\x11(\ 4aq\xb3\x22\xd2\x88o\xbfj\xce\x0a\xb5\xba\x86\xe8\ \x81\xfe~d\xda\xe5\x01{R\x92(\xb9\xf4\x89\x93M\ \xac\xbcr(=P\x9a\xbc2_\x8f\xce\x8f\xa5\xea\xd6\ \xa3\x9bI*[\xf5T\xb8\x03\xe6\xd6L\xfe%\xd6U\ ]\xaa}\x81s\xe1s\xa3\x05\xa5\xabE\x9e2J\xdc\ A\xcb\x98i\xcc0M\xc66i3\xdc\x98X0\xde\ \xca\x1aq\xe6`)\xa6\xc9\xe2\x19\xa5,\xfb\x89Z\xe9\ qz#\xab\x10\xcb\x19\x06\xf0a<-\xc7\xf7H\x89\ \x16\xdf\x81\xf7\xd8\x5c\xe7N\x19\xa8\xa6y\xc1\xba\xef\xc8\ \x0f\x93\xa7\x88s\xbf\xca\xa8)\xea\x9cdP\x16\xdc\x17\ \xd1\xf0\x1a!\xce\x15\xd9\xcd\xa6\xbc/f\x8b\xecX\x17\ \x81#\x06\xd6\xf4$\x85\x98\xa6\x8e\xe9\xccSQ\xc1O\ \x91\x12\xcdB\xc1N,\x0d\x0f\xb9o\x09\xf1\x18\xf2\xf0\ \x89()v\x12\x1a\x02\x8a\x89}\xa5\xedd\x94\x11[\ \xfe\x9a]F\xec\xc9&\xbd\xe6\x06M.o}D{\ \xc1:\xcc\x81+\xe8\xcb)\x93S\x7f\xec\xd1\xf1\xdby\ \xa90\x94\xa5\xf6\xa1\x90\xcaq\xb2\xc69\x81\xc5\xbaB\ \x22\x8e\xbb\xfe\x16\xb3\xa29jf\x1a0\x1fS\xc7\x9e\ \xd2\xe8\x7f.\x013\xc3Y\xa6^\x0c\xcd\xbc\xfcQ\x0c\ \xb5I>\xfe\xa7w\x05\xbf\x15\x1f\xc8\x80\xa8\xc8\x10>\ \x18\xaf\x93\xa5\xe81r\x98\xd8\xa4I\xf5\x89\xfb\xe4L\ .\xc3\xed:\xb0#chJ\x9e\x98\xa5A\xb9\xb6\xf6\ \x98\x06\xee\xa4\x9e\x01\xd7\xbbc\x09\xb7\x04t\x89F\x9c\ m\xc7\x92\x9d\x8a\xc1\x9e\x16\x0dA\xc4h\xe9\xd2\xf6V\ \xf6\xa0\x0f\xd5\x0b\xab\xad\xf9\x8b\x9b'\xbb\xda\xda\x03\x81\ \x0f\xb5&\xd7\xd3p\xf8\x10\x0ar=\xe0\xb6\x80\x00\x1a\ \xc7\xb0E\x98\xfc\xcb\xbbS\xd3e\x97\x18\xe3Y\xff\xa5\ :\x07WT\xb0Hm\xe0\xbb\xf33p&?K\xad\ h \xde;\x84\x9c\x89\xd9\xef\xde\xad\xf3\xed>\x02\xf6\ \xf2V\xfb\xb1\xf2m[}M\xd1\x92\x0a1}z(\ \xa5\xe6\xd1\xc7\x9a\xcd\xa2\xd6\xb1R_u\xc2\x1f\xec\x9b\ \x7f\x16\x14s\x89\xe8{\xccx\xe1o:\xc7{)\xe8\ \xd1N{\xa4q?x\xbe\xa7\xb6\x9c\x97\x93\xfd\xac\xc0\ %0_9L\xc2\xf4N8ai\x22\xae\xb9\xa2i\ \x16\x5c\x1e\x86\xef\x5c\xad\xc7\xd4\x1b\xc3\x14I\xc7\xe5\x09\ \x9a\xc5\x80Ey\x82\xed\xa6Z\xb4\x8eB\xf06c\xac\ \xbb!\xf3r\xca\x9c\x08\xcb`N\xe1\x8d\x11\x10\xc5h\ \xa0\xe4\xfc$\x81\x80\xe7\xe4\xd3\x91\x8e\x10VP\xa9\xd9\ \x93\xae\xbaJ\xdc\xaa\x87D\x18K\xa7\x1f\xfe\xd3\xb0\xde\ \xd0\x95\xec\xc5\xe5&\x9a\x89S\xbe\xee{\xc1\xb3\x1c\xe0\ Z\xebi?\xd0\xd7z\xd4\xbaY\xbb\xaf\xf9\xf63\x0b\ L)\xc8\xc4V\xfa\x88\xf7noq\xf7\x05z\xdf\xef\ \xf8q\xac\x8c\xb3c\x17\xd6\xfd\x12BB\x16\xd3\xea\x08\ \xdbe\xb5?\xa5;`\xe6A\xdb\xbeQ\x82b/!\ p\x5c\x19\xef\xbbfJ9\xc5\xf04\xf7 \xeckf\ \xc6\xec\x1b\x0c\xe5+\xd3BK\xcd<\xc52}f\xbc\x00R\xf5\ \x901\x9e\xf6\x07\xb5\xdav\xfe\xbd6\xe9\x97\x14l\xd0\ /uSo\xd8\xdcd_bn\xb1/\xf5\x054P\ ph\x16\x9b\x0a'\xf4\x91_2\xee\xe6@\xfe6O\ \xf7\x14\xce\x18V\xd540 \xc68t`\x95\x00\xca\ \x1e_U\x95\xa7\xfa\xe1Ck\xee\x01x]6\xea_\ \x125\x83/\x89\x0a\x09\xb6M\xc3\xeb\xa5\xd3f\x12g\ ^f\xf9\x0e\xca\xc6\xfe$8\xe0\x0a\xf7x\x9d\x06\xc9\ '\xff0\x99c\x89\xda\xb0\xeb\xbe\x16s\x82<\xe8\xbc\ Ig\xf2\xce\xa0\x97\x92\x09YI\x93\xd5\x84\x9d\x08#\ \x89\xf1\x14'p\x15V\xa6\xe7\xb7.c%\x0d((\ \x9b)\x9c\xe1\x17{\xa1k\xe6\xed\x14\xb1\x08\x0aw\xaf\ \x8er\xba\xa18\x8a5\xd2\xdd+p\x97\x18M\x10R\ \x94\x9e%Z\xda\xb6U\xfe#\xf4|V'\x13s2\ \x0eg\x99i\xee\x1ey\x1c\xcf\x92\x0f\x9c\x96-\xa8\xf6\ V\xd4\x84\xa7\xf7\xc4\x8f\xa3~\x93\xc4\x8e\xd6\xa1\xf5\xaf\ ^\x1dNz\xc0;\x1f\xc0\x89\x89v\xe7Ca\xfe\xa6\ s\x93\x1e\xdbv\xd0\x89\x13g+\x16\xdet\x1b^V\ \xd4\xf51UKxCLr\xe1\xda\xc5\xae\xed\x0dw\ \xd8\x83\x1d\x8e{\xcc\xb8\xd9x\xcd\xb5\xf1\xca\xe9\x92\xa6\ \x88\x19\xf34\x5c\x13I/\x14\xb7\x14\x85\xe2\xb1\x92\xc7\ B\xc3\x9b<5\xa4\x07\x13\x08\x9d'+z\x06\xda\xbc\ \xbey|5c\xf9\xbdE\xedz1\xeeTu\x0c\x17\ z}\xfb\xd8\x5c\xf0\x99\xde.\xb8\x17\x00O\xff8\xff\ K\x1fe\x09X>.\xf5\xe8\xa8\xe7W?U\x0e\x80\ \xa3\xe29\xc0\xa8\x99\xd1\xbe\x8f\x8cs\xdf\xd6\xd4}\xe3\ ^\xdfn\x09]\xa6Y\xab7\x17\xfc)\xd8c\xc8\x8a\ <\xab\x04v\x0f\x04\x13\xcc\xd9\x0b8\x11\x1c&~\xa3\ C\x81\xc2\xf7C\xbcD\xe5\x14\x8cc\xeef7\xb1\xef\ \xf6(\x88\xfbP.5\x09\xc5\xe2C\xbc\x0a$\x14\x17\ \xa1@5Z\xb5[q\x96\x83\xed\xf0Mgb\x94\xda\ \x0b\x09\xfe\xa2\xba\xe9\xe3\x86\x98H\xd0\xc0q^\x09\xd4\ \xa9y\x85\x08\xae\x99uljs2\xb1\xb0\xa0-\xb0\ \xc36\x8c6\xc7q\xab\xdf\xc9\xc6\xf2?\xeb?\x83\xb1\ i\x9a\xc1\xc2\x0d\xa1K2\xc0\x94\xec\x93\xc0\x93\xb7\x0f\ \x94\xf2\x85\xd8\x9b\x07\xd1+\xc5\x84\x06\x0e\x0aK\xb1\xdd\ \xf0\xdd'\xc9\xcdD\x1c(\xdf04h\x01\xb6y\xa6\ \x9c/&\xdd\x1e\x95\x95,\x8bQ'\xb2\x1d0\xf1\xcc\ r\x22\xecz\xea4q\x1f\xc4;\xcf,\xa9\xc7r6\ A\x14F\xc5\xb4\x9c\xe0\xb6\x01\x02\xd1i\x06\xce\xf5\x14\ \x09\xc4\xd9\xe4\xb2I\xc2y\xeeLL\x88\xe6t\x07\x82\ 8\xee\x03$\x8afL\xd7\x02s\x18\xd3\x5cS!\x8c\ y-\xd5w\x15e\xff\x1f\xdf\x5c.\x05\ \x00\x001\x13\ \x00\ \x00\xb6\xfax\x9c\xed}i`\x1c\xc5\x95pI\x1a]\ \xa3\xd3\x07\xc2\x17N\xdb\x18#\x1bK\xb2\x0dv@Q\ \x84e\xd9\xb2dK\xb2\x90\xe4\x03\x0c\x98\xd6L\xcfL\ [3\xd3Cw\x8fd9!!\x84\x10\x02NB\x02\ \x18\xcc\x9a\x04c\x08$\xc0\xee\x06r\x106\xdf.9\ \xc8\x05|I\xd8l\xc8\xc1&!\x9b\xfb\xcbB\x12\xc2\ &\x84l\xf2\xbdzU\xdd]=\xd3\xdd3#\xdb\xf9\ \xbe\x1f\x1b\x07\x95f\xd4\xf5\xaa\xea\xbdW\xef\xaa\xf7\xaa\ \xbb\x1e\x8f.\xf8\xda\xcb\xc7n\x7fv\xd9\x92\x7f\xb9\xea\ \xf8\xff\xfa\xf7\x07\x08!\x95\xe9\xe4\xfe\xe1\xc1\xcd\x84\xd4\ =\x0e\x1f\xdeDH\xf8\x11\xd6\xce{/k\x8fL\xb0\ \xf6\xbe\x0d\x84\x0cw\x12r\xa2\x91\x84\xfe)\x04\xbf\xbf\ @B_\x87v\xe7K$\xf4\x8ds\x08\x19YEB\ \xdf\xbd\x85\x909m$\xf4\x1fOB\xfb$\x09\xfdz\ -!\x97<@*\xd7\xee d\xee\x00k\xc7?E\ *\x0fC\xbf;\x0cRy\xbc\x92\x90\xab>\xc0\xdac\ u\xa4\xf2\xa1\xab\x08I\x8e\x93\xca\xaf\x7f\x99\x10\xe5V\ \xb2\xf4\xbc\xbf\xc0\xe7g\xc9j:\xde&\x9d\xac\xa6\xe3\ l\xfa{\xb2\x9a\xc2\xdd\xf4\x0br\x1e}\xae\xe7R\xb2\ ~\xea%B\xde\x1b'\xdb\x8e|\x91\x90\xbe?\x93\xfe\ \xe9\x8b\x08\xe9\x7f\x84\xb5\x89\x09\xb2}\xe3\xed\x84,\xda\ N\x06\x8f\xc2Zv\x8e\x92\xa1\xa3c0\xbf}d\xe7\ SqB\xee\xba\x8d\x8c~w\x05!o~#\x19\xab\ <\x1b\xd6\xf7>\xb2\xfb0<\x7f\xe0\x8fd\x8fz\x08\ \xf0\xf0i\xd6\xde\xf7\x15\xb2\xe7\xc8k\xf0\xf9W\xac\xbd\ \xefOd\xefg?I\xc8\xbe\xdf\x93+6\xfe3!\ 7\x7f\x93\xdcqo3!\xf5\xdd\xe4\xd3\xffTNH\ \xe3\x0b\xe4\xf3\x8f|\x83\x90e\x8f\x93?\xd4\xfe\x80\x90\ 7Iee?{\x0e\xd6\xd5\xc7\xda\x8f\x1d,[\xf0\ \xd0\xb7\x08\x19\xda]6\xf1\xd6\xf7\x11\xb2\x22Y\xa6>\ \xf4\x8f\x80\xa7\xe9\xb2\xe9\x95\xd7\x11r\xe3\xef\xcan\xce\ 4\x12\xf2\xd6K\xcan}m;<\xff\x95\xb2/|\ \xfe\xd7\x84\xeco,{\x91\xb6\x7f\x17){}\xfd\x16\ B\xce!\xe5\x0dW\xc3\xfcGW\x95\xcf\xbb\xf5\x1eB\ \xcex\xbe|\xc3\x8b\x00o\xf7\x83\xac\xbdM*\x1f\x83\ i\x90\x96_\x95_q\xe6\xbf\x11\x12\xb9\xa5<2p\ \x09!\x8b\x7fW\x9e\xad\x03\x9a\x8e\x5c\xc5\xda\xf7]T\ \x9e}\x09\xe80\xf2\x91\xf2\xb7\xbf\xa3\x97\x90\x9bZ\xca\ o\x8fT\x00\xfd\xbe\x03-\xe0e\xf5\xeb\xe5w\xbd\x9a\ !d\xf9\xa2\xf2\x8f\xc5\xcf%D\x0e\x97?\xbc\xb8\x87\ \x90\x0d\xaf\x96?N\xf1\xd0\xb3\xa4\xfc[\x7f\xca\x12r\ y{\xf9\xf7\x1b\x80\xfe\x1f\xfeD\xf9o\xd7\xc0\xfc\xd7\ ?]\xfe\xdaSO\x01_MUT\xfed\x11\xcc\xfb\ \xd1\x8a\xda\x17\xd3\x84L\x7f\xb5\x22|I\x19!\xda\xf1\ \x8a\x86uW\x12\xb2\xe0x\xc5\xc2;\x7f\x0ft\xba\xae\ b\xc9S\xab\x09Q\xfb*\xba\xde\x09\xe3\xcf}\xb6b\ G\xdf\x7f\x00\x1d\xff\xc0\xda\x9b7\xb2\xf6xM\xc5\xfe\ \x01\x98o\xe4\x87\x15\xd7\x1f\x038k\x1f\xab\xf8\xe0s\ \xff\x9b\x90\xf7\xcf\xad\xb8k\xdf\x05\x844\xfd\x8c\xb5\xf7\ VW<\xf1\xc2\xe7\x80\xbe/W\xbc\xf0\x02\xf0\xcf\xe2\ \x13\x15/\xbc\xfa\x05X\xdf\xbb+~\xfa\x08\xac\xeb\xc2\ \x7f\xad\xf8\xf5\x07\xae%\xe4\xfc\xabB\xf5\xd7\x02\x1d\xb7\ \xdf\x17j\xd8\x0c\xf3\xeey\x7fh\xe1u\xc3\x84\xf4>\ \x10\xda\xfa(]\xcf9\xa1+\x06\xce\x07\xbem\x08]\ y\x0d\xf0\xe5\xd0\x0fC\xca\xc3\xaf\x02?\x9d\x11\x8a=\ \x0f\xeb\xa9\xbc&\x14\xa7\x9f\x9b_\x09\x1d\xfaGX\xcf\ \xbb\x96A\x0b\xeb\xde\xd6\x1e\xba\xb6\xea~B\xf6>\x11\ :\xfc\x8c\x09t<;t\xe7\xc0g\x81O^g\xed\ \x0dkX{\xcf\x9c\xd0\xd1\xc7\x00\xefw\xf6\x86\x8e\xb5\ \xbeH\xc8\xd8GCw?\x0c\xf4\xdb\x7fU\xe8C\xd7\ \x03\xddn\xb87t<\x05p;\xee\x0c}\xfa\xf7\x1f\ \x22\xc4\x9c\x0e=\xbdh\x80\x90uF\xe8\xe9\xbd\x07\x80\ /\xe7\xb0\xf6\xc4gCO\xff7\xfc\xbd\xe2\xc5\xd0\xb7\ \xf7\xc0\xbc\xdf\xf7\x5c\xe8\x97\xa1\x87\x08\xf9\xe8\xbd\xa1?\ \xdf\x00\xed\xbb\xbeXY{\x83LHw\xa2r\xde3\ \xe3\x84\x5c\xfcR\xe5\xdaax\xee\xc0\xd6\xca\xb5\xf7\xcf\ #\xe4\x8d\xe3\x95\xeb\xe8\xf7\xc3GY{\xf8\xb1\xcam\ \xb7\x00^\xca~\x5c\xb9\x93\xf2w\xf3\xdbX{\xef\xb1\ \xca\xfd\xed\x12\xd0wS\xe5\xfe\x07a\xdf\x9e\xfd\xc9\xca\ \xc8\xb1nB6\xbf\x97\xb5\x1f\xb9\xbfR\xed\x02<\xf5\ \xee\xaa<\xa0\xdf\x06x\xba\x9e\xb5\xef}\xae\xd2<\x02\ \xfc8\x7f1k\xefo\xad\x9cZ\x0c\xf3]2Z\xf9\ \xcek\x15\xe0_\xa5\xf2\xf0\xc3\xc0\x8f\x93\xf7T\x1e\xaf\ \x81y\x1d\xbb\xb8\xf2\x04\xc2}\x89\xb5\x0f\xcc\xa9|p\ \xef+\x84\xd4\xee\xa9\xfc\xd8\xcd@\xc7\x89w\xb0\xf6\xd8\ L\xe57V\xfd=!\xd7\xdcR\xf9\xad\x8b.#\xe4\ \xc1\xc9\xaa\xf2\xf9@oyOU\xad\xf6\x09\x90;\xd1\ \xaa\xc5\xd3\xb0\x8e\x8f\xb6T\x9dS\x0d|6\xd0Z\xb5\ \x8a~?\xe7O\xacU_e\xed\x89\xcdUm\x94\xfe\ \x9b\x1bY\xfb\x91\xc5U\x17Q>\xd8\xb2\x92\xb5\x0f\xbc\ \xb3\xaa\xf3\x9b\xb0\x7f\xaf\xfc\x1c\xb4\xbf\x03~^X\xd5\ \xf5f\xc0\xc7\x87\x86\xab\xb6\xb5\x02?n\x9fS5t\ 1\xec\xc75R\xd5\xbe_\xc3|v\x93\xaa+\xd6\xc1\ \xfe\xaf\x19\xa92g~K\xc8\x8e\xfa*\xf3Z\xd87\ \x17g\xab\x0e~\xf9\xe3\x84t\xbd\xc0\xda\xf8\xa3UG\ ~~\x1f\xcc\xfb\x89\xaa\xbb@L\x923\x97U\xdd\xf5\ k\x90\x03{_\xab\xba\xebU\xe0\x8b\xa37U\x1dk\ \x05>\xff\xc0\xee\xaaO\xfd3\xe0\xbb\xe1\xc3UO\xad\ \xa2\xfb\xe4\xa6\xaag\xbe}\x02\xe4\xd0CU/\x8cA\ \xdbXV\xf5\xd37\x80\x1c\xdc\xb4\xbe\xea\xa7\xeb\xa0\x1d\ \xfcj\xd5/6\x1b\x80\xa7\xc7\xab^\xfe,\xec\xdf\xa6\ \x19\xd6\x1e\xbf\xbb\xba\xee\x16\xa0\xcf\x1b\xde^=\x7f\xf5\ R\xe0\xb3g\xaa\x17\xde\x06\xfb\xf7\x8a\xa7\xaa\xcf\xfa\x11\ \xc0\xbf{[\xf5\xfaK`\xde\xa3'\xaa7>\x0b\x9f\ o\xbe\x9e\xb5\xc7\xc7\xaa7~\x1d\xda\xc6\xf7W_\x84\ \xcf\x1b\xd5]\x03s\x08Y\xf9\x03\xd6\xc6\xce\xab\x1e\xbd\ \x00\xe4\xd8\x9e\xc5\xac\xbd\xed\x96\xea}+\xe1\xb9\xd6\x96\ \xeah\xfa\x09\xd03\x9b\xab\xff\xee\x0a\x90\xdfG\x9a\xaa\ \x8f\xad\x83\xfd}\xf7\x1f\xab\x9f\xfd&\xd0;\xfa\x09\xd6\ \xde\xfd\x99\xea?\xbe\x06t\xfa`OM\xe8iJ\xa7\ \x1bk\xe6\xbd\x17\xf0\x18z\xb4f\xd7w\x80O6\xfe\ \xa2&\xdev/!\x0b[X{\xa9^s\xdd\x0e\x98\ \x7f\xa6\xbc\xe6v\x09\xd6_{\x7f\xcdC?\xae\x05\xf9\ \xffK\xd6\xde\x10\xabyx\xe1Ah\xbfW\xf3D\xf7\ \xd5\x84\xacz[\xcd\x97\x9f\x03<\xbe\xf9D\xcd\x7f\xdd\ \x08\xeb\x98\xaf\xb1\xf6\xfe\x99\xda\xf3\x9a6\x11\xd26R\ \xdb\xfeU\xd8\xb7\x97\x0c\xb3\xf6}o\xad\xedn\x00z\ F{k{\x86\xe7\x12\xd2\xfe\x9b\xda\xd1\xf0\xaf`\x9c\ _\xd5\xeey\x1e\xf6\xe5\x15u\xb5W\xbe\xe7_\x01\xff\ \xc9\xda\xab\xaa@\x0e\xca\x0f\xd4N\xd0\xf6\x8c\xa3\xb5\xf1\ 2\x10\xbc\xc7~R\x9b\xfa\x1a\xe0\xbb\xf3\xa6\xda\xb7\xfe\ \xbe\x9d\x90\xeb~^{\xcd(\xf0u\xd3\x9a\xdak\x1e\ \x069|\xce\xd3\xb5ok\x84yw\xffw\xeda\x13\ \xe0\x1cm\xaa\xbd\xf59\xa0K\xe2X\xed\x91>\xc0\xd3\ \xea\xb3j\x8f\xec\x02\xb9\xb6\xfa@\xed}\x9f\x03\xfe\xbb\ \xf4\xeb\xb5\x8f\xbf\x1d\xf8\x05f\xf0\x84\xf2(!\xbb\xae\ \xa8}\xf2\xe9]\x84\x5cf\xb0\xf6\xc8\xe1\xda/\xee\xbc\ \x15\xe6\xf9\xd1\xda/\xc6\xff\x0a\xf2mu\xed\xf3g\x01\ \xfd\x07\xaf\x0cW)o\x03\xbd\xb2=\x5c\xfd\x9f G\ \xa6n\x08\xd7\xbf\x1b\xf8\xdb\xf8tx\xf9e{\x80\xcf\ V\x84;\x92\xd0\xff\x8e\xbf\x84\xb7\xea \xa7\x8e>\x1d\ \xde\xff<\xfc\xfd\xcc\xb7\x84\xf7\xbf\xf2:\xc81\x85\xb5\ \xef\x1a\x0b\xab\xb1\xaf\x12r\xd1\x97X{\xd5W\xc2F\ 7\xec\xbf\xba{\xc37\x7f\x81\xea\xef\x85\xe1;\x08\xc8\ \xd3\x96[\xc2\xf7^\x0a\xeb\xbe\xf3c\xe1\x07\xef\xfa\x09\ \xf0\xdf\xb6\xf0\x93\xad`\x1f\x1c{\xa4n\xcd\x03\xcb\xa0\ \xbfT\xd7\xfd\xecV\xd8\x97a\xd6~\xe0Wu}W\ \x83\x1e?\xeb\xe7u\xbb\xae\x06y\xddY_w\x95\x0e\ \xf0n\xfbK]\xfc0\xc8\xd7\xae\xeb\xeb\xd2\x1f\x87\xbf\ \xbf\xe3\xc6\xba\xa9\xd0o@\xaf\xf6\xd6\x1d\xfa\x1c\xc8\x9f\ 9\x87\xeb\xde\xf2%\x90\x93\x1b\x1f\xaa{\xcf4\xc8\x97\ \xfeQ\xd6&\xea\xeaN\xbcP\x0ft}\xae\xee+_\ \x06\xb9\xf6\x9eg\xea~t\x1c\xda\xed\xc3\xac\xbd\xf1\xc3\ u/\x7f\x07\xf0\xb9\xe1\xe6\xba\xd7n\x7f\x0c\xf8\xf3\x9b\ u\xaf\xdd\x01\xeb\x18\xaa\xaa{\xfd3o\x04\xfe=\x5c\ _\xf63\xd8\x7f\xd1\xff\xaa_\xf4\x19\xe0K\xf9\x17\xf5\ \xad\x0b\xc1\x0e\xb9\xf2\xcc\xfa\xf5O\x82\xfd\x10^_?\ \xf2\xfd}\xb0\xee\x1f\xd6\xef}\x16\xe8u\xe8_\xea'\ \xf6\x81\x9c\xbfR\xabW\x9a\x80\xceW]\xc2\xda\xc9\xef\ \xd7\x1b\xcd\x80\xcf\xc8\x85\xf5G\xae\x06\xba\x9f\xf9\x1b\xd6\ .?Q\x7fT\x01<\xad~\xac\xfe\xeea*\x0f\x9f\ \xae\xff\xd8\xc3\xd5@\xaf\xa9\xfa\x87\xfe\x08z\xfd\xf2w\ \xd7\x7f\xf2\x06\xf8\xfb\x81C\xac\xbd\xfd\x83\xf5\x9f\xdf\x01\ \xfc\xf1\xee}\xf5\xff\xfey\xd87\xfbZY{\xe4\x99\ \xfa\x1f-\x02yx\xfb%\xf5\xaf\xff\xe8&\x90;\xc9\ \x06\xf2\x07\xa0\xe3-\xcf7\x84\xbe\x10!\xe4\xbc\xaf5\ T\xbd\xf8#\xa0\xebC\x0dsz;@\xbe\x7f\xa6\xe1\ \x0d\xed\xfd\xc0\x9fM\x0do\xf80\xc0;\xfcJC\xf7\ \x08\xac\x7f\xe1\x7f6\x5c\xfe*\xc8\xdf\x1d?n\xb8\xfa\ N\xd8\xf7U\xc3\x0dG_\x03\xbb0\xfco\xac]8\ \xcd\xda\xcb>\xc5\xda\xc9\xb5\xac\xbd\xef\xf2\x86\xfbV\x00\ \xde\x16ojx\xb4~!\x8c[\xd3\xf0\xfdW\xc2 \ \x0foj\x94\xd4\xe5\xc0\xd7\x8f6\xb6GA\xae]\xb6\ \xb4\xf1\xfc[@~W\xb44\xbeq\x00\x9e\xaf?\x01\ -\xe8\xf1\x07\x1b\x1a\xf7_\x0f\xfan\xe3p\xe3\xc1\x07\ \x01^\xc3\x06\xd6\xde\xd3\xdfxl\x18\xf6\xc5\xb9{\x1b\ \x1f\xfd\x0d\xac\xff\x03\x9fh\xfc\xe2v\xa0{\xcb\xb9\x8d\ _{\xf2(\xf0\xcd\xcfY{\xeb#\x8d\xdf\xfb\x16\xe0\ ?=\xd1\xf8\xd3u\xb0\xce\xf3\xff\xda\xf8\x0b\xfa\xfdy\ #\x8d\xaf\xac\x87}\xb2\xb6\x9c\xb5\xb1\x13M\xe5\xe7\x83\ \x1c\x19\xf9]S\x98\xf2\xc5=\xff\xd0\xb4\xf0e\xd8W\ \xfa\xd9M\x1b?\x05|\xb9\xa2\xae\xe9b\x1d\xe8r\xc1\ \xe1\xa6\x8bo\x00x\xdb\xbe\xdbt\xc5K0\xdf\x0d\xab\ X\x1b\x1fmR\xff\x01\xf4\xe1\xd1\xe1\xa6\xec\xc7a_\ \x8c-o\x9a\xb9\x1f\xf6\xd1\x96\xfbY\xfb\xf6\x0b\x9a\xde\ \xb2t>\xf0\x91\xdet\xcd\x1c\xe0\xfb\x05\x9b\x9a\xae\xbb\ \x07\xf8r\xf9+M\xc7\xee8\x13\xec\x9a\xbf6}d\ 7\xac\xe3\xfd_hz\xe0S\xc0G\xab\xceizx\ \x1f\xac{\xcd\xcf\xa0\x05\xben\xbf\xb8\xe9\xb1\x15 \x9f\ \xce\x89\xb2V\xf9R\xd37/\x06\xbeH\xbe\xa7\xe9\xdb\ ?\x05z\xcc<\xdd\xf4\xdd\x0a\xe0\xa7u\xbfm\xfa\xc1\ [\x00\x0f\xef\xfes\xd3+\x150\x8f\xea\x01\x95\x90\x87\ \xce\x04N([C\xc2\xa4\x87$\x89JF\x89B\x0e\ \x11\x99H\xf09\x05\x9fu2\x06\x9f\xe8o\xf4\xbf0\ \x19\x22\x1aI\xe07)\xf8\x19\x85\xbf;\xcfO\xc0g\ \x0d\xa0$\xe1s\x02\xbf\x8d\xc2_\x13\xd0k\x8c\xff\x1e\ \x87O\x12\x1f\xc9\xea\xa9B\xcb\xe0\x1a\xc4\x84\xcf1\x0e\ \xcd\xc0>t\xcc\xed\xfc[\x1d\xbf\x9f\x04\x18\x1aI\xc3\ \xdfd\x84\x13&;\xe0'\xed\xd3\x8f\xf3Rx\xaf~\ \xd2\x0e\xab\xb1\xa0\xb2\xd9o\x85\xbe\x14n\x1a\x9e\x1e\x87\ oL\xf8\xcf\xc0\x19\xe6\xae\x8b\xad\x9e>\xb7\x1bW\xc3\ \xa0\xa6\xe9H5T\x84V\xc1\x7fG\xc2=IuT\ 9$K=)U\x1f\x93SjJ\x0d\x0fi\x099\ \x95\x92\xa3:~?\x11\xd5\x92I9qH\x8e*\x89\ \xf0\x18\xfc\x8c'$\xe8D\xff\xa8*\xf0\xaca\xca1\ x\xcc\x90\xa3jx;\xfc\xaaK=\x93\x09-\x1d\x95\ \x93jx\x87*K\xfdrJ\x81?\xf5\xb7\x8f\xd2G\ \x01\xfc\xd6\x84!\xa7\xa5q\xd5T\x8d\x84=\x16\x0c\x9f\ \x96v\xcb\x09x4\xad\xca \x0aH\x9d<\xa1e\xcd\ \xfdYu\xbf\xa9\x97\x01\x85\xc9\xe3\xa4\x0bq\x94@\xbc\ \xc7\xc8\x9b\xe17\x13\xfee`\xfd\x9d\xa4\x03\xfe\xc5\x11\ \x1f\x09\x92\x05:\xb6\x93\x08\xe0#\x05\xdf\xee@\xbcS\ \x8cm\x83\x9fYxz\x9ac\xb3\x03~\xd7\xe0\xb9I\ h\xdb\xa0\xa7\x06?-\x98m\xf0\x9f\x0e\xdf\x1c$3\ \xa4\x1b\xa8o='\xe1s\x92\xfd\x9c$\xd9\x96\xd1\xb5\x833\ \xddc\xf4;\xc9\xd4$\xfa\x9d\x84\xdf\xd1\x9f\x07\x94\x88\ \xd9\xd5!w{\xe2L\x9f%\xce(\xc6(G\xaew\ \xfd\xde\x0d\x83\xac\x04\xf5\ \xac\x00\xa8)\x04\x1ba\xf4B\xa7B\x02\xc0\x19\xc6@\ \xae=\x15\x9d\x92\xd3\x11%*\xed\xcc\x98\xaa\x966|\ \xe0\xce\x05\xb3,\x8d&\x01C\xab\x88\x81\xaa^\x0a!\ \xe9\xbb\xec\x1etCX/)\x8f\xaf\xa8#AM\xdc\ I\x9c\xd9!\x17\xe4\x96^ w\x5cq\xd0\xdb\xa7%\ \xa3\x8c\xb5\x99\xb4\xf8\x85K\x5c\x89[x\x13\x9c\x9b\xbcL\xaa\ \x96\xe1ljB\xd1%-\x06\x93O\xa7A\x1c\xd2\xa1\ ;}\xc6\xf6\xb1o<\x9e\xac\x07\xa9\xcd\xb6\x86)\x8c\ V9\xa2\xe9\xa6\x1f\xf0\xb0#\xe8\x85\x0eT(\xfb2\ \x88\xa3\x19\xbcD\x83H\x9ff&\xdd\x0b\x0a\xa2\xd5.\ m\x93Ksq\xf3w\xe6\xc2.\xb8\xaf\x17pC\xc9\ \xd1\x8b\x94\x1e\xe2,\xc3\xa3JL\xd1\xf5\x80\xed\xb4\x1c\ \xb8X\xe3\x86\x8b\xca-\x8c4:\x96\x1a\xcc\xd2-\xf2\ \xe6\x8e*)\x05\xa9k&\xc0X\xcc\xc8f\xc2\x97Z\ N l\x83cc\x8c\xed\xec\xdd1\xb6\xc1\xd7:\xd9\ \x8c\xa6\x93\xcaMdQN\x85\xc7LY7\x83$\xd5\ rO\xc1*s\xfe4]X\xa9\xdf\x05\x98\x95\xc0\xbe\ M\x9b\x01t\xeb\x02h\xdd\xbe\xd6\x08u\xb1\xe8\xdf]\ 6H\xd7Dw\x9fe\x7ftuLt3\xe8\x0b\xe4\ \x18\xa8\xd8\xfdQ.\xaf\xf7\x1bz\xc4\xa5\xb3\xd9@\xdb\ \x90M4\xee\xe5y\x81o\x00\xf0c\xea\xa1\xa2!\xe7\ n\xae\x1aI\x92v\xee\x80\x1f\xb4\xeb\xfc\x9c\xaeN\xb7\ \x150%)g\xddL\xba((>\xa9\xe2\x14&\x05\ 03JZ\xc2u\x17\x80\xbc\x9e/5\xd7\xa8\x900\ \xe8\x1dG\x9a\xb1p\xf72\x0b\x01\xf68\x8b`\xf1\xb6\ \xc6\xeb\xd5R\x99$\xd8Z\xd1e\x14\x17\xc1\x83.\xe2\ \x83ra\xed\x8bY*\xbb\x1d\xcc\xfa\xc3k\xe5\xf0v\ \xa2\x7f\x9e\xb4m\x7f*<\x0dO\xe8\xcd\x94n\xf2\x14\ \xd8\x07F1\x030\x0bXGw1\x81nV\x1aw\ &\xfd-eK{\x131\x95c\x90\xa4\xcf\x05\x95\x95\ \xd0\xa6\xd9\xfeL)\x86\x01L\x0e\x8c.\xab\xe9\xf6B\ D\xf76C]\x84\xb7\x87\x9a\x8f$\xf70\xe8\x83h\ \x7f\xfaT\x9dJ\x09\xd9\x90\ &\x14\x10\x15\xa0_\x81C'\x94\x18\x98\xa3\xcb$\x8f\ \xff\xf5\x80\x99:\xa3e%#\xcb\x7f\x99\x96\xd3&e\ i\xe8)\x81!\x8e2\xec\xe2\xae\x0e>\x84-\xf6}\ \x89\xf2{\x1f\xa2l\xb1Q\x90\xe0\xbaM\xb1\xfd~\xcb\ \xbe\x9d\xe6V/\x0bB\x15K\x06\x89Gh(\xd2\xf2\ \x9d7\x91\xf1\xd2\xdc\x9d\xebB{\xa5\x1b\xb8}+\x19\ \x05K\xbe\x87\x0c\xc3o\xc3d\x5c\x88>0\xc2\x19\xb8\ \xcd\xe8\xacb\x5c7\x06\x93\xe3-\xb9\xe4\xa0\x91I\x99\ \x9a\xe2\xd2\xb4\x9aLJQ\x85\xaaO/BH\x96\x14\ \x05z\xd1X\x8a!\xc5t-EI\xa2\x039\xf5\xa8\ \x14U\x8d\xc9\xae\x09\xbd{d\xeb\xe8P\xcf\xf0\xd6\xe1\ \xf1\xc1K\x97\x15O\x97\xb2\x96\xff\x07t\x911\xb6\xe3\ \x15\xb7b\xa2;\x85\xfe\x18;\x02w\xb6\x88\xe3\x01\xe8\ 8\xaeE-\x8b2Q{+\x1f@\xbaJ\xd2\x02<\ \xee\xf7\x1e\xc9\x90\x16\x16E\xb9w\x15\xa0\x9c\xae\xa4\xb4\ )o\xca\xc9\x94\xb0\x96zTM%eHj\x9a\x99\ \x02Wg\x95\xacB\xa9\x86\xc4\x5c\xde\x03OZ\x8a\xd4\ X\x0e{\xd50K\xa0!\xb9\x90\xd3\xd0\xed7\xfa\xf9\ \x86^&\xd1|Xe\xaf\xe3\x1e\x0af\x91\xef\xa0+\ m;9\x7f{y\x0d1O0\x18\x95h1#l\ \xe1#\x8c\xf2\x8d\xcaC\xa4\x9c\xd0\x96+,\x81\x05\x18\ \xc7'\x22\xc8\xaa&Y\xe59\xfe\x12\x18\x7f\xab\x01\x1e\ \x8b\x8c\xca\x19<\x17)\xa9\xc4\xccb&2K\x93\xd5\ \x17^\x92\xc3\xdb\xceM\x8d,R\xcd\xe2`G&1\ \x83#\xea\xc1\xfb\xa2\x0d\x9a\xbf\x17)\x92\xf2-\xf66\ j\xf6j\xba>\xb3L\xba\x14\x04zD\xa6\xd6)g\ \xdf\xa8\x12\x93\xb3I\x93\xf1\xe5\xb2\xc2\x1c\xb7\x94\xaf`\ \x0c\xe7jbr\x86\x17V\x9a\xe8\x98\xa6lf\x8bb\ \xa9\xe56TwX\xc8\x0br\x0b@\xc6\xb3\x07\xf0\xa7\ %\xd8\x90J1\x03l\xce\x13s{P\xcf:\xfa\x98\ \x85\x16\xe2\xdc\x8b\xf0\xd0\xb4\xf6\x04VYRa\x8b\xe6\ R\x90\x11-m\xd2\x83xG9\x16\xdaGNn\x86\ \x84\xc4cN\xb2%T9\xa1\x1d\x8b\x08\xd3.@\xec\ G\xa5\xb4F\x09hd\xb4t4x\x8c\xd6\xe2\xc6\x10\ \xec\xae\x16\xcfQ\x0a\x18^\xf7\x159\xcc\x9b\x88\x84&\ \x0d3R\x99~\xce\xa25I\x8d,/\xbf\xc4J\xd6\ \x99\x10\xa0%8\xffk\xf69\xe7z\xdc=\x0a\x1e\xc7\ Z:=\xd7\xb4r\x96\xd8g/\x91m\x04\xb6B0\ \x8ah E\x05\xd2-\x13NE%SWA\xf7\xa2\ \xd9C\xa5\xf8z\xc9P\x80\xd2\xd1B\xb6h7\x0f\x09\ \xb9\xc503\x9f\xe9\xe4E\x84Y\x02[\xc7\xb0$n\ bGzZ\x935x\x14O)D\x8c4\x068\xd3\ (24n\xb8\xeb6\xa7\xab6G\xa7q&^\xca\ \xc2\x8a\xca'8AL\x14G\xa67\x89\xec\x99\x9e\xdb\ \x9bP\x22\x93\xcc@I+\xe6\xb4\xa6OJ+\xa5Q\ \xc5\xc0\x88\x91\xfb\x9c9H\x14\x14\x0cJx\x1c\xc7X\ q\x88`\xd8\xf9\xbe\xb5d\xab\xc7\x0czK\x22\xf4\xb9\ 6\xf4\xb1HB\x89f\x93J\x81\xcd\x96\x7fH#9\ \xc8\xf38\xa4\xc1PZ\x01tH\x1e0\xe3\x5c-b\ \x9c\xd9\x09n\x08p\xb5L\xa6\xd0d\x87\xd1\xd0\xcb7\ \x8f$\xbe\xed&\xd0\xfcR\x91\x1b\x1c\x83\x8c\xf2\xaa\x8a\ \xbfi\xf0W\xcd\xf6o\x1c~m\xb5\xa7\xa1\xa2\xd5\x93\ \xd1\xb58l1p?f\xa4)5\xaah`\xcc\xa6\ \xa3\x8a^\x80\x89\x97\x90>\x8c{\x9a\xb6\xbfi\xb1f\ \x9bxD\xb1U\xd75]j+ \xfd\x17x\x03\x93\ V\xe6\x00joo\x9f\x15 !b\x5c\x8d\x80\x0a\xa9\ #\x09\x83V\xa6}\x02amB\x05U\x90\xcb\xb3\xee\ \x07\x9c\x81\xe9i\x9f\x1b\xf8\x03\xed\x04\xc7\x85e\x8b\xa6\ \x88\xcc\xc5\xa7e\x14\x88Q\x0c\xf71*5\xa2\x9d\xe0\ \xc3\x99CjZM\xa9\x87\x14\xaa\xd0\x0cvzj\xea\ \xf2L\xe1}\xe5\x1cJdx,\xce\x84Q,\xa2\x89\ r\xa2vH\x9bR\xd3q\xa9\x90$X\x04Cg\xc7\x0cv\x8a\ \x16\x97\xe5W\xc8\x7f+v\xc2\xb9a\xbd\x93Y\xc0y\ \x85\x16P\xf4\xfc\xd7\xc0\x9e\xa13\xb0\xe6!Z\xcb\xfe\ ,\xb5J\x18_Wl3T\xc2dpa\x1b%\x0b\ \xa8\x09\x9a\x06\x18\xbc\xd2F.\x1c\xf6\xc8\xaaYP\x19\ w\xd9\x8b\x91K\x94[\xa2\xb4Z\xc9\x87\x04\x1b%\x9b\ R|$R!Y\xd4\x1f Hs\x0d,+\xb1\xc4\ Dg\x93mmK\x8c:\xf2j\x85(&\xedX\x92\ mL\xa1\x84,\x80\x9f\xc1\xd3\x22\xddW\x9f*\xf9\xbd\ \xc9\x9e\xde\xc9NiE\xe1)\x15\x9a\xcc\xf6\x92p\x95\ o3\x97\x88)\x9b\xa0Ea\xaa\xd5>\x85\xb1\x5c9\ \xc7\x03\x16\xa5\x8c\xc3=s\xf8\xd0 *\xc4C\xc7\x80\ \x11\xf6\x10\x96z\xe3\xe7\x85O\xa0\x91\xe4\x8c\xb0\x90\x8f\ \x90\xcdD\x01\xc5\x82wW`\xa4\xe5B\xee\x99\x15\xd1\ r\xf93\x821\xd4x\x09\x0dJY\xeeL\x01\xd1\xb6\ \xc2\x03p\xdea\xb6\xe3,1\xd0\x11\xfb\xf8:\x18x\ =\xd9a\xa5\x1a\x8bN\xc3(=\x9a*(\xa7\xd81\ \xb2\xe5KYb6\xe1\x12\xc4\xb6B\x10\xc0\x9f1j\ \xc9Z\xca2\xa8\xb8\x0b\x8e\xb5\xda\x87|\xb9\x9e|N\ 2Ii.z\xbb\xc7\xb1\xe9\x94=@6\xd7\xe5p\ \x8eI\xc7\x94tT2\xaccRk\x13\xd0\xfc\xe3B\ \xce\xe0\xee\x22\xc0W#\xf8B\xb0\xa8\xd9H\x05p\x0c\ E1\x85dE\x98\xbd\x8e\xf2\x9b\xc7\xe8!>\x05&\ \xedAh\x854\x9c\xdb\xaf\xcb\x07X\x8f\x00\x8b\xf2\xe7\ F1u'\x85&m\x9c{$\xce!\xc9!\xe4\xf1\ \xb4+ \x1cG\xcf&*\x84\xc6h\xbfI\x84\xe2\x8e\ *\x9d7\xa6\x81\xb2cG\x13<\x0ef\xf2\x98\xaa\x0e\ \xa4\x11uz\x81\xad\xd1\x82\xb3\xd4\x85(=\x8a%\x81\ *\xf4`x\xa2\x80i\xd0\xe5)\x7f\xfd\x8f\x8b\x0cA\ \xe6:\xabZHE\x85\xeb\xf4\x85k\xca\x02k\xd8\x0e\ ;T\xc7\x91'g\xad\x01\xa8\xac\x11\xa5\xff\xd9c'\ +\xf6\x9f\xc1\xaa\x09\xcbw\xd3J\xf6_\xd91';\ \xae\x9c\x84O\x96\xff/Fs\xbc\xd3\xc7\xdb\xe1/C\ \xf8\xfcd\x1e\xd4)[\xba\xd2=$\x09i\x94\x96\xf7\ b9e,A\x9dC\xb4\xf1\xa2\x8d'\x14]\xa1v\ l\xdaq\xa8\xe9Q&w\xa8\xe5)YM\xca\x13I\ \xf8\xcdD\xf49H\xc3\xe4\x16\xdb\x81\x8c$4\xcd\xa0\ \xa9\xbe\x1a<\xa5KZZ\x914]\x8a`\xda\x88A\ \xb9\x1b\xe1\x15\x90\x97+\x8bS\xadN\xbca\xdc\xd2\xa8\ \xa7Fe;\xbc\x1b\xb6!\x17`\xd6\xf5\x1c\xa0\xeaB\ z\x8c\xc7\xa5\xd8\x00q\x1cLGa\xe0\xaa\xae\x00\x87\ P\xc1\x90\x99\x16\x89d\xe9V/$\xcf|\xa2\xf5N\ zn\xd1\xbe\xc7\x85\xaeJNk\xfe\xa2\xf0R\xc8\xcb\ \x5c\x1c[\x1b_q\xa5\xd9,`\xd5\x9a\x16\xef\xa8i\ P[\xc9dA\xe5\xbd\x80\x0f\xe5o\x0d\xd4\xc6\xd4\xb4\ j$\x0aBj\x81\xe9g\xc9A\xee\x91\xb7YHw\ \x84{*{\x90\xeesDq0\xa8\x8dy\xd5\x0c\xe2\ i\xc6Z\xe2u\x9e\x01\x0bpD\x1d\x86\xd9y\x84\x8e\ \x1eK\xac\xb5\xce%\x0aQA\xac\xd9\x9c\x15\x15X]\ f\xa9T\x98\xef\x95\x8e\xe1\xb0\x91\x90\xed\x80\xf9C\x02\ \x1c11uen8\xdc\xa1\xe1J+\xf0\x1c\xd4\x7f\ 3@P\xa0\x7f~\x9ey\xe5\xca\xadQ\xd5\xf4\xef\xdb\ \x0c=]\xa9\x98BO\x9ar\xe9\xdf3\x0c=\xfbq\ \xe3d\x84>\xfdJ2\x13\xbc\xd2\x1c{\xd6I\xde]\ \x89\xc6\xab\x7f\xe7z>U\x8cP\x0bC\xeeV\x95i\ \xff^\x9bVF\ W\xa6\x944\xb3\x19\xb9^\xc4\x1c\xab\xb8\xc6\xa3\xa5F\ RQ2\xedb\x9e\xd6\x80\x89ZL\xa1\xbe\x8e\x0c\xe6\ \x97\x1ac\xa7\xd7\x19m\x1a,\xca\x14\xcbk\xc6\x98v\ \xd6\xc8\x80s\x89\x80\x1c\xf0r\xd6\xd4R`\xfbD@\ \xff\xcd\xb4\x03#eh\xca\x16\xce\xaf\x03\xe7\xec\xcf\xd5\ 5V\x91\xb6#\x9e\xb1\x1c;H\xa8\xf78\x0c\xe1\xe8\ \x82\x9e\x88\xa9N\x05\xe8\x82N~\x88\x96E\xa5\x97o\ \xf0\x17S\x93{\x06-\x97\x1dV\xa6\xf3\xebr\xbd\xc7\ \xec\x9a\xfd\x98B\xf8c\x81\xe7\xa8<\x02\xe2=p\xab\ \x80#\x16\x1f\xf0\xa9\xdesBL=4a\xdd6>\ \x82\x142+7\xa6\xbc\x9e\x9b\xab^\xd9\x93\xc9\xb0\xd8\ \xb7_\xdf\xde\xdcH\xa6\x13C\xea\xe5\x11\xca\xa0Uy\ \xd5~\xf2TG\xcf\xe4\xf9y,y^@\x9c\x11\xc0\ Y[\x84dI1\xc2\xa0\xa1\x81\xe8E\xbc\xa0\xb1%\ 66u\xc2\xed\xccG\xdb\x85K\x06N\xa4\x99\xecF\ \x07\xd7Dy\xa9\x8a\xd5\x91b~\x87\x9f\x02/*\x09\ \xd2\xb18\x85\xacG\x7f\xa8ksX9?\x1d/\x82\ n\x16\xaf\x16\x10\xd8w^\xaf\xae\xd0\xc8(\xe5`\xb4\ \xd7\x029\xf7\xad\xc0\x22\x0c\x0e\x13\xc6\x96[gbL\ \x82b\xdb\xad\xdf\xac\x0c\x9d)\xb4+%\x9e@\xcbR\ \xafX\xd9\xa0X\xc1*~k\xc5\x1f\xadMh\x08\xbe\ \xf9\x06>gY2\x95\x83&S\x93XJ\x9b51\ \x8d\x1c\x89\xa9\x9ak\xe8\x07\x85&t\xd0v\x99\xff\xaa\ \xba\x0b\x08\x82\x02\xd8t\x9c\x1d>\xaf4\xe0\xd2\xe6\xa5\ \xab\x83\x8d\xe0V\xdf eN\xc2\xa4P\xb6\xc3r\xb1\ \xed:\x0e{\xffPs%\x80I\x9a}\x9d\x92\x9a\xc2\ >I~\xd2\x90`\x13z'\x0d\x81\xd9\xe2\x0fo3\ f:\xb0\xd5Y\x15Q\x13\xc4*\xe7ceca\x81\ \x0f\x82*\xab\x97\xdb\xa3Nh&\xe8:I\x8b\x85Q\ \x01\xd2}\xcc\x82X\xfe\x13\x89zd.9\xe6\xda\xb9\ \x5c\xc4\xc4\x5c\xc6\xbdc\xd8]\x8a\xae\xf58^\xaa\xa3\ \x80\xf1L\xafDSq\xd2\x1a~\xa2\x93\x8f\x08\xac\xbb\ \xce\x9e*K2\xd2@\x041\x1f\x80\xda\x00\x97\x82j\ \xcdN(k\xa4\xddjJ\xd1\xd6H\x8a\x19\x09\xd8\x8c\ \xf3\xbdR\x9b\x9d@\xcd\x96\x22<\xd5ft\xc0\xbc\xfc\ \xccP!73\xb0B|\x9c\xd7]\xfaY\x15}9\ \x11\x89\xca\xadV(\xc2\xbb\xc7\xfa\xd2s\xac\x1d\x09\xe7\ $U\xd3iI\x83J,`a\xf4\xca\x8b\x98\x90C\ \xe0\xc6\xc9\xc1 \x9c4\xfa8\xde\xa1`\xbf{\x81_\ \xc9\xa8\x133@?dX\x0e\xc2\xe9\xd2<(q\x22\ \xd4\x87\xe6\xc0\xa2U\xa1\xfe\xb0V \x13\xb3\x0d\xe0\xc8\ _I\xc8\xa4si\x90>\xe8/1\x8f\x85\x9a>F\ \xa0\x06\xa1\x91\x11&5R\xae\x1863\xd05\xbe\xff\ \xe3\x8e\xe5\xd3G\xb7\xafD\xa3\x8e[\xe4 \xc5Z\x93\ \x17\xbc\x08\x05\xc7.JMn\x13\x8a\xe2\xfdl\xd8A\ \x01Y*\xc6\x10s\x8f\x1c,\xb9\xe1W\xa2\xb7x \ \x85\x15j\x88H\xa9\x8f\x0a\x05w\x8d\x9e\x8f%;\xeb\ \x91\x05B.u\x8d\x1ds\x8d\x1dH\xd3-E\x0co\ e\xe4\xf8X\x0a\xc1\xd3\x18\xa7j\x9e2n\xe04V\ \x83*\xcd\xf5\x0aE\xdf\xd4\xb3B}\x078[\xd6\xfd\ +=\xd3\xf2d\x90\x9d\xd0\xea\xe2]'{\xd0\x9f{\ \x1b\x06\xe5\xa2\x98w\x167M\x8cY7M\xf8m\x07\ \xdf\xcb&\xfc\xb8\xf7\x14\xa7er\xa4\x8e\xf3\xb4L\xef\ QG|\xcd\x1f1=3w\x0e\xee\xa3\x1b\xaa\xf9\xec\ \xfb\x08\xec\xb9\xb4\x0f\xd1\xba\x11\x1f#\x09S\xcc\xf8\x89\ \x8cS\x8c\xec=\xc5\xd1S=E\x81\xd7\xd7\x956\xc9\ @\xf6\xdf\xe81O\x1a\x10I\xa0\x16\x88\xfb\xcd\xdaq\ d\xdds\x19@\xafh\x0bO\x8e;=C\xb6x\x0d\ \xb9+@f\xf7y\x0c\xf8K\xf8\x97F\xef\xc1:\xef\ K\xf1\xe1\x0aO\xa0\x0d'\x80GLi39\xe3\x1c\ \xfa\xf3#gX=\xf5\x1f\xe8\xa1\x9d\xae\x05\x04\xa5\x8b\ \x9dW\xb1\x889/x^\xd9LQ\xb3j&\x03\xee\ \x00\x9dc\x1c\xd2,\xe1B1\x99\x0by0\xd3]\xe9\ \xe5w\x93\x97W\xd9\xff\x12V\xf6\xcfk\xb7\x1c\xee.\ \xb0\xe3N\xd1\xdd\x02\xc5\x19J.\xa0\xc2\xd6\xac\xb7o\ \xa9\x08\xdcu^u N\xa0\xd1\xed\xb95\x8e\xc8Y\ \xc3\xb9\xd7,\xc8\xb2g\xe91Va\x17V)\xb92\ yi\xe5\x96\x1c\x0f \xde\xe9\xbc>\xc1o\xd2\xbb\xed\ \x00\xb2b\xe5\xbf8ZkD\xa77\xcb(\xe9H\x90\ \x8b:\xd7\x86a\xa7\x1d:\x8e\xc5\x08\xcf*\xf4\xef\xbe\ \x08\xbd\x12\x96\x00a\xb9\x02\x19F]\x01{:\xad\x90\ 5\xd5`W\xd9\xefT\xab\xb2\xc0\xa1V\xabG~W\ \xb0?_?\xcaJ\x1c\x0b\x00\xee*6P \xd8z\ v\x10\xccI\xf7\xe0\x83\xe5\xa9\x1cni\x05\x87\xe0\xd6\ \x0b'\x07\xf9A\x91\xe0e\xce\xe1#;\xe5\xc5A{\ \xb4\xb8\xfb\x1c\x9a\xf8}\x0erZ\xb8\xd2\xe1TAT\ \x83!z\x15iY\xc9r2s\xba\xdcp1o\xb7\ \xf0\xde\x97\xdc\xf7m\xf0\xb0\xc8$a\xf7k\x890\x1b\ 0G\x8b\xde\x90\x11\xec`.\xe1\xa7\x85YL\xaeI\ \xda\x11m\xaf\x8c\xaf!%\x9d\x9d\x90\x03\xc5\xe7e8\ \x95\x0c\xb2\x98u\x87g>\xb8&\x047F\x1d\xa7\x11\ 9\xcd\xee\x89\xf4c\xaa\xb1|\x93\x12\xef6\x89 \x5c\ \xeb*_\xafQ\xce`\xa38\x96\xa64\x10\xd1\x02\x0c\ \x96\xbe\xd2\xc7\x22\x1d\x01\x9e\xe1\x22:~\x07\xba\x87B\ \x15\x92\xa4\x06N\x22(\xc4P;\x96\xc8\x9a\x05\xac\xae\ F\xf7\xd5O\x8e\x81\x1f\xec\xd5\x97\x92\x01\x17\xccH\xd6\ \x85\x97\xdey\x9a\xf5\xec\xea-v\xea\x1c\xc4\xe7\xf9\x82\ \xd2\x1b`\x1d\x03X@>\x16q\x1bXpTju\ \xa0p\xf3\x9eZ3\xbff\xac\x08\x99\xd6\x88\xd1\xba\xfc\ :\xcbj\x04\x11\xe4\xca\xd5\x8b\x87\xca\xce\x91Z\xe1\x08\ \xabs^\xe2\xd8\x80S\xa4P\x9e\x22;\xfct\xaf\x93\ e,\xd2[ \x98\xd1\xe8\xa8\x8d\xe0H\x8f_\xfe\xb9\ \xd7\x18\x0d8F1\x02\xd2\x9bq\xb4|U\x8f\x10\x0b\ \xf0\xcd\xda\x82d\xf7\x9bp\x13O\x9d,L\xfb\x0b}\ \x8a\x85'p#Nr1\x134\xd6|:V\x07\xbb\ r\xb7\x08\x1c5\xe7\xc6\x13\x1c,\xdbw\x12\x8c\x06F\ $\x96\x82%\xb62'\x0c.\xc4\xff\x1cx\xbbW\xf2\ T\x89t\xa0\xd9\xbdD\x88)\xfaC\xab\xdf]\x14\xb0\ \xb0G\xdeP(8m\xe8\x94\xde00\xd7*p\xf9\ \x1b\x17\xd3\xfb\x8d\xfb\xffi\x81\x9a\xdftOU\xa1\xc8\ \xc9\xc2\xf7\xcdj\xf5\x03\xbc\xb2\xb8\x83\xfb\xa0c\xfbF\ \x1bt\xa9\x87\xf6^=\xf3\x8dPJ\xd2\x18\xeay+\ \x15\xc61\x10\xe6\xdb\xce\xdc@:\xa6\xe9)\xac3\xf5\ \x03\x9d\x7f\xe0\xe7y\x93\xb8\x0dR\x08\x8f{\x81k\xf1\ \xbc\x87\xc7\xc9p\xa8s\x8e\xab:\xfd`\x5c0\x8b\x9b\ v\x9c\x11\xe6{\x5c\xae\xe3;\xd4\xc9\x5c\xfd\xeb\x05\xaf\ \xde\x0e\x91\x8b\xc9\xf7U\x83\xf6\xfd\xd7^\x9dN\xedE\ \xbbgz_\xb4\xeb;z3\xec\x22\xef8F%\xc6\ 1\xfc\xfa\x9d\xce\xc8\x83\xf7\xee\x11\xeb+\xddj\xb3\x8a\ \xb9]\xfe]\x8b\xb5\xc4\xbd\x11\x94\x93\xbd\xe8\x84*\xac\ \x9cA\xbf\xae\x8d\xd85\xdfb\x09Q5\xef?\xdb\x5c\ \x9et\x88\xdb\xe4\xbaj\xc8\x7f`\xbf[\xee\xfaI\x11\ W\xa8\x04\xddGf\xdfv\x96\x0b9\xb78H\xbc\x93\ _\xbc=\xdf\xca\x1cd\x9f\x98(\x14/:d\xdf\x98\ \xb6\xdc\xb5ROrK\xc6\xda\x03\xaeD\x12o\xb9\xcb\ \xaf&\xe3\x15\x1b\xee\x8b\xcd\xe8\x1dhV\x17,F\x8a\ \xe0k\x03@\xfd\xc9\x93\x8a\xa4\xc4b\xb4`\x1d\xaf\x13\ \xa5\x16\x02\x85H\x95\xa2\x03\xd4u\xc9\xd2\x1c\x83\xdd\xed\ \x9f\xa3V\x9e(x\xc5\x9d\xc1\x09\xcf\xd0a\x22j\x9c\ TKI\x90\x0f\xce\x85\xc6f\x097B\xee\xb0OA\ \xbd\xaac\x8a\xb9\x86n\x7f\xee5tF\x02\xdc\xc9\x08\ l!\xfbNG\x90\x19\x81W:\xeer\x97\xc9\xe4_\ 0\xe7\x83\xbe\xd6b\xb9\xd7\xb1\xaf\xf2\x89\xbf\xcc\x7f\x80\ \xb2\x03%%\xd7nC\x1c\xc6\x04\x5cf\xec\x98f\x1a\ \xcf\x0eS\xdc*a\x99k\xd3\xf6\x99\x11\xd3f\xdba\ \xcb\xec$\xc3 1Ga\x19\xbd0\xca^\xf0\xbb\x07\ \xed\xcfm\xfc`\xce*\xc3p\xce\x9cR\x9c;$.\ \xd0DM\xc9j\xa54\x97\x0eQ\x84\xd1\xad\x8d\xe7\xd4\ \xeb\xad\x03\xd7h=\xe8\x5c\xbc\xca\x86l$\x1b\xe0\xdf\ \xf9\xf0\x9f\x84o\x18\x92\xf8-\x1e\xf9\x97\xc19\xab\xb5\ R|7\x82\x03\xb4\x16\xe0\x95\x92N{\xbbw:\xad\ \x84\xaf\x84\x89\x81\xb1&a\x9c.\xcdt\x1a\xf0\x94\xb4\ }l\xe7p\xdb\xe8Ho\xc7\xde\xa1A\xdaJ\x86\xa2\ O\xd1\xab\xc75\xcc\x03\x02\x064\xb5viD3\x0c\ \x95\x96m\xed\x96\x93YzQ\xfe\xba\xb5\xeb/\x90\xda\ \xa4\x8d\x1b6\x9c\xbf\xc1:\xaa\xe8\x946^\xb8v\x9d\ O\xa6l\x83\xc5$\x0e\x07\xfe\xa6$\x06\x19\x14\x8c\xd1\ N\x81M\xa6l\xdbB!\xd6\xdb[\x5c\x07\x87\x82E\ \xcf\xce\xf0\xc5~\x0c\xe9\x87\x88u\xf9\x06\xdd\xfc\x9b\xb9\ \x17kr\xa9\x1b#,\x5c\xe7\xd4\xd1\xb0\xd4+\xc1\xf0\ ,1\xeb\xf9:o2\xf5\x98\x80oj_tJ{\ t\x0d\x04\x22\xbd\xfa]J\xc93R\x04\x8f@@3\ \x01\x0dR\xc62P\xb0\xf4\xb6\xd6\x88\xac+X\xc5I\ \x13\xa2\xa2x-5\x93\xb3\xf6\xc5\x7f\x1c\xe9\xcb\x8a\xa6\ Ii\x9b\x96\xa6\x82\xa4\x08+%\xa44\xd9\x05\xff\xe8\ \x89\xf8PI\xd8\xb8\xc0\x1b\x1b}hkK\xfd\xfd\x9d\ CC\xc5\xce\xbfl\xb0\xa4\xf9\xf7\xe3\xdc\x93\xb6\x10q\ Lb&d\xac\xf4\x0b\xcb\x11R\xc8A\xe2\x5c\xaf\x96\ {\xd7\xacs\x82\xc0\xa0\xe5>\xed\xbc\xca\x92\xbe\xf7\x90\ \xfd\xe6\x16J^Z\xdc\x9a\x8b5\x87$z\xbe2\x0f\ Q\xe5\xce\xa0\xd56e\x19,\xef2\xd1U%\xf2\xeb\ qo\x0a\x8d*\xf4\xfa\xa1\ \x98\xd3\xd4\xe8\xd3qg\x19\xed\x8e;g\xd5\xab`5\ \x0c\xfe}F\x12\x0a\xe1\xa5\xe9\x04tC\x98\xb8\xc1$\ kw\xd1G\xb3z\x1a\x9e\x90%i\xc3\xda\xf3yD\ \xce(a\x13}p\x96\x1c\xe0\xc8T\xaas\xdb\x88U\ \xc3L\xa9\xb1\xc6\xa6|.G\x94\x86\xdfM\x01\xf8\xa5\ \xd9\xc0YZ\xc3j\xa1\xd9\xaf\x8a\xc7c\xcd\x7f,Q\ \x8f0\x1ed[\xde:\x0eK\xe1v?\xc49\xdf\xda\ \x0f9\x99\x84\xc4\xbf\x0a\xcb@\x1b\xc6J\xeb\xb6\xf4\x80\ u\xe9C\x06\xf9\x5c\xb4y\xec\x94\x7f_\x87\xa5\x14\xcc\ \x1e\xf4\xab\xccR\xd8EEr\x8a\xf1\xa2\xabN\x0a\xec\ \x0fzK(e\xc3\x88\x95\x04\x89ffD\xcb\xa8\x0a\ {s\x99\xe1\xaa\xd2*\x9a\x22\x9f\x9fe\xad^\x0c\xef\ av\xe2\x8fV\xda\xb6\xc9\xc5\xb7h\xda\x8b6\x1e\xc3\ \xf6\x01\x97\x96\xcdb$\x9aU\x90\xba3\xfaJ\xe3\xda\ }\x01Uo1E6\xe9\xed\xfc\xd4\xec\xa3\x11t\xbc\ i\x15x\x18k\xd7\xf8-\xe5\xb4`\x14\x0fN\x8b\x17\ \xe3\xcd'el;\xf5\x04^%\x90\x94u\xe9\xb7\xee\ ;\x97\x99\x9fC5\x5c\x1b\xbe[5\x89\xf1,\xab\x10\ >\x8a\x9b\x84\x1d\x1b\x19\xf6\x05\x07\xee\x8b7)#\xbb\ _7\xe4\xdc\x97\x91A\x91\xaf\xda\x81\x10\x1d\xff\xa2\xa2\ (YV\x121\xf4\xc2%\x88\xf2\x94\xa6\x82\x90\x1d\x1b\ \x1b\xec\x18\x1f\x1c\x03\xdf\x1c\x84I\x82F2\xa82\x05\ b\xb5K\x9bA\xd0P\x13\x9d\xbeC\xc1\xe4\xb4\x9a\x06\ 9\xae\x1a\x93E\x1b\xdf\xffS\x8e\xfa?\xe5\xa8'W\ \x8e\xea!6\xbfW\x12OY\xaf\xb9srpg\x13\ =\xb7.\xbf\xb7\x14\x97\xc5y^\xd5\x9a\xce\xe5R,\ V\x97\x9c\x85\x11\x10\xf1\xa6\xda.\x83\xe20\x05~\xb0\ \x9aI*b\xf8\x1e\xef\xceL(\xc9\x0c;~\xa0\x99\ \xa1H\x0b\xcb\x9e*^\xac&KBo\x8f\xbd5\xc4\ 2\xc0\xfc;\x04\x15\x8cIX\x99Lb\xc8R\xbc\x89\ +K\xac\x17i\xca\x18\x22Sm\x11-\xf1\x13\xd2i\ ;\x1b\x9dy\xa2i\x14\x91\xac\xe2*J\xac\xf7\xae:\ \xf1\xbf`B\x1d\xb2\xad4\xf1p\xd0]\xe5\x9b\x7f\xe9\ \x96B\xc4\xb4\xa0Sc\x9b\xf8X\xd5{\xa8\x0d,;\ \xae\x8e\xae\x5c\x9d\x05\xbf\x147\x15\xdd\xad\xb6':\xa1\ k\xd3\xf4\xddt\xcaASI\x1b\xc0\x11k\xdc\x97\x11\ \xe1\x1eg\xb1\xcei\xd5LP+\x92\xbe\xef\xcb\xda\x92\ \xb4v\x99\x9eAI\xec\xbc|v\xf6L\xd89\x15u\ \x17|\xb3\xc3E\x8f\x1e\xa7\xb7\xda\xdbc\xc0\x0br\x06\ t\x0a\xfc\x8a\x19j\xae5\x94S\xe4\xe43N\xb1/\ L\xf6\xeaYd\xf1\xb5G\xdff|K\x84\xf0\xa2c\ aL\x8c\xa2\xf9\xf4\xeb\xf3H\xf0\xce\x0d8Z\x81 \ 1ua\xdag\xb4\x85\xfc\x95\xca<{\x81G\xee\xec\ \xb7>\xe6O`\xaf\xcf+\x00\xfc=\x8c\x22=\x07{\ J\xfc\xb2\x7f\xaez\xfc-y\x9f\x09.\xc5\x0b\x15\xed\ lf\xae\xc7\x15\xd4\xeb\xae\x97\xaf\xf6jI\x80h\x80\ \xd3`\xbf~\xd3\x1b\x9a\x86\x18N\xe5\x04^\xddUC\ g\x00\xb4l\x0a\x84{o\xd6\x00]\xa9\x1e\x92\x03\xf6\ \xd2\xc9\x16\x94{\x80\x9c\x02\xbe\xa0\xc9\xa2,\xeb>\xc3\ \x85\xa6\xab\xe6Y\xb0e\xbc3\xf5\x9d\xaa\xee\x14Z9\ *\x92l\x0d\xc9-\xae\xf5*\x92\xdd\xcc\xeb\xa8\x8d\xec\ \x04\xbbL\xcd@z\x0de\x0d5\xb2\x06\xf7\xa0\xb1F\ joo\xc7\x9a}\xceeNT\xc8yYx\xfe\xca\ $\x0f\x8ew\x9d\x80\x08%\xd1\x0c\xb0\x1f\x8e:=\xf3\ \x19r\xef&\x08N\x89>\x83Wr;i\x19\xb4\xba\ \xc3g\xc0(?Xb\xa4`\xf9<*\x18\x8d\xaa}\ \xff\xac\x15\xaes\xbf#\x9895\x12\x92\x91i\x5cw\ \x16\x10\x83\x91[\xca\xbe\x8a\xbd\x1b\x92:\x02\x11\x9a,\ \x1fS\xe9\x15\xb5\xd4\x1e\x9cRtz\xfeB\xb5\x07X\ \x1c\xba\xdftO\x22}\xc4\x03Zi/=\x8f\x89/\ =\xcf\x07vm\x1e0\xb7\x9d\xe2\xce\xa1\xf7\xb2Br\ \x83\xa4T\x86\xa5\x90\xad\xa3\xc4z/<\xf3\xc2\x99-\ \xe3\xbc\xa8\x8f\xf6q\x18}\xd3\x96\x1c\x05o\xe4kv\ \xd4\xe0\x13\x0ahx%\x92\xc5\x12\xa0TJ\x89\xaa@\ \x0d\xb0\x9e}VXRe\xb8G\xff\x0b\xd1|v\xdc\ W\x83\x1b\xcfY\xbeu\xad\xedo%\xdaL\x12V\x99\ $FoM\xe3\xe5\x88\xc3\x1a\xe7\x1d\xeap\x8c\xd1\ \x17 \xf8\x91\xf8d\xd2\xc0\xcf\xe4\xa3y\xe5`{\x0e\ u\xea\xab\xc9=\x86)\xb5\xb0\xdbS\xb8\x9ft\xb5\xb4\ \xe7\xc4XT\xc4\xe4bd\x06\x85\x83+1\xa9O\xb3\ _u\x9c\xdf?\x16p7m\x8a\x04\x17\x912\xa5\xae\ \xe2I\x81\x18\x0ct\x92p&\xd1\x07\x17\xef\xe2\x5c\x85\ \x09\xf6x\xbb-\xb3S\xa9\xcb\x19\xa1\xefL\x95&\xb2\ \xa6\x09\x9c\x05\x8a=2\xa9D\xfd\xf6\xc3\x122\x92\xc7\ G\xec\xf4T\x5ct5\xad\x1d0|W}\xd0'p\ \xaf\xd9\xde\xban\x8ba+ \x9c\xcf\xd0R\xde\xb1\x96\ [\xb0\xc4Q3f8W\xba\xdfH\xb2a f\x8b\ \x05\xf6\xa2\xbf\xb4\x12]#\xe5\xe5\xb1\xd08\xb1\xfb\x9d\ (\x1e\xcb\xd9|\xf2E\xdb>U\xeb\xee\x92m\x9f\xe1\ g_\xacm\x85\x11\xecbmO\x97d\x9c\x1f\x88:\ )R\xe1A0N\xb3r\xdc\xdf>;\x15\xf5\xdd\x1e\ `\x7f\x8c\x97\xd4\x1e\xe4\x9b\x82Yi\xee\xb3$\xb6\x05\ \xd80\x09~\x22j\xd5o1\x0a\xb1\x8b\xe2(\xb30\ \x7f\xdc\xe0\x1b\x8c\xfa\xea\xf9g\xa5\xde:\xcbz\x17\xb4\ \x13\x12\xc9w\x83,\xeb\xc0\x1dKf\xb3\x9d@\xf8\xd4\ {g/0\x14\xe6`#$1$\x1fTS\xd9\x94\ pp\xc7n\xe4\xa1i\xc2r\x86\xc6\x83;\xbb&t\ pu\x8d\x94\x9cLv\xb7\x0a,\x0d\x9em\xd4p\xa2\ \x1c\xec\x82\x14\xd6[6\xc1\x1b\xa6\xc7 \xab\xba:X\ G_\xb3\xec\xf4V\xb1{\x0cyZ\xeb\xaeO\xc3x\ \x01E\xd7\x9e>\xcb\x18q\xf2yr^'%\xbe=\ \xd3\xa5\xe9\xcd\x99\x8c\xff6\x9b\x9bc]\xb8\xca\x09D\ 0~\xa6\xc2\xdf./\xd6\xd3\x85p\x0f\x9e{\xc2\xeb\ \x00\x9e3\xec>\xbc\xf6\x05YEv\xc2\xcc\x7fiw\ ,\xdf\xb9\xc3\xd7\xb0+\xa10\xd8\xb3\x7f)5\xba\x9e\ \xcc\xb7\x05\xbd\x8bI[j9\xef0\x9e\x16L\x01+\ \x9c\x92\xcb|\x8d#\xf8^\x10zC\xd6\xa42\xe37\ J\xe0%<\x97dU?\x8bK\xb2S\xe4\xbcS\xee\ \x04\xda\xd0\x041!\x83\xcc\x976\xf4e0\xee\xe4\x97\ \xdc\xe2\xb2\xbaQ\x96\x0db\xaa\xbef\xdc\xda\xa2\x9cE\ \xafk\xea\xce\xe0U\xb3E\xb9\x88\xab\x01m\xde\xe7\x0e\ y6\x8a\x13\xb3\x19\xcd\xa6E\xdb\x01$-\xda\x13Y\ ?\x81\xd0\x82\xb9R\xd6A\x05K\x15M\x0aFJ\xf5\ \x98\x0c\xf3\xed\xf1'\xad\x95\xc4l3\x88\x906\xcds\ F}\x87\xce\xeb\xebZK\xad\xd5\xdfo\xf0\x0cZ\xe4\ S\xdc\x86q2\x90\x0d\xffW,\x10\xe7\x18(8\xa6\ \xecyy\xb7=\xb57b\xa1\xaa\x1d\xa4\xb0^\xe8!\ \x81#\x97\xd4\xe2,\xe7\xc1\xfe+=;\xe57}\xfb\ F\xeev\xe7\xd9\xdd\xde\x93\xf3z\x8dO\xbe\x03u\x96\ {z\xf6\xfb{\xa6\xed\x97IxZ\xd5\xc5\xd7\x15\xa7\ \x9c\xbabO%SJQ\xb1A\xbd\x81\x8cUT\xec\ \x01n\x05X\x7fJ\x0e\x11'\xed\xc8[*GL\xcf\ C\xa0\xe0r\xd3X\x07\x0b\xbcu\xfa\x00.Xy\xeb\ \xc9\xf0\xae>n7\x8b\xf6\xf3\x15=\x05\xeb>=g\ 8\xc6\x05T\xd2\xed\xdb\x8c\x993I\xff\xa1\xda\x01c\ \xb9\xc9-\xad>i-bM\xcd\xbcq\x9e\x9a\xd2\xca\ \x13SV\xf9\x0e\xd1\xe5\xe1\x83\xb9\xae(#NB4\ \xcbk\xb0\xb8\xca\xf5\x1e\xf0qMK\x02#\xa1{o\ \x00+\x04\xe0\xaf\x94\x22HOe\xe2T,\xb6\xd9\xc1\ !\xaf(\xd6|\xb1j\xb1@$k.\xbf<4\x8b\ \xd8\xa6f\xbdP6\xb2\x9b\xb2\x9f\xff\x82\x86\x85\xcaW\ 'V\xe1N8\xf3\xaa\xecet\xcc-nu\xa8x\ \x1e}\x8f\x99\x94QtU\x8b\xda\x89[\x8a\x1cI\x08\ \x22)\xcdj\x5c\xfdvF\x1f2\x90\xd7\x84r\xed\xa3\ \xe2\x18\xeb\x5c\xaf)\xf1\x5c\xb2\x22\x98m-\xaf\xa8\x13\ Nsl7\xc6\x03\x13b$\x9f\x9e\xf5\x80\xdd\xcfV\ \x8b\xf0\xc3\xf4\x96\xd1\xd2\x0fyr\xbb\xad\xc7n\x8e\xf3\ \xe5\x179go*9\xe4\xb6\xd9\xf9\xc9\x8a\xc7-7\ \xb9\xc3x\xbd\xf5H\xe3\xd8\x8f\xda(\xb0_\xd2\xe8\xc8\ \xe9-\x0a\xbbe\x88\x96y{\x01>\x89\x88n.\xa8\ \xd9\x87ss!](l\x09'\xb7Q<~\xf0\xbc\ XYt\x5c\xecq2\xb2aLkz\xd4{\xa4\xbd\ 9\x09<\xd6Q\xbf\xcc\xa3\x92J\x0ek\x15=\x1b{\ &K\xed\x99d\xc1\x1dN\xcb)~\xab-\x9f\x96\xd7\ \xa46\x15\x98\xd4l\xd0`\x0d\xee\xc7\xfc\x03\x98h*\ c\xde\x135\xa4\x9cM[10\xd2\xe9\xd5\xe7d\x8a\ )sa\x85\x9d\xb0\x95S\x8f8h\x1d\xe1\xe5>}\ j=\xc5\x16oO\xd1k`\x1f\x97._&\x9c\xbe\ Z\xc9\xdc\xb1\x1aa,\xcb\x16\x14)_9\x02F\xb3\ \xe7\x22\xc2\xbc\x8e\xfa \x99\x11\x9e\xd6\xb5\x833\xdeT\ \xb6\x9f\xf6\xdc\x06\xe2\x98\xcd\x08\xa5\xc0\x8e[-\x00l\ \xcb;\xd9\x12\x19\xbd3\x17p0\x0fK\xf6\xcd\x18\x06\ WC\x96\xb8\xcc\x15\xe7\xe1\xb1@\x91\xf87{\x19\xc8\ b\x0c\x86\xedg\xaf$\xdf\xefQ\xd7y\x0a\xdf\x0bR\ p\xacS\xfe\x8a\x90\x82#\xfe\xcd^\xaeQ\x04\x9e\xa9\ \xc0\x95\xf9\xd8\x11\x22f\x1fx\xaa\xc3\x9e\xe8\x14\xb5\x08\ \xa2\xe2\xbb\xf4\xe6\xcd\x98r4J#\x9by\xaf\x12\xef\ \xb1y\xc6)\xe2\xa7+v8\xbc\x81\xb3\x09\xd6\x14u\ \x06\x82[\x81\xec\x10\xc5\xbc\x0d\xf1>|:Q;\xcc\ \xecL\xb5O1\xc1\xe4\x1b\xa2\x87\x8b\xf6=`\xbe\xb0\ \x87=\xdf\x16\xe9\x82,\x90(e\xcf\xa3\x8dx\xdcP\ \x5c2\xd1\x82\xb3\xa0\x5c\xc2&Bo*\xe0\x17\xf0\ \xf9\xce\xa5\x13mjw*\x1a\x93\xf4\xa2t\xcf\xcf\xf8\ Q\x85\xd5\xbf\x81\xdf0\x81\x15\xa7\x92,M\xc9I5\ *\xc4\xa0\x03'\xb0\x14/Zt\xbf\xe1\xdb\xcb\x8ck\ \xe2\xe2D\xe6\xe4\x0b\x04:\xcb\x1bS\x02\x98\xcb\x81\xe7\ \xcb\x5c|o\x14`\xae\x1b\xa9F++\xfb\xbf\x0f\x9d\ \xeaI\ \x00\x00\x1f\xea\ \x00\ \x00qrx\x9c\xd5=\x09t\x1c\xc5\x95%k4\x92\ F'\xb60\xb6pLK8B\xbeF\x07\xd8\x802\ \x08d\x1dH\xb6%\x0b\xcb\x96\x0f\x0e\xb9g\xa6f\xa6\ W3\xddCw\x8fd\x89\xcd\xbe<\xc2\x92\x03^\xc2\ B\x0c\x81\xf5\xe6aH6<0\x09l\x126!\xc7\ \x92\x00!\x07\x04\xc2\x92\x9bp,&\xc7{l\xb2\x09\ \x89\x13\x02\xbb\xd9_U\xdd]\xdd3}\x8c8\xde\xdb\ \x8dc\xd7H\xd3\xf5\x7f\xd5\xbf\xff\xaf_M\xec\x8b\xc9\ U\xdf\xf9\xed\xd1#O\xb4\xad\xf9\xb7C\xc7\xbe\xfa\xf3\ O#\x84\x96%\xf16\x84\xaa\x9fB\xa8\xea=\x08U\ ~\x8b\x8d\xd5?f\xe3\x15a6&\xe1\xc9\x89>\x84\ \x12w\xa3\xd0\x97C\x08\x9d\xfb3\x14z\x12\xc6\xf3\x8e\ \xa0\xd0S\xef\x86\xf1)\x14z\xe9!\x84\xc2\xbfB\xa1\ W\xba\x11:\x7f\x18Uu\xef\x008+\xd9x\xfeO\ Q\xd5\xf5\xf0\xfcL\x1d\xaa:V\x85\xd0\x85\x7fb\xe3\ \xa1kQ\xd5=\x87\x10\x1a\xfb\x00\xaaz\xf21\x84\x06\ w\xa0\xb5\x1b\xff\x07\xa1\xed\x02\xda@\xf0t?\x816\ \x10\xf8=\x0dh\x03\x81\xdb3\x886\x92\xe7z\x1eD\ \x17\xdf\xfc\x08Bg_\x8eF\xe7\xcfG\xe8\x9c\x8f\xb2\ q\xa4\x1d\xed\xbc5\x0e\xeb\x99ASUg\xc2z\x9f\ F\xd3\xd7\x1fAh\xb4\x0d\xed\x93\x16\x11\xaaAlL\ \x1eA\xfbn~\x0d~\xeeac\xf2a\xb4\xff+_\ @\xe8\x82\xcf\xa3[\xeehF(t\x12}\xe3^\xa0\ \xc9\x8a\xf6\x8a\x8a_<\x0d\xeb\x0a\xb11\xf3b\xc5\xaa\ {\x9eAh\xeb\x7fW\xc4\xff\xf6#\x08\x9d\xfaF\x85\ t\xcf}\xb0\xcf\xa1\x8a\xeb\xf2\x8d\x08\xed\xa9\xa8\xb8\xe9\ \xb5\xed\x08I\x9b+^\xef\x1dBh\xe5\xd1e+n\ \xba\x1d\xf0\xdc\xb1l\x0a\xc0\xa1\xda{\x96%\xc6.A\ \xa8\xe1o\x96\x15\xea\xb6\x00]*\xd9x`\xfd\xb2#\ \x09X\xef\x9ac\xcbn\xfbc\x1e\xf0\xde\xb0\xec\xf8\xe9\ \x03\x08u\xeeX\xf6E\xb2\xae\x9e\x85e?k\x00\xfa\ \xc6\xd5e\xbf\xdb\x04x\xde=\xb3\xec\xb5G\x1f\x05~\ \x1d\xa9\xac}QFh\xf2'\x95\x91K*\x10\x1a\x0f\ U6\xf4\x5c\x81P\xddt\xe5\x9aG7 tqs\ e\xec\xfd\x95\xb0\xbe\x1b*w\x8c\xbc\x04\xf4\xf92\x1b\ \xf7_W93\x06\xf4\x1f\xf8u\xe55Ga^\xfb\ o+o|\xfa{\xb0\x8eOV>\xf8\xec\xd7\x11\x8a\ >Q\xf9\xec\xb3@\xf7\x86\xd3*_\xbe\x17\xd6\xb5\xf1\ @\xe5+\xff\xf0>\xc0{2t\xf9\xd8\xd9 \x17\x9f\ \x0d\xe1\xe3\x7f\x04:\xaf\x0a-\xde\x07\xf8\xa6\x17`\x84\ \xf5\x9c\xfd\xd1\xd0\xfb\xc2\x9fB\xe8=\x1f\x0d]\xff\xb8\ \x0e\xf4\xfap\xe8\xe3c_\x01\x19\xfa*\x1b\xa7\xefe\ c\xfc\xfb\xa1O\x5c\xf3\x03`\xc6\x19\xa1c9\x98\xdf\ v{\xe8\xbb\xadc\x08\x9dy\x7f\xe8\x87\xfb`\x9f\x07\ R\xa1_\x87\xeeA(\xfd\xd7\xaa\xdakE\x84\xbaF\ \xabV<\xbe\x07\xe4aKU\xf7\xa7V \xb4\xfe{\ U=\xe4\xe7s?\xc2\xc6\xfd\xcfW\xcdD\x05\x84\xd6\ }\xadj\xe6.\x90\xa7S\xb7TI1\x90\xa3\xde\xfb\ \xaa\xe6N\xff\x04\xec\xe3\xc7U\xd7\x1f\x07:\x8f>V\ u\xac\x06\xe0\x1fz\xa8\xea\xce\xa3\xfd\xf0\xfd\x016\xe2\ \xe3Uw\xed\x7f\x15\xe8Y[u\xf7u\x0f\x03]\x0e\ \xb1\xf1\xd0\x1f\xaa\x9e9\xff B\xa9W\xc2\xb5\xca\xe7\ \x81_\x87\xc3\xa7\xcf\x7f\x0d\xd6uKx\xf36\xe0C\ \xcfI6\xe2\xad\xe1\xf3\xaf\x9e\x00x\xbfgc\xaa1\ \x1c\xbb\x00\xe4(\xde\x1b\xbe\xb8\x13\xe8\xbc\xe5\xce\xf0\xf8\ \x85\xeb\x10z\xd7C\xe1\xcb{\x9e\x03\xad[\x16>\xfc\ \xd8\xfd@\xe7v6\x0e/\x86o\xfe\xe5'\x01\xee\xf9\ \xe1\xdbv\x109y!|\xdb\x1f\x07\x01\xffX\xf8h\ '\xf0\xe7\xe0g\xc2\x8f\xae'\xfc\xbc\x22\xfc\xf8\x0f\xef\ \x049\x9d\x0d\xbf|\x06\xc8\x7f\xf7\xfb\xc3/\xf7\xc0\xb8\ \xf5\x81\xea\xba\x1b`\xbf\xcd\x7f\xaan\xd9\xb0\x16\xf4\xab\ \xa5z\xf5\xc7\x0a\x08\xf5_V\xbd\xf5I\xa0G\xf8\xd2\ \xea\xd8\xd8)\x08\xad\xba\x8d\x8d\x83\xafV_\xda\x01\xdf\ \xaf\xfeJuR~\x10\xe4}\xa6\xfa\x1f/\x07\xfd\xba\ \xfc\x9e\xea\xa3= /\xe2\xe3\xd5\x7f~\x0d\xf6yi\ gM\xe8\xbb\x7f\x80\xf5\xd7\xd4\xec\xfd1\xd0q\xfd\xfe\ \x9a\xf4\xe6;@\xbe^\xae\xb9z\x07\xe0\x19\x9f\xad\xb9\ \xe7?jA\xff\xbe\xcd\xc6\xe9\x97j\x8e\xaf>\x0c|\ \x9d\xaay\xb0\xffJ\x84N\xef\xaey\xeciX\x7ft\ \xbevc\xd3E\x08\x9d\xb1\xaa\xb6\xbf\x01\xe8\xb0m\xbc\ v`b9B\xc2\x9fk\xf7\xfd\x08\xe4\xe0\x82\xdf\xd7\ ^\xf1\xa1\x7f\x87\xb1\xb3\xf6P\x18\xe4\xfd\xa2\xbf\xadM\ W\x80\xc2\x88\x97\xd6\xe6\xbe\x03\xfa\xb0y[\xed{\x8f\ \x83\xde\x9cvU\xed\xdf5\xc2\xfe\xbb~T{\xd3\xd3\ \xb0\xdf\x91\xcbjo\x1e\x81u\x9f\xfe|\xed\xcd{A\ ~\xd7\x08\xb5\x0f}w/B\xb1\x8dl\xbc\x22Z\xfb\ \xc8\xae\x9b\x00\xcf\xfd\xb5\x8f\xa4\xff\x8a\xd0\x86\x07\x22\xd5\ \xff\x09\xf2\xb6\xeb_\x22\xf5\x1f\x00\xbe\xed\x8aE\xda\x0f\ \xeeC\xa8\xef\xc9\xc8\xcc\x8f\xe0\xe7H42\xf3\xea\xeb\ \xc7\x8fD\xa4\xd4\xb7\x11\xda\xb4\xc8\xc6\x8b\xce\x89h\ \xfd \x0f\xa1\x7f\x8d\x5c\xf70\xb1W;#\xb7 \xd0\ \x87\xda\x1d\x91;\x0e\xc0\xfafn\x8c\xdcu\xdb\x09\x90\ \x9b\xf6\xc8C\x9d7\xc0\xba;\xeb6}\xba\x0d\xf4\xe6\ \xbe\xba\x91+\x7f\x83P\xd3\x81\xba\xbdW\x82^mz\ \xa4\xee\x90\x0a\xf3/\xbb\xa1.}=\xe8\xed\xe6\xa7\xea\ \xe4\xfb\xe1\xfb\xbd\xcdus\xa1\xffBh\xf9\x97\xeb\x16\ \xbf\x0er\x1c\xfeL\xddU\xdf\x04\xfb\xb2\xfe\xd4\xba\x0f\ \xcd\x7f\x0c\xe8\xdb\xc7\xc6\xe1'\xeb\xee|\xb6\x1e\xec\xd5\ \xef\xea\xbe\xf5\x18\xe8\xc1\xfeK\xea^8\x06\xe3\x96W\ \xd8\xb8\xbf\xbe\xee\xb5#\x9fC\xa8\xf5\xbdu\xaf\x7f\xe9\ \x5c\xd8W]}\xc5/\xae\x06z?X\xdf\xfa%\x90\ \xff\x8b\xbeZ\xdf\xb9\x1a\xecj\xff\x83\xf5\xbd\x0fM\x81\ \xbc\xef\xab\xc7MQ\x90\x97{\xd98\x16\xaa\xd7\x9aA\ o\x07n\xa9\xbf\xf9J\xd0\x93\xc816\xb6\xbc\xab\xfe\ V\x0c\xfb]\x93\xa8\xff'\x10oT\x13\xaf\xbf\xfbx\ 5\xd0\xf3d\xfd\x17\xae\x85\xdf_\xfc\x04\x1b/\xdfV\ \xff\xf3o\x80\xfc\xc4\x9ec\xe3\x15\x99\xfa\x17ZA\xaf\ .\xfbm\xfd\xeb/|\x18\xa1\xb5\x8d\x0d\xa1\x87\x13\xa0\ \x07s\x0d\xe1\x17_\x00\xba]\xd8p\xca`\x17\xc09\ \xb7\xe1\xb2?b\x90\xe3s\x1a\xae\xfc8\xe8\x07h\xec\ \xad\xaf\x81_\xaa\xfc\x0d\x1b\xeb'\xd8\x18\xcb\xb0qt\ \x8a\x8d\xc9w7\x0aR;\xc8\xc3\x07\x1b\xa3I\xd0\x9f\ \xf7<\xd3x\xee\x18\xf0\xa9\xea\x00\x8c`\xe7R\xd74\ \xce\x5c\xf3\x22\xd8\xd1\xbb\x1b\x0f\xdf\x05\xcfW\xbd\xca\xc6\ D\xa8\xf1\xe8\x04\xc8\xd1\xaa7\x1a\x1f\xd9\x0et\xaf\xf9\ U\xe3O\x9f\x01y\xda\xf1\xcb\xc6\x97{`]\x1d\xc7\ \x1a\x7f\xf5\xd0\xad\xb0\xdf\xbf4\xbe\xda\x0b\xfa\xd9\xbe\x89\ \x8dCSM\x11B\xff\x04n\xda\xfa\x00\xf0\xf9\xd4\xeb\ \x9a.T\x81>g\x9d\xd7t\xf9o\xc0\x8e\x9c\xf5\x12\ \x1b\x87[\x9a\xa4\xcf\x82]:\xd4\xd4t\xd5\xda\x16\xe0\ G{\xd3{O\x019\x89\xfc\xae\xe9\xea\xdb\x81\xaf-\ \xb9\xa6\xa3\xb7\x9c\x06\xfb\xfaV\xd3?O\x03\xdd\x0e\x16\ \x9a>\xfd\x00\xf0\xa5\xf5\x07M\xc7/\x85\xf5\xae\xfd\x08\ \x8c \x17\xc2YM\x9f[\x07ztZ\x84\x8d\x83\xd7\ 4}\xffB\xa0\xce\xd8\x03M?|\x19\xe84\xd5\xd4\ \xf4\x93J\xe0\xdb:\xa9\xe9\xb9\xab`\x1f\xfb\xbe\xd9\xf4\ j%\xc81z]\x02'\xb4\x08\x1c@7\xa2\x18\x12\ \x91\x802HE\x18\xa5\xd0\x05\xf0I\x87?y\xa4\xa1\ >\xd4\x05\x7f\xf2\xf0{\x15~\xc2\xf0IAY$\xc1\ \xe7$\xca\xa1(J\xc3g\x1d\x9e/\xa08\xfc$\xc1\ \xb7\xfdoiv\x0c\x9e\x17Q\x7f\x0dap\x98l#\ &\x0a\x19\x15\xa7.\xc8\xe8z^\xeb\xeb\xea\xcacU\ \xc3y%+i\xc9\x5c4-\xe9\x99B<*)\xfd\ \xfe_\xc7\xba\xc4~\x90ET'\xc6\x95\x82>S\x90\ ft\xb5\x82l\xfd\xb6\xc0\xad\xeb\xf0\xfb,\xfcM\xc3\ \x13\x22]t\x0e~\xf2\xdeT\xe9\xf6\x97\x0a\xa1\x98\x04\ \xe3\xc5$\xd0q\x16\xa7U1\x17\xcda\xc7~\xfb\x83\ \x1exKd\x98\xa7\xbc\xd2\xe9\xa2\xa3(\x01K\xce-\ \x91\x0cK\x83\x10L\x86yI\xd7\xb1\x1aM(9\x0f\ 2x<\xe0I\x86\xb5\xe8Y\x10D\xb2\x1c\x01M\x96\ .\xcbZJ\xf3\x00\x99(LZ0]\xa1\xb5\xa0a\ $\x1b\xdbN\xa0Y*\x03\xaa\x05#2\x84\xe7pV\ !\xebr\x9d]\x8fv\xc2\xbcE\x98#\xa3EkV\ \xf5N)\x81e\x0d\xbbN\x09\xa1]h\x87\xf5\xe8\xb2\ ];\x5c\x9f\xda\xea\xb65\xd8\xf0\x10|\x9e\x07dY\ \x18E\xe0\x80\x80\xc6a\x94\xe1o\xda\xb1\xf0\xd3\xf9\xb6\ \x85!e^\xce*bR\x18\x17e1\x8dUW\x84\ \x1dh\x8a2y\x11\x10\x11M\xc8\xd2=\x11\x84\x04\xfc\ ,|\x22c\x9f\x85`\xf9T\x1e'$1+\xe8\x19\ Q\x9e\xd5\x04]\xe9\xf3\xa0\xaf\xc9-\xb2\x15\x9d\xd2\x8a\ /\xb3n\x8f*\xcaZV\xd4\x15\x0f\x02w\xa3\x83`\ w\x04\xb4\x03\xd0\xebT=\x15\x00E\x96H\xf4@\x22\ d\x87\xefS\xe8\x0d\xba\x7f\xfb\x02O\x19H&aU\ BB\xd4qZQ\x17\xfa\x04\x82\xa0AL&\xb3\x92\ %\x0e\ \x9ei\xc8\xd0x\x89Z7\xe2\x8c\x89\xaf!\xdf\xd8!\ .\x8f\xc5\xfbG\xa4,\x16d1\x87c]\xf1~\x06\ w\x95\x98\x02\x9f2\x934\xa4uFS\x13\x0e[W\ \x8c\x82x\xfd\x93\xe8y\x0f$\x0d\x80dJZ,\x1b\ \xbe\x93\xa55\x82 \xec\xda\x01\xff\x90\x89-E\x13\xed\ \xd4\xe3\xcb\x11`1)\xf8\xe3\x94\xa6\x06\x80\x93\xc7\xb2\ @\xf7\x1b\x00\xad\xdb\xdab\xb1b\x13cL8\x93\xa4\ \xe6\xb8\xcd\xdc\xb0\x85\xa5\x156ki\xf9\xa0\x92\xcbg\ \xb1\x8e\x93md\xef\xfe([\x0d\x94\x86BzR\x92\ \xe8'\xa7\xa47\xbcM\x06<\xe6\x97$j\xe7\x88p\ \xc9T\xbc\xb2 jn\x18\x9a\x09\xaf\xc49,\x88Z\ 9HF\x81B\xcc\x16\x103?\x01\x80M\xf3\x9f\xa0\ \xb1\x91\x00\xe8\xf8\xe7\x9c\xa5\xf1\x22\xf5\xa7\xb9\x0d\xb6\xc1\xdf\xa9\xa4\x09\xc8\ \xe6\xac\x92\x9e\x99\x97d\x80i\x03\xd7nX\xb98\x8d\ Xr\x86\x80s\x06:\xcc\xf1n\x80\xa8\xea\xc2\x98\xa6\ \x15\xb07\xc8nK\xb0\xda\x01\x1c\x06\x03JV\xa8S\ 9Q\xa9\x1c0\x14\x98\x06\x09\x1aj\xb3\x10\x9cJD\ \xae]\x10\xb3*\xf8\xb8\x05\x01\x1f\x964]k\xa3\xf4\ \xc8\x01\xf3\x0dLNc\xf1\x0bC\xccc\xb0`f1\ \x09\xec~\x9b\x5c\xaa\x94:\x92\x11\x86\xcdC\x08\xa1R\ \xed-^\x87=\x22JSKN\xa2\x22\xa2\xe3B\x99\ \x7f\xf6Q~\x98\xa1\xdf\x94\x11g\x8d\x01\x5c\x99RB\ \xa5\x82W\xa04p\x8b\xbe.\xa4\x94s\xee\xa3\xd8\xbe\ \xa8\xa0\xa01\x08\x8fA<\xfa\xf7\x10\xfd \xf6_\xc8\ \x88\x9a\x10\xc7 \xc5\xe0\x10 \x9a\x8a\xe3\x14x\xce6\ \xc1\xe5\x7f\x03\xe0Q\x17\x94\x82\xa0\x15\x8c\x0f\xf3\xa2\xac\ \x93@\x0ff\x0a\x92\xce\xd4\xec\xc2X\x97\x81\xc2\xb2[\ \x9e\x0c\xf8KY\x0c\x98\xa6\xce7M\x95!M\x03\x87\ \x93F\xac\xa8\x97M^\xc1\xb0`\x05\x0bK\x9a\xc6m\ f\x08\x82\x8dx\x9b9\x01\xc6\x849\x1aT0&\xa8\ \xc6ZF\xe8\xbaH\xda\x96\xa5O\xeb\xd4o\xc5\xe9\xaa\ '!\x9f\xd9\x0dJ;\x00\xc6l\x18\xfe\xee1L\xbc\ ?S\xae*f\x0aIyD\x12\xb6\x08\xf3R6+\ $1\xf1\x02n\xec\x10L\x15\x07\xae\xa5\xc01iB\ JUr\x841*0UM\x0aII\x9b\x8d\xc5\xd5\ \xfe\xc9\xe1\xdd\xe3\x03\x13\xc3\x13{v\x1eh+\x9f;\ \x15+\xdf\x14w\xd8\x93)Cd\x97\xc2!\xd1P\x80\ RSH\x14L\xa2\xbcH:p\xef\x83oU\xa3~\ \xc0\x0c\x05\xe7\x86\xc9\xbd\xa4\xf1\xac\x00&e\xc0\x07C\ \xbb\xa1\xea\x0cJ9\x9c\xfb\xfb\x00\xce\xa98\xa7\xcc\xb9\ sN$\x8c5m\xb7\xa4\xe3\x9c&H2\xf3YW\ \x16p\x01\x13\xaeQf\xb6\x0f\xc0\x93\xa6\x95\xd7\xdaA\ c5}\x09\xdb\ \x82%o\xad\x15C\xea\xd4R\x16<\xa2\xc6&\x82S\ \x17\xf5\xc2\x92\x04\xcd\x8b\xc9\xaaa\xc3\xdd0\xad\x04L\ \xb4\xe8\x01\xc9\x94\x00\x8a\x8a\xcbA8Qb\xfe\x9c\x9e\ Z3\x98\x9222\xc4\x14,\x80\xb9\x0bW\x9fl-\ f\xbdi9\x86\x14\x87+M(\xb2.\xc9\x05\xcc\xdd\ \xa8\xff\xfa\xba\xc1\xa8\x91\x90K\x04\xd2\x10''\x96D\ \xce*\xad\x06\xa4\xcd\x18\x8aGL\x03\xaa$\xf6\x82\x93\ H\x0a\xb2B\xd8\xac\xe5\x159\x19D\xfe%b\xb3\x09\ \xd7JW|\x01!\xda}KG\x08\xbf\x1b\x85\xdf\xc4\ \x8bB)b,\x88\xe5\xcb\xc2\xbfQ\xe4Z\xbf\xa4>\ \x9f\xfd\xb6`\xc1g\xc5\x0ag\x00\xc6|Q/\x85\x8e\ AC\x0bFRg\xd7\xa5\x11k\xbbL\x89\xd8n!\ \xbc\x12\xf2\xe0#\x80\xb5m\xb6\xfa\xa8\xa0\xab\x12\xf8o\ \x1a@\x11O\xd0+h\x18$!\x19\x14\xc1v8\xc8\ \xc3\xadn\x9c\x06\xe6,m\xb3/j\x85\xb9(-\xc1\ \x0c<\x0eb@\xdeR\xb5<\xfc}\x83:\xf6\xe2\x08\ \x95\x98\xa9\x09\xc4J\x8c\xcc\xb0\x90h\xb9\xc32U\xaa\ Q\xce\xe3\xb3\xdc\x89O\x09l\xad\xf5\xac\xc1\x0cN\xcc\ \xb2pF\xc6\xfa\xbc\xa2\xce\x0a\x1d\xc2n\xac\xe9\xa2Z\ \x5c[\xf6^\xbf[ZG\x84\x83\x17\x1c\xc9\xef5\xba\ \x16\x9e\xae\x9cR\x92\x86\xfbcq\xcb\xde\xd2twY\ j\xaa\xb9\xd6-\xb7 O%28Y\xc8\xe2\x00\x95\ s\x03\xad\xd9\xc8\xcaA7q\xd0\x84D\x01\x84i\xf7\ X2\x81\xad\xc0\xc2\xf36\xc8\xcd6\xc8J>\x1f\xb4\ \xe4+\x004s^\xa5(H\xb1_\xa5\x9f\xf2V\x00\ \xc9\x9c\x9d\x02\xb2%\x19\x8a\xa4RwG\xb2-\xc2!\ 3\xa3\xca\x14Y\x94NkY\x12\x8d\x9f\xf2\xaa\x92\x06\ E\x83tfA\x98\x93\x92X\x81\xb0X\x86|<@\ \xc4\x9biT\x9fa\xe7\x0f\x80x3\xaf\x1f\x0d\xab\xaa\ \xa2\x0a\x9b\x03|\xc4r\x07\x80(\xf9S\x04\x22\x1a\x8d\ \xfa\x83ht\x80\xe0e\xc6j:=\xc8I\xad+.\ \x83Z\x96,n\x05a\xb6\x5c|\x14h\x03\xc1\xaaU\ \x1a\xf5\x06\x1c\x03\xfdv\x86\x1e\x0bF\x80\x91\xa3K\xe5\ \xe1F\x8e\xf2N\xa2#\xcb\x8c9\xc2\xd3\xc6%Y\xca\ I\x8b\x9888mA\x83x\x17\x0c\x9e\xb8\xe0\x8f{\ \x15\xda\x06P\x88=1\xdd\xbb\xc0\xf0Ypk\xc7\x95\ 9IN\x0bA6`\x0dX'g0\x94\xe2&\x9b\ C\x9b\x00\xaf4\xa2\x14\x82|`\x7f\x094\x99f\xfd\ $\x06P\x8d\xf4Q\xa5\xb4r\x16\xcf\x98\xdb\xe0\xac]\ M\xf0aY)\xa43\x90\xb8a,hy1\x81A\ \x8e\xfb\xfc\xf1\x0fY\xdaU\x9cz\xb1@\xd0\xe9\x1e\xc9\ \x93)jc\xd3\xc6\xea\xc87\x5c\x87\xde\xb5\x8b'-\ \xa2F=\xb3VH$@\x8bR\x85l\x80\xe2|\xe2\ \xedX\x09|\xb3\xcd:\xf2\xe1\x92f>i\xd6K\xdd\ \xcf\xa1H\x0d\x84y\x12\xdd0\x8b\xcct9O\x15F\ }\xf7(Lf\xb1\xa8\x01\xf9\xc1\xb4A\x0a\x86\x85\x94\ \x92\xcd*\xf3D\xb0\xcc\x03,\xb0#\xaa\xa6\x07i\xe1\ \xdb\xc1\x98hy\x8c\x09\xb0&-\xbe\xa7\xb3\x91r}\ \xe7e\x1e~\x9a\xa7$\x9a\xb1\xec\xe2Z\xadDG{\ lb\x9a#\xa9D\xef\xce\xb4\x85A\x90q\xd0\x9d\x1a\ \xd1\x09\xb1\x174b\x09\xca\x07\xdd\xd7\x99\x82\xbc0c\ \xd4\x0d%#N\xb1[\xb0\x92\xa2\x90k\x8d\x15\xfe\xaf\ e\x0a\xbaN\x04\x82\xe4\xec\xfek\x91\xcb\x0e,\x17\xe9\ \xe9j\x09]\xa8F\xec\xa3^R\xa0\xbf\xd7\xad\xe8\xa9\ @\xd7\xec\x08d\xad\x15or\xaeXW\x17\xc8zY\ BAH\xe9\x88<\xffonac\xd0\x16\xca\xdeA\ \xcac\x07f\xfe\xc0\xc5\xd6]\x0b\xfdE\xb8\xd4u\xac\ \xb7\xad\x5c\xc5Vh-\x884\xda\xe6j\x9b\x0dpy\ k\x1d\xa6p\xde\x16:;\x83\x8aF\xc3d\xed\x13%\ =0\xb4\xd8\xed\x00jn\xac\xd8\xbe\xaa\x1e\x16\xd6-\ \xaf\xe5\x96\xb5\xc3X\x08D]\x85\x1c\xf6\xb0\x9eAv\ s\xbbc\x81N\x93n\xba\x03\xf7|\xbf\xd8\xe4s\x0a\ \xad\xb3\x1bu\xab\xd2f\x05\x88\xd4\x9e\x07\xd0m\xff\xdb\ \xe6\x97\xec\xe7~v\xeamx\xbb<\xcf\xf6\xb7\xb0T\ /\xa7\xb9.xqA\xcb*\xa6 3\x01\xc5\xcb\x92\ ]\xf3\x84\xf2<\xbb\x0f\x05-\xa6\x97E\xc1\xa8c\xa9\ \xcel\xdfi\xf7\x9crv\x8a\xb1\x000V\xf6SF\ O<\x9d\xae5\xeb\x92\xcc\xcb\x16\xa05^B\x0an\ f\xe2\x15`\xf8z=\xc0{f\xbc6D\xcd\x0cQ\ \xc2:w\x0eJz\xb6!~\x04V\x94\xf4\xec&\x87\ p\x81\x96\xe9<\xea$\xb0a\x7fJ\xdd\x88\x9b\x19v\ \x22:u\xb7im\x09\xcbi\xa8\x10\x885Jk\x15\ \x05[\x12\xcd\x8fz\xfc\xc2\xa6\xe5K-=\xc4hu\ \xc8\xd4=\x91\xa2L\xd3\x94\xe6\x04e\x82\xee)\xfc\xa2\ \xcd\xb7\xb4Na9)h8\xcb\x5c\x8a)\xd6\xa4\xed\ +(\xadu\xa2\xe7 \xab)\xc8\xa0\xf9\x1bh\x19\xad\ @\xc5\x91U}4\xa3\xbaTr\x06\xcfeh\x8a\x9c\ \xbd\x13\x90\xc2>\x0a3\xa8\x06Q\x9a\xb7z\x81\xae\xa7\ \xa0\xcb\xcaZ\xe7\x8c\x93s\xa6\xae\xa5\x07{\xb3\x14\x9d\ l1 8,\x17\xd0\x1bE\x0e\x88\xcdt/\xa3o\ \x9cR\xc0\x19\xb2c\x1d\xa3\xfe\xa7\x1bug\x15Xh\ \x8f\x07\x02\x94\xac\x15x\xc8\xfc\xaf\x99U\x93\xd5\x8a\x8e\ F\xb6\xea)r\xb0\x1e\x0f\x08-b\xb4\x9b\x8f[T\ \xff\xc36\xa7\xbd\xe5;[M\xcc\x90\xe3\xf4\xca\xf0\xa5\ \x01\xfb\xd8F+\x81&\xc4b\xeb^\x8eG\xe06\xff\ \xcc\xa9\xb7j\xec\x054\xeco\xe0yM`\x8fi\xd7\ \x83\x049\x00\xa2\x8d\x86\x11\x0bf\x00\xd1\xda\x03\xeb\xd8\ \x1ch]\xd9\xb1q\x1f\xedb\xc9QFX%\x95\x22\ %\x90\x0cegBRZ\xca_\x95J\xe5\xf2\x98\x14\ ^h\xb6&\xc9`\x18\xb3\xd9@\x97\xc1\x8a\x5cL\x9a\ \xd36p\xb5)I\x96\xb4L\xe0|\xd2\xf7W\xa0=\ !$\xf8\xdbl/\x99q3\x91+\x1c&\x12\x81I\ \xdd,\xa8,d\xd6\xf1\xbbQI%\x9f\x8b<-@\ \x1bU+R\x9a\xef6k\xf3A\xb1\xbco\xc7\x01\xe7\ \x9c\xed\x18\x9f6\xc6\xd8 \xda\xd7\xdaa\x1c\xaerx\ \xa5\xb0j;\xcc\x8a\xa87\xa4\x95\x00\x89xn\xd1\xa8\ \x0eJ\xc8\xd9\xa9S\xd51\x9c\x94t\xef\xf9\xf50\xdf\ 2\xa8\xb6Y\xa45\xce\x7f\xd6(\xe0\xca\x12Wb\x9b\ 5\x8a\xb3y\xff\xb5\xba\x044\xbc\x87\xb7\x83\xc6,\xde\ \x00\x96\xd3\x13\x12w\x87R\xd51-\xe1y\xef\xb9\xeb\ `f\x81\x06\xd3\x0a=j5\xfb\x03\xed\x07\x9a\xdc*\ \x91\xde\xbd\x81BRRh+\x06\x04\xa4\xe4D\xb3O\ 0\xcfI\xbd\xb8j\x17h/\xd0\xe4\xdcr\x9cIu\ y`\x1b=\x00\xf1\xa3\xd6 \x08\x9b\x1c\x10x\x13\x05\ \xaf\xd5s\x8a8i0m\xd4\xdd\xcb\xa6A\x8d\x99\xdb\ q\xc6\xd0\xdb\x03\xde3\x22\xc0\x98YjD\xe6\xb8$\ \x0c@\x088\xe7#\x091#\xea\xf3\x0a\xb9x\x97\x97\ Kw\x95\xed\xcc4\x99\x14&\xf0\xc7U>n\x0b'\x8d\xfa\ {\xd0bX)\x80\x01\x11\xc1b8\xadr\x04\xc0\xe4\ \xb1\x0a\xc9\xae\x0f\xa0\x16\xdf\xc4\xa1* o8\xc7q\ 7\xc5\xcb[\xdb\x1b\x9d\x1d\xddC\xbbY\xcb$\xef\xe7\ \xf5\xc6\xb4\xc1\xa0\xbe\xb0\x84\xcb\x14M\xc6e\x0aQ\x86\ \x0c\x5c\xf3\x83\xde\xe1\x22;.':v\xc8\xf4 '\ X\xd0\x0f\xd2\x93\xd4\x1c\xac\x92\xc8iq\xf4\xe7\xdd'\ R|{\xa7\xcb\xa7Q\xa5\x95\x94\xfc\xbah\xb7\x8a\xad\ kD\x90 \xfb\xf6\x8b\x04\x8b\xc3\x03\xb7\x8d\xd6Ne\ \x0a:\xddfy>\xcf\xba\xa5\xc6\x1d\x05\xb9\x96\xe6\xb7\ \x8c\xe2\xca\x9d\x1cP\xbb\xf3v\xf3f\x9d\xba8\xb6\x88\ \xd0>\xaf\x80\xe8\xa2\xbb\x0cQ\xb6\xf7\x93\xd9\x8b\xb9\x14\ |9R\xbc\xdc\xf0\xd4nmi\xd5\x14\x8c\x9f\x17\xae\ \xb7g\x9b<\xa5c\xa9\xaa\xf74\xaf\xce8\xabp\xc9\ \xfb\xafi\xc90X\xa8\xcb\xa5U)\x86&\xa3(\x19\ L\xaas\x82VM\xaf\xf5\xb3\x1b\xcb\xb8$Ej!\ x\xba\xd8\xd5\xe526D\xb2\x99\x0e+g'zi\ T$9i\xa6;h\xc6>B;\xe5\xfcl\xfb\xb4\ /\x9c\xfa\xe9\xb2\xc04{\x96cB\xfe\xd5\x98w\xa8\ \xf3x\xb9y$\xfc\x0e5\xd6z\xc1\xff\x7f\xd3&\xe2\ \xb5\x81\xb7\xf7\xc0\xd4\x0b\xcb:\x08\xf5\x18\xb9s\xb4\x18\ \xbd\xa4\xca\xba\x17\xd0\xb7X\x94i\xb4\xc0\xda\xed\xdf\x00\ e\x8c\x7fQ\xc6mf\xa7\x8b9 =\x97\xccK\xe7\ \xa8\x9c\xd3\xe31n\x02\xac\xd0nLN)j\x8e\xf6\ \x88y\x81w\xeb\xf2\xf5|\xa3\x82\x05\xd8vm\xde\x0d\ \xa8\xe0\x9f\x81\xdb*\x82u<\x07\xef\xf3\x82v\xde\x9b\ \xbc\xc7\xc3\xb1\xb4\xb8\x5c\xdd\xf1D\xd7\xeay\x17\x8a\x03\ \xc3\xc4\ `b\xccP\x0f\xe4\x10\xbd\x10\xe33\xaeoE[\xe0\ \xcf\xd9\xf0\xb7\xf4\xd6f\x1f\xfd\xfe\xc5\ \xe8\x8b\xbeL5\xe7\xbb\xec\xe2\xd4\xb0Hz$\x96\xd1\ s\xd9\xfeX\x06\x8b\xc9.\xd0\x0c%\xb9\xd0\x1f\xcb\xf7\ \x0b\xf4\xb5P)\x88\x80\x04Z\x1d\x90\x99\x0f\x03I\x10\ \xb6O\xed\x9a\xd8\xbc{r\xb0k\xff\xf8N2\x0a\x1a\ V\xe7\xe0;\x88\xfbH\xc5\x1d\xc4FW\xa2\xc2\xa4\xa2\ iR<\x8b\x85i1[ \xaf\xdf\xe9\xe9\xee=G\ \xd8,l\xdd\xb2\xe5\xec-\xc2\x10\xbb\xff\xd9'l=\ \xaf\xbbG\x88u\xe5\x89\xc4P\xd4]t9\x84\xa9\x0d\ &S\xed\xb1\xc2ACI\xec\x11\x0d\x89 F\x81\x04\ \xe3h\xdc\xda\xd69\xee\xdb\x1a\xa1!\x8e0:\xda7\ >^6\xd6\x07\x96(F,)\x11i)\xd4~\xda\ \xe9\x8c5\x05CaeK\x9c\xdc\x1c6\xa9\x08\x118\ \xe6\xb9\xc0\x09\xfa&\x88\xe8\x92X\xbc\xcb\x9d\x16S\xd8\ b+\x84&\xec\xce\xa0\x94\xb2u\xbf\x88R\x16'\xa3\ \xe5\x92\xa9\x22\xb3$2\xb9\x13\xa9\xf8\x06\xa4@/\x01\ J\xfcx\x0f\xf1\xd6\xcfb\x82\xca\x86\x8d\xf4\xbe.\xe6\ \x88~\x5c\xf3#\xef\x16RgRbg\x9d\xdd\x1e\x08\ \xa0\x9d\xdd\xa0\xa3\xee\xaf\xa0!\xce.Wd\x0f\x18\x04\ \x12\xacf\x97\xcc\xd8\xe3\xde\x8c%\xe7_Fg\x09Q\ \xccyQ\xd2\xc1\x90\xeb\xf3\xc4\xaa\xab\x982;\xcac\ \xbd\x1c\x8b\xf5\xd8\x9b\x06\xe8\xf7\x0b\x82\xad)K\x98\xcf\ \xc04\x0aS\x18\xdd\xb3gR0U\x9e\xe8\x1dZ\xa0\x00mi\ 2\xdeVA\xbaJhq\xb5|\x018\xb1$\x010\ \xdf\xd5\x962\xd4\x8b\xb5;\xb3\xaa0\xf9\xd9\xcc\xe7$\ \xa3\x8f\xc0+=#}\x9b'\xa9\x0ac\x9b\x05\xf6R\ \xfe8\xe2\xdd\xce\x98B\xb1\xde\x17\xb5D\xa1J\xb8\x13\ x\xafFH\x97\x03\x97(\xe5\xb3\xd8\x9e'\xd2[L\ \x19\x9c\xcd\x0b\x1a9}$\xc7Z\x94\xe0\xa6v\x96O\ \xe8z\xebt\xcb^\x00\xa0\xbd.,\xe5w\x99S\xce\ \xfb\x0eKg\x95\xdd\x19\xe2\xba\xcaG\xacx\xd5\xb6J\ \xf6\x1eD\x8f9\xe7\x95\xc4Cy* f\xeb\xbf\xf3\ \xe6\xcd\x09\x17\xf8\xab\x8d\xf7,\x1a\x857\xe3\xed\x14y\ Q\xcfx\xa0$\xa7S\xec\xa0\xdftM$\x16\xb1\xbd\ {pP\xc9B\xac\xa4%28g${.P\x96\ \xde\x1f\xe2\x02\xa4\xb9x\xf7\xb6\x86\x0c\xb6\x11\xaf\x99o\ \xb9\x9e\xe3\x02\xf3M6T\xb8JQ\xc9\xab\x03=z\ \x04\x5c\xf93e\xb9\xdf\x94\x95Mp\xfe\x84G\x14\xeb\ \xdd\x85\xa5\xb3\xaf\xb5\x82\x0b\x82>A\xb3y\x81\x92W\ C\x82O';\x0f\x0bx@S\xd4V\x01\xa1\xfc\x0e\ \xf8W\xa1\x22\xca\xaej\xcc\x1a&}\xb6(-\xe4f\ y==\xb6\xa2\x9d\xf0\xac\x96M\x02\xb5DV\x81\xf4\ +^\xd0uE\x86\x1f\xa4\xc4,Dk>2\xc2\x0f\ \xd8\xb0\xfdN\xf8X\xc2\xaaF\xb9L\x1c\x81$\xa6@\ \xe5{\xd1\xca\xdce*(I#\xfd\xb1\x9f\xce\xf1\xd4\ 5c\x15\x97UG\x06\xb7|\x07\xc6y\xf3\x00N\x9c\ \x87|\xbb\xcd\x03\xf3s4\x5c#\xed\x8c\xacZ\x8b=\ #k\xa6\xe2\xfc\xbe\xbfl\x0b\x11\xf9)\x83\xd9\x93G\ \xeaD\xac\xee\xc1<\x8cf\xc0'\xde\xa7\x93ju\x96\ \xc6\xdb\x1c\xfe6Z\xa6\x9f\xb7Ry\xf3\xed\x81f\x0f\ \xbd;\x16\xc1\xb8\x13\xc3\xd2\xf7\xf5\xd4\x1f\xd8pY\x14\ \xc9\x8c\x8b\x87\xa5\x5c!g\x8b\xc5\xc9\x9b\xd44\xf6\xce\ \xdb\x96\xd9Q\x19\xb4\x95\ \xb0\x8dz\x9c\xa7\x7f,\xae)\xf2\xe3\xeeZs\xae\x17\ \xe9\xcblGp\x0d\xd0.6\x9f\xb7\xfbS2\xc3\x93\ \xc2\x81g\xf2.s\x22t\x0ei\x0f\xb39\xab)}\ !\xeb\x8d&Vf~\xd8Y\x92\x1b\xae\xb7\x1b\xb7=\ Fv\xd7i\xe4v\xeb=\x11v\xbb\x5c9[\xa4\xfe\ [\x088\xe1n\xb1\x9fp\x07\x84T+\xc1\xab\x88\x8c\ \xc1\xf0\xf7\x04R\xa9*\xf2\x05\xd7L+\xd9\x82O\x94\ \xd9k\xbc{\xdd\xbd\x05\xc1\xff\xed\xeb\x8d\xc6\xdb\xd7i\ \x1f\x02\xc3\x10\xd1\xf1a\xdd\xa1\xc5\x819B\xf1\x94\xe0\ \xd7\xe3\xba\x05\xe9>/C/F\xd0jk.'\xfd\ \x0ffg\xa2\xe3\x0e\xe0\x10f-\x83\xc2@\xd6u\x95\ a\xf6\x06skB\xe5\xd8d\x9f\xdbs\x11\xee\xf5\xf9\ \x81\x1d\xe9\xfc\xd4\xdc\x9ev\xb5\xfc\xc5\x0f\xbd\xd3'z\ \xa5[\xf0{)\xb9\xdb\xd3\xdeo$/~z\x8d\x83\ \x17$\x88t\xe3Fd\xca\x97\x17^wH\xdcn\xd5\ \x94}\x8f\xe6t\x1a0\xcd\xb0\xf7:\xcd\xb8\x9eS\xbe\ \xc5+5\x81\x18\xde\x91\xbb1\x81X\xbb\xe9\x0d\xc3y\ d6\xa9\xab\x86-\x08\x8e\x18\xf8\x7f(\xc1vyv\ \xc5\x82n\xbe\xff\xbd\xf8\xadK\x9c?\xf6\x8a=\xdfI\ \x83\xc1\x1eZ\x97\xef\xf3\x05\xd6A\x8b?\xec}\x04r\ \xc9\x85t\x95\x1a0\xc7RG\xb0\x9e\xc8\x08\xe38)\ \x89\xc2N\xe3\xc2\x87'\xf4\x0d\x0e\xe8\x84\x0c)j\xba\ \x1d\xb0\x8b.\x8c\xaf\xa4\x18\x08\xdf\x19\x12\xd2Ba\xdc\ \x18\xf7\xc43\xe48\xb9K\x83\xc9\xcdZ\xe5*\xaf\x94\ \xc5\x8c\xba\xd2\xa8\xb8\x07\xfa\x0c\xa3\x01\x86\x9e\xbaA\xc0\ ?'f\xa5\xa4-\x0f\xf0]\x8a`\x1c\xe1\x9b\xa7(\ \xde\xca\xd9d(\xa7h0*\x80\xe9\xae\xae\xcf~\xad\ \xb2\xb8\xbd\xab,X\x1e\x02d\xe8A\x80\x00}\x90\xd8\ \xda\x8a\x8a\xff\x05\xef\x88\xd0\xd3\ \x00\x00\x1fQ\ \x00\ \x00k\xc1x\x9c\xbd<\x0bx[\xd5y\xc7\xb6|m\ \xcb\x8e\xed$&$\xc6\x84k'\xb1\x1d\xd9\x96\xfc\x88\ \x9dX\x15N\x14Y\x8a\xed\xc4\x8e\x89\xf3\x82\x908\xd7\ \xd2\xb5}\x1bIW\x91\xae\xe2\x98\xae\x1b\x1fc}A\ \xf7A)\x04h\xc6J_\xb0\x92\xbe\xc6\xdaR\xcaZ\ \xda\xc2h\x81Q\xc6(]W\xda\x8f\x8e\xd1\x8e\xad\xa3\ \x0f\x0a\x1f)\xdd\xd8\x7f\xce\xb9\x8fs\xe5\xfb\x90IY\ Ss$\xfb\x9e\xff?\xe7?\xff\xfb\xff\xcf\x0d=\x90\ X\xfb\xf8\xaf\xce\xde\xfa\x8f\xcdM\xdf<~\xf7\xdf\xff\ \xe4\x1e\x84P\xa9\x90\xdd\x89P%|*\x7f\x17Be\ \x0f\xd3\xb1\xaa\x94\x8e\x87\xaf\xa2\xe3\xb1v\x84&\x82\x08\ \x1d}\x00y\xbe\xeeAh\xcb\xcd\xc8\xf3}\x18\xfb\x07\ \x91\xe7\xe9M0\xbe\x1by^\x84\xb9\x15\xbfG\x9e_\ v\xc3\xf7\x1f\xa1\xf2\xee\xdd\x007D\xc7\x81\x19T~\ #<\x7f\xe5nT~w9B\xa1\x95t\xbc\xea\x1b\ \xa8\xfc\xbe\xe3\x08\x0d\xbf\x84\xca\xbf\xff\x18B\xdb\xb7\xa3\ \xf5\x1d\xff\x8bP\xf4\x18\xf2a<]o!\x1f\x86\xef\ \xefG>\x0c\xd7?\x87:\xf0s\xfe7\xd0\xae\xdb\x1e\ A\xa8\xfb\xebhda\x10\xa1\x9e\xef\xd11\xfc\x14\xda\ s\xc7\x0c\xe0\xafBS\xe5\x1b`\xbd\xaf\xa3\x837\xde\ \x8aP\xe4\x83\xe8\x90t\x0d\xec\xcbG\xc7c\xf7\xa3C\ \xb7\x9d\x87\xef\xd3t<\xf6\x12:\xfc\xd0\x97\x11\x1a\xfc\ 5:\xf3\x89z\xd8s\x1b\xfa\xf6\xe7\x9eFh\xf5\xd3\ %%?\x7f\x06\xa1\xa1\xdf\xd1q\xe6W%k\xef{\ \x16\xa1\xbe\x1f\x94\xcc\xfc\xc9_\x22\xb4\xe6X\x89t\xdf\ \x17a\x9f\xe9\x92\x1b2\xb5\x08\xed]Yr\xcb\xf91\ \x84\xe2\x97\x97\xbc\xd9;\x0c\x7f\x7f\xa3t\xf5-\x1fG\ \xc8\xfb\xa7\xa5S\x00\x0eU\xbf\xbf4>z\x05Bu\ \x9e\xd2|u?\xac\xf3\x0e:\xeeo.\xbd5\x0e\xeb\ m\xda^z\xe7k\x19\x84\x1a\xdaK\xcf]\x12F\xa8\ \xf5\xb2\xd2\x07\xf0\xba\xfc\x7f]\xfa\xe3\x15@\xdf\xab\xaf\ /\xfdM'\xe0\xd9pk\xe9\xf9G\x1f\x85\xf3\xfap\ Y\xd5\xcf\xd2\x08\xed\xd9^\xe6\xbd\xa2\x04\xa1\x91P\xd9\ \x8a\x9ec\x08\xadX[\xd6\xf4\xa8\x0f\xa1\x9d\x9f*\x0b\ \xfdy\x19\xac\xef\xc1\xb2\xdd\xb1\x17\xe1\xfb\x01:N}\ \xaclz\x14\xe8\x7f\xf9\x8be\xd7\x9f\x85y\xcd7\x97\ }\xe4\x99\xa7`\x1d7\x95=\xf8\xfc\xb7\x10\xea\x0c\x94\ =\xff<\xd0\xbd\xf6\xfe\xb2\x97>\x07\xeb\xda|i\xd9\ /o\xbe\x16\xa1\x8d\x0d\x9e\xa3\xa3}\xc0\x17\xe7=\xe2\ \xb9\xd7\x80\x0f\x1e\xf1\x5c\xf3E\xc0w\xc5\x87a\x84\xf5\ t\xff\x97\xe7Z\xee\xd3\x08m=\xef\xb9\xf1I\x05\xe8\ \xf5\x19\xcf\xed\xa3\x0f\x01=\xbfM\xc7+\xbeI\xc7\xab\ _\xf4\xdcu\xfd\x0f\x10\xda\xb7\xc9sw\x0a\xe6\xf3\xd7\ {\x9eh\x1cE\xa8\xa5\xc3\xf3\xdc!\xd8\xe7\xfec\x9e\ \x97=\xf7\xc1\xfc\x8e\xf2\xaa\xf7\x09\xb0\x9e\xdb\xcbW?\ \xb9\x1f\xf8\xe1\xc3\xe5\xdd\x9f^\x8dP\xdb\xd9\xf2\x1e\xfc\ }\xcbA:N\xbd\x5c>\xed\xe7\x81.\xf5\xe5\xd3\xf7\ \x02?]tO\xb9\x14\x02>\x0a\xbcQ\xae\xdc\x06t\ \xaf\xba\xad\xfc\xd4%w\x01\xdd\xe7\xcbo<\x07\xf4\x1e\ \x0e\x94\xdf]\x09x\xaez\xa5\xfc\x93g\x87\xe0\xb93\ t\x9c~\xba\xfc\xde\xc3\xaf\x02]\xab\xca?{\xc3w\ \x80>\xc7\xe9x\xa4\xa5\xfc\xd9A\x90\x05a\x15W%\ \xff\x1d\xf0s-w\xc9\xc27\xe0\xfb\xd7\xb9\xae\x9dp\ \x1e\x01\x1f\x1d\xa7\x0fs\x83\xd7M\x00\x1d\xc6\xe8x<\ \xc4\x85.\x07~\xbaz\x82\xdb\xd5\x0e\xf4\xee\xfd*7\ \xbe}#B\x97\x0epG{~\x0a\xd2W\xca\x9d~\ \xecK\x08u\xdcN\xc7p\x90\xbb\xed\x17\x9f\x02\xb8G\ \xb9;wc~y\x88\xbb\xf3\xb5\x08\xac\xf3\xcf\xb8\xb3\ \xedpN\x07Ns_\xf9\x06\xec\x8f;\xc6=\xba\x19\ \x9f\xef\x0b\xdc\x93\xcf}\x12\xf8\xf6~\xee\xf9)\x18\xb9\ \xbf\xe5^\xba\x0c\xe4\xa2\xebQ\xee\xa5\x1e\x18\xfb\xee\xaa\ \xa8\xbe\x09\xe8\xb0\xf2\xb5\x8a\x06\xdfz\x84\xde5Q\xb1\ \xee\xa3y\x84\x82\xf7V\x0c|\x1f\xe0TtV\x84F\ W\x22\xb4\xf6.:n\x7f\xa2\xe2H+\xfc}\xdd\xb9\ \x8aD\xfaA\x84<\xe3\x15\x1f;\x0arw\xb8\xac\xe2\ l\x0f\xf0\xd1\x91_W\xbcq\x1e\xf6}\xe0\x99J\xcf\ \x13\xbf\x83\xfdl\xa9<\xf0/@\xd76_\xe5\x5c\xd7\ '\x80\xef\xee\xa8\xbcn7\xe0\x19\xb9\xbb\xf2\xbe\x7f\xab\ \x02\xb9\xfc\x1f:^\xf1\x9b\xcas\xebN\xc3y\x1f\xaa\ |p\xe8$B\x8d\xbf\xaf|\xec\x19\xd8O\xc7/*\ _\xff\x00\xac\xa3\xea?\xab:\xeav \xb4~\xa6j\ h\x05\xd0ghWUxb\x15B\x97\xfd\xb6\xea\xd0\ \x0f\x81O\x82\xb1\xaac\x1f\xfcg\xd8\xe75U\xc79\ \x90\x87\xd0\x87\xaa\xe6J@\xa0\x8e\xdcP\x95z\x1c\xe4\ \xc5\xf7x\xd5{\xf7a\xfd\xb3X\xf5\xdes _\x17\ \x7f\xa1\xeaOk\x81\x1e]\x97U\xdd\xf2\x0c\xec\x7f'\ p@\x0c\xf6q\xc9\x0dU\xb7\x1d\x00>\xbf\xe4\xbbU\ \x0f?q\x00\xa1m7\xd3\xf1\xf0uU\x8f\xec\xbd\x05\ \xf0}\xae\xea\x91\xb9\xb7\x10j?\xed\xad\xf8o\xe0\xcb\ \xdd\x03\xde\x9a\xf7\xc3\xb9\x8ee\xbc-W\x1d\x02\xbe\x1e\ \xf5N\xff\x10\xbe\xd7 \xef\xf4\xabo\xc2\xfe\x9a\xbc\xd2\ \xec\xf7\x00\x7f\x0d\x1dC\xc3\xde\xdc\x10\xf0\x8b\xe7\x8c\xf7\ \x86\xef`\xbdv\xce{\x06\x81\xdcT\xf7y?q%\ \xac\xf3\xca\xa7\xbc\xf7\xde\xf9\xef\xc0W~\xef\xc3\xed7\ \xc1\xfa\x0fVw\xde\xd3\x0c\xf2\x95\xae\x8e\x9d|\x05\xa1\ \xfa/U\x1f8\x09\xf2\xe7;X}<\x0b\xf3\x0f5\ U\xcf\xdd\x08\xf2\xdd\xb1\xa7:\xfd%\xf8\xfb\xe4P\xf5\ )\xcf\xafA/\x9d\xac\xbe\xe6[\xc0\xef\x15\x8fT\xbf\ \xe7\x1f@\x0f\xb5\xbe\x5c\xfd\xc1\x85\x8f\xc2z\xae\xa5c\ \xf8\xfd\xd5\x9f|\xbe\x06\xf8q]\xf5w\x1f\x03y\x99\ :R\xfd\xc2\xdd0\xf6\xbeB\xc7\xa9\xa6\xea\xf3\xb7\xde\ \x0f\xe7p\xa4\xfa\xcd\xafm\x05~>SS\xf2\xf3\xeb\ \x80\xee\x9f\xa9i\xfc\x1a\xc8G\xe8\x89\x9a\xf6u\xa0\x7f\ \x83\x7f\xa8\xe9}x\x0a\xe4a\xaaf\xf2\xc7G`_\ \xcf\xd6\x88u~\xe0\xa3\xef\xd1qx\xb6&W\x0fr\ ~\xf9\x99\x9a\xdbN\x02\xfdkRtl8Ss\x87\ \x08\xfbn\xaa\xa8\xf9+\x10\x03\xe4\x1d\xae\xf9\xec\xb9\x0a\ \xa0\xeb\x035_~\x1f\xfc>\xd2G\xc7C\x9f\xaf\xf9\ \xc9\xb7\x81\xaf\x06\xb7\xd1\xf1\xf0\x835/4\x82\xfc\x1d\ J\xd5\xbc\xf9\xc2\x87@N\xae[\xe1\xf9N\x1c\xe0\xfc\ ~\x05\xf7\xb3\x17\x80~\x8b+VF\x02\x00\xa7d\xc5\ \xd5\xaf\x89\xc0\xdf\xdd+N\xde\x0er\x849\xef<\xd8\ \xb1\xb2\x9f\xd3q\xc5\xebt\xdc\xf6$\x1d#\x8f\xd2\xf1\ \xd8x-/\xb5\x80>y\xae\xd6\x9f\x009\xdb6P\ \xbbu\x14\xce\xab\xfc\x14\x8c\xa0\x17\x8f?P;}\xfd\ \xcf\x80\x9e\xef\xab=}/<_\xfe;:\x1e]U\ {v\x02\xf8i]e\xed#c@\x7f\xef3\xb5\xff\ \xfa,\xf0U\xec\xcd\xda\x97z`]\x1b?]\xfb\x1f\ \x0f\xdf\x01\xeb\xbc\xa9\xf6\xd5^\x90c\xfeu:\xee\xe8\ \xab\xf3\xe2s8z\xa2n\xe0+p\xde\x17\xbdY\xb7\ =\x0b\xf4\xd9\xb4\xb1\xee\xe8+\xa0o6}\x95\x8e;\ \x9e\xad\x93\xbe\x00z\xec\xaah\xdd{\xd67\xc0\xb9\xa0\ \xba\xf7\xae\x04~\xa9\xf9f\xddu\x1f\x87\xf3mx\xb9\ \xee\xec\x99\x8bA\x1f\xcf\xd6}\xe6 \xd0\xed\xc0\xbb\xea\ \xee\xf9\x0a\x9cO\xe3\xdf\xd4\x9d;\x02\xeb\xbd\xf4\xb70\ \x02\x7f\x5cvy\xdd\xfd\x1bA\xbe.\xdeG\xc7\xed\xe9\ \xba\x7f\xda\x0e\xd4\x89\xae\xa9{\xee%\xa0\xd3\xc4\xa6\xba\ \x1f\x95\xc1\xb9\xb5|\xb5\xee\xa7\xef\x81}\xec{\xa6\xee\ \xd52\xe0g\xf4\xa6\x04F\xebF8\x01\xf4\x11\x14B\ \x02\xe2\xd1<\xca\x22\x11\xcd\xa2\xcb\xe1\x93\x02\xff2(\ \x87\x82(\x00\xff2\xf0\xfb,|\x13\xe1\x93\x8c\x92H\ \x82\xcf\x09\x94B~4\x07\x9f\x15x>\x8ff\xe0\x9b\ \x04\x7f\x1d\xba\xa0\xd9!x^@C\xd8;A\x1c\xfc\ \x8c\x86\x04~>+\xce^>\xaf(\x99\x5c0\x10\xc8\ \x88\xd9\x9c\x98\x91\x93R.\x91\xf2\xcfI\xca|~\xc6\ /\xc9C\xce\x7f\x0e\x05\x84\xa1\x0a\xac\x5c\x85\x199\xaf\ L\xe7\xa5i%[\x82\xb7~\xa7\xeb\xd6\x15\xf8}\x12\ ~\xe6\xe0\x09\x81,:\x05\xdf\xec7\xb5t\xfb\xcb\x85\ PH\x82\xf1B\x12(bR\x9c\xcb\x0a)\x7fJ4\ \xedw\xc8\xed\x81\x0b\x22\xc3\x029+\x85,\xda\x8f\xe2\ \xb0\xe4\xd42\xc9\xb0<\x08\xeedX\x90\x14E\xcc\xfa\ \xe3r\xca\x86\x0c6\x0f\xd8\x92\xa1\x91\xeb\xe2F\xb8a\ \xc4s\xed\xdc\x18\xd7\xc3\xf5\xc1\x7f\xdb\xf1o\xb8>}\ \x19\xf5a<\x89\x9f\xd4\xe1YB\xaa\xe7\xda`V\x94\ \xdb\x0a\xb3{\xe0'\xa6\xcf\xf7\x0e\x8b\xa7\xc4\xa4\x8c\xd7\ c9\xb3\x86\xcc\xec\xe1\xfc\x5c?\xb7Y\x9fU\xb1G\ \x8a\x8b\xe9\x9ch9\xc5\xc3\xf9\xb8\xa8\xfeh\xe9\xde\xdd\ \x96Ou\xc2r\x02x[\xb0=\x8c\x02\xfc\x17\xf8\xcd\ \x98\xcbv/16\xca\x0f\xcb\x0b\xe9\xa4,$\xf8q\ !-\xcc\x89YK4k\xb9-\x5c\x84 \xf1\x03\x9a\ ~\x18\x87\xb9\x1d\xc0ZA\x1d\xe4\xaa\xa9\x8c\x18\x97\x84\ $\xaf\xcc\x0b\xe9\x139^\x91\x83\x96\x90V\xa94\xf4\ \xc1\xd2\xf0\xe2Y*V\xef\xcf\x0a\xe9\x5cRPd\x1b\ 2\xf2\xdc&n\x00\x00\x84\xb9\xcd\xf0\xb9\x07>\xb5s\ [\xe1\x93\xbek\x1d\xd4\xcap\x22alm\x8f\x94>\ \x81\x01\xae\x10\x12\x89$|f@6\x99@n\x82\xb5\ \x8d\xc2\x18\xe6Z\xe1{\xd0\x0cN\x91\xf9\xb8\xa0\x88s\ rv1\xc8\xdb\x80k\x04\x02\x8d\x018\xbc6\x1f\x00\ \xc2\x1b\xdd\x09'\x14e\x8e\xbd>\x9c8%\xa4\xe3b\ \x82\xdf\x9bQ$9\x9d\xb3\x81\xe5%\xcb\x09\x02\xa4f\ }.\x17\xc13\x9363z\x01\xdb \xe1\x87a\x82\ ;\x02sc,}T.\x89\xc2O\x98\xac\xd0\xd8\xe2\ \x9a\x08\x1c\xdc\x9ch\x10-&'\x13\x94\x1d,0\xf1\ &Lm\xc0eQ\x166\xcb\x18*\xdcY))\xf2\ i!%\xda\xd2.\x04\xf3#\x00w\x0b>\x0er\x18\ \x18C\x1b\xf9\xf1\xa9\xd0\xdb\x89\xe0E0W\x13&\x1c\ \xe6b\xdc6\xf8\x8b!)M\xc3\xa2\x22\xc6\x15~j\ 1\xa7\x88)~2+\x9f^\xe4\xa7DE\x91\xd2s\ v\x94n\x84Uw\x02\xac\xc0\x12)bX\xa0\x800\ \x0e,`0\xa6\x1d\xb0:\x1d\x18\x9el\x0bJS\x1b\ \x1b\xb8>fr\xe5\x88(8-\xa0\x09\xe8\x16\x03*\ \xd1\xb3\xc7\x10Z\x08\xb5@\x1f0P<\xa3\x93\xaex\ \xc96\x8c\x19\x8ebT\xc8c\x11XE\xa4\x80\xc7j\ \xf7\xe0-\xc7e\xf9\x84$\xe6\x8a\x96!M@\xc7\x18\ \x19\xaa\x19\x97\xb3\xa2\x8b\xfcXjP\x8b\xe7jU\xbe\ \x8d\x01\x8enf\xb5\xe5\x93rV\x09\xdaL\xaa/d\ Gf\x1af9\x9bi-\xf00\xc6\x85\x95M\x9f\xae\ \xb5Y\xae6\xf0\xd7S\xde\xcd\x08\xb9\xdc\x82\x9cM\xd8\ \xd2\xab]\x97\xbf(\x8c>\xa0^\x80|\x1bv\x83\x9c\ \xcf\x89YG\x89\xd4(\xd3U\xc0\xbe\xde}\xe2\xac\x98\ \xcd:\xf0`+\x9c>\xe5\x06\xac\xfb\xa2\x5c\x07\xa3{\ \x8c5\x1a\x10k\x0e\xc0Zx\xb0?i\xc5\x16f\x0b\ x\x0f3h\xc8B\xdb`\xaf\x02\xfe\xc2j\x9d\xd0\xcc\ PL\xd38\xa1\xc0\xcc\x10\x85\xbaV\x98\x05\xdfa:\ \xa1J\xdft.\x1bg\x19OG0\x0c[\x06\xebd\ \x01x\x05\x00\x9e\x92\xae)\x1a\xa6\x99\x09+y\x9e\xdf\ \xbb\x1b\xfe\x83'6\x14Ld\xe9\x1e\xc6\xf2DN\x14\ \xf6g \x87\xd9\x191\xcd\x93\x9d\xb9\xc0\xf0\xe9\x9b\xc1\ :5\xaa\xd3\xdf\x90\xd3fm{:\xfcF\xd8\x9c\xae\ \x99\x22r*\x93\x04]\x9ah\xc6{uF\xd6\xc4P\ N\xd3~\xd6\xb4\xc3:\xc4\xa0\x9d=D^\x85\xd8\x05\ \xa4\xd8F\x94\x17=\xf6\xa5P\xeb\xf1\x89\x08\xa7D^\ \xc8\x15\x038\x08KlS\xedW\x0f7\x00\x9fvq\ \xdd\xdc.\x95:\xd8_\xc2\xe3fB\xfb\x1e2n\x00\ n\xed\x01\xb7\xc0\xaf\xa3\x5c?,\xa7\xdb\x14>7/\ /\x80\xbf\x03NTJ\xcc\xe5\x80y\x81\x81\x05)\xed\ w\xd9\x19s\xb8\x96FGG\xd3@\x0e\xdb\xc2 \xdb\ \x03\x7fg\xfcA{|\x8d\x00\xaf\xd3\x05z-\x03}\ \x8f<\x87\x01\xd6'\xe5\xb9\xe9\x05)\x0d\x10M\x94\xc1\ K\xde\x04\x00\xe0\x88\xb8 |\x1f$&,J\xbc\xcf\ aV\xfd\xef\x03xY\x85\x1f\xcd\xe5\xf2\xa2=\xc0V\ \x9d]Z\x08\x98\x11X\xeb\x08!8\xd6B\xed\xe0\x99\ \xb5q\x13\xc8\xf0\xae.\xc2\x0c\xd4\xc2\x0b\xc9,X\xd8\ E^<-\xe5\x94\x5c3\xa1@\x0a\x0eV\x85o\x16\ \xf0\xcfSF\x85\xff\xc6!\xdaI\xab\x91\xd0\x10,w\ '\xc1\xe4#\xba\x8au21\xbf\xb5\xe9\xfc\xa6\xb9\x0a\ Q\xb2\xd5\x9dx\xf3 \x99\xbc\xf9\x1f\xcc\x19&\xb0z\ \x80\xbe\x01\x06\x9e\x8fpn\x01\xa7r\x97\x91}\x9b\xd6\ \xb3D\xd6\xb3 6!\x08?\xe0`\x87\xf6c\x1e\xc6\ \xda\x96\x9f\x17r\xfc\x8c\x08\x5c\x07\xea\x17\x1c\xd4\x19q\ \x16\xecl3o\xf1\xbf0\xd8\xdfE9\xcf\xe7\xf2\xea\ \x87\x05!\xad`\x1f\x19f\xf2\x92BEa{(\xa0\ \xa2\xd0u\x88-!?nM\xc8\x02\x01\x1d$*q\ L5\xa0\x98\xbd\xbb\x89\xb3hvky\xddpEu\ a\xc6\xe4\xed\x04Xm\x5c/\x17!\x0cK\xb8\x0a>\ \xc5\xc8o[\xc1D6\x13\xbd\xe3F\xba\xf7\x14\x92\x0e\ \x07~\x02vE\xf8\x05)\x99\xe4\x13\x22\xd6\x9bVD\ \xe35\x11\x02\xdab\x878\xc7\xcff\xe5\x14&_\x16\ H\x9fM\xf0\x09)w\x224\x93\x1d\x9a\x8c\xee\x1b\x0f\ OD'\xf6\xef\xb9\xb2y\x194|\xea\x82h\x18\xd1\ \x8d\x04v !\xce\xd3\xd5\xc8RJ\xee$\x14\xa3\x8e\ \x0c\x95\xda\x18@\xc2\xaex\x8f\xaa\xbb)^\xf24u\ {\x0aU\x129\xa9\x96\xa2(\xfe\x17.\x14\xcf\x8a)\ \xf9\x945\xc5\x05| \x9aN\x93 $\xc8\xf1R\x9a\ j\xed\x93y1/bj\x93Ch\x09\xc3\x93\x9a\xf6\ \xcb\xb5\x80<\xe4\x94\xe5\xd0\xbe\x85\xb1\x81\xb03\xa0\x9e\ \xfa\xc9\xc2f5\xc0~\x22r:\x0d\x81\x0av`\x19\ \xbbe\x0b\x9e5\xb1\xeaqX\x00^\xcdXp1Q\ \x0c\x5c\x1f\x03w\x04\x8e\xd5\x10\x1e\x1f\xd1\x90c\x16X\ \x9a\x00K4\xa7H)\x08\x87!.\x96R\x22\x9f\x14\ g\x95\xe5ncY\x9e\x82-\xc4y\x15\xe2 pq\ \x0fU\xe8\xc4\xf9\xc5*v\x8c\x04\xc11\x22\xef\x1a\x97\ ;r\xae\xba.\xd0\x05\xc4\x94m\xd65\x02\xcb\x8d]\ \xd8\xe3\x90\xb3\xd9\xc5f\xfeJP|q\x01;\x03*\ \x0b&\xc4Y!\x9fT(o5\xbbsM\x93\xc9\xe7\ \xa4\xae\xc7Rz\xd4a\x8c\x8a\xa0\xe4\x8bb\x95\x8d*\ \xcc(\x09\xa05\xb9\x8b\xc1\xce\xadXf\x0d\xc0&\x89\ \x17p\xe9y\x10*\xb1\x18\x14#\x96*\xc6l\xa34\ .\xc2\x87<\xc8m\x06\xabd!\xea\xfa26k\xf2\ =,\x9b\xccI\x5cNC\xe8\x9e\x17\x0dS\xe2F\xd0\ 0\xc0\x95\x90\x80z\x09\x1bD\x09\x1b`5\xd7\xc9\xb5\ \x1b\x96>\x9c\x95\x84^P\xb7\x09>-\xe3\xc3\xcbe\ \xe4t\xc2\x19\xf2z'\xc8\x8c\x17\xb1\xc6\x12\xb6\x8b\x1b\ qm\x01\xf06\x06\xf8\x18\x06O\xf43\xd6\xbc\xfd\xc4\ \xc1\xea!\xbfY\xe2t\x11\x8d>F8iDM\x02\ \x99\x9dX\x9e\x1c\x06>\x9e\x0e\x9c \x80g}\xf0\x13\ c\x96\x1f\xd3\x97O\xd9\x9a\xae\x1e\x5c\x01\x88D\x15\x09\ \x8e\xa0\x99\xc9\x93\xf2J\x16Byj\xec\xb1^\xed\xe5\ s\x22\x9cX\xc2\xcdk\xf2\x13\xe4;\xb9\xad\xdc\xa0\xca\ )\xba\xca$K\xc4\xc9E\x83 \xc6\xe2Vk\x8b\xcb\ \xc5\xa9\xfa\x14\xdd\x08\xbb\x1f\xe0n\x00\xd2\x05t\xd3\x85\ \xb1m\x01\x1c\x11B\x98a\xe2/G\x08A\xa2\x84P\ \x83\xaa\xdf\xb6\x85\x0b\xbaz\xcem\x91y1~\x82\x1a\ \xf0\xb4\xa8@\x9c~\x82o\xe5\xf7\x899E\xc8\x16\xe6\ \x93\xed\xd7\xd8h\x1f\xa5Y\xe4\x9f\xb4\xc0\xcc\x19\xa6\xe6\ yv\xc2\xfeFT\xd3m\x0dy\x95\x0ey*>/\ &\xf2I\xd1E\x10\xd6\x00\x19\x02\x5c\xb3-@#\xbb\ 5\x85\xc9\xe0\xb2\xf9\xb5\x00\x01\x1b\x9e\xb0-\xbcz\x06\ \x9e\x9c\xc9\xb8-o\x87E\xe4\x83\xc3\xc7.\xaeCE\ \x81sI\xf8\xd4G\x8890\xb4\x15q\x8c\x18nk\ \xd7\x11K\xc4k\xc8d\xe59\x10\x08p\x91\x17\xf9S\ RB\x94\xc1\x89KCL\xe6\xc2\x825 {[\xb9\ \x0d\xc0\xd2\x10\xf5\x19\xb9\x80h6+g\xf9.\x17M\ [\xabO\xf6\xe3\x7f\x05\xd3\xfd~\xbf\xf3\xf4Ju\xba\ \xa1\xef+\xc8DW;\x0dv\xd1O\xbci\xed\x9c\x99\ \xa4\x9c\x11\x87\x8d\x00\x15\xc0\x19\xd3\xd3p\x0e~\x06\x91\ \xef\xa0\x1a\x9bj\x89\xf6A\x92\xa3\xd2x\xb30\x97{\ \xf1\xb8\x94\x96R\xd25\x226\x049\x9a\xd0U\xb2\xc2\ \xa23&\xafa\xeetHU\xe3\xf2))=\xc7\xbb\ K\xa2\xa6\xd7}j\x8ei\x0c$\x08\xe7\xa0w\x19\xb0\ &@\xab\xc7\xe4\xbc\x9b\xbd\xf0\xebj\x1c\xc7\x9dZ\xd4\ \x89\xf9p3Q\xe6jN\x93$\x04\xd8\xec\xdc:\x0c\ _L\xcb\xf9\xb9y\x08\x0fD\x91\xcfe\x84\xb8\x08\xfc\ \x17t\xa3p\xa1sO\xf7\xe2S\xf7\xd2\x0e4\xc1{\ \xe9b8\xfc\xd2\xbd\x86#\x0d\xa1\x1f\xb6W\xb9|<\ \x0e<>\x9bO\xba\xb0\xf5\xbb\x0b\xe0\x17bg\xf0\x11\ *\xe0\x82\xcf(9\xfb1\xe2\x84\x85uile\xb4\ S\x9b>\x7f\x03\xd1[m\xdcn\x866#\x8e\xeb\xe5\ '\x93\xa2\x90\x03\x82\x81\x9a\x00\x17_\xe4g\xe5dR\ ^\xc0\x07\xafUn@b\xb39\xc5\xd5).zk\ \xfe\xe2H\xe9\x22\xa5\xab\x1cL\x8c\xb7X+\x12\xb3t\ \x07\xcc\x8e\xb0\x16\x02n\xb2\xb7\xb6:\xe2\x0d\x8c\x99\x07\ \x1f\x97\xecH\xb5\xbaX\x1e\x89%v\x93\x00\xab\x15\x0d\ \xaa\xb2?\x82\x03p\xc2\x0f$'\xc7\xed\xb4\xccG\xc1\ \xffs\xf3yR\xbe!q\x9c\x1b\x0dX\xe7\xc7\x0a\xbb\ \xd9\xd7X\xe2V\x11~3\xe4\xa3\xd3\xbc\x12%\xbb\x88\ \xd7A\xddRL\x08\x93_\xf4\xff\xbb\xb4\x0e\xb7\xa5\x15\ \xbd\xb2\xa0\xcdj\xf0J\xac\xdc1\x86\xff\x0d\xf7\x9dY\ MV\xd4\x9d3^ \xfe\x9a!\x08I\x17\xe5\xdd\xc2\ (\x8a\xa5y\x05\xb3\x09\xacU\xc5\xfd\x90 )\xae\x86\ p\xc0\x04\x18;\xd6\x11\x90\x896\xdd\xe3\xb2\xd6B\x86\ \xe6iU\x91\x81\xfd\xcfC\xbck\xad]\xdc\xf4J\xaf\ \x83\x1ad\x1d\x16M\xf5M0\xbb\xdd\xc8*7=\xa3\ \xa1\xbb$D\xaf\xb9\xd0`\xe8\x02\xb4\xf0\x04C\x0b\xdf\ \x1fK\xcf:\xd1\xc3\xed@6\xba/\xc2\x0d\xfd\x8e\x22\ \x8f\x83Y\x82\x8d]r\xa0\x88~TEQ\xc4_\xc0\ \xffQMg\xb8\x94$V\xaa\x0b\x005\xc0V!l\ \xf1t\xeb\x89ic\xdbN\x99\x11C\xef\xd4^\x81S\ \x1b\x9a+\xee\xa2Z|$\xce\xf3q\xbbH^\xa98\ \x04\xf5\x14A\x5c\xaf?9\xa3\xa8'\x9ah\x17\xd7\xbb\ \xd4E\xde\x87\xd3\xf8\xae\x9aa\x0b\xe94\xc0>\xde\xe6\ %J\xd8B\xf9\x15 \xb9h\x9f\xa6\xed\xf0a\x13\xa3\ \xe8\x8a\xd1g\xc2X\x5c\xa4\xb9j\xb9A\xe5\x16\xe0\x12\ \x0c\xca:\xefjpW@]\x06q\xc9\x8dR\xe0\x94\ \x98N@0\x9f\xa4j\x5ccb\xdc\xd8\xe3v\x1c\x06\ Z3\xc8\x0a\x02\xd2m~'\xcc\xdaF\x12\xf2Z:\ .F<\xe5n\xfdt\x98\xf4\x9c\xc13S\xb8\x16\x87\ \x81\xf2\x87\x08T\xf7\xe8\xc6\x8c\xc42\xba!@\x8b\x8a\ n\xc6HZe\xc0\x86\xd4\xe6\x98\x82D&\x189b\ \x8b\x10\xfd\xa4\xca\xce\xfa\xe6\x1dS2\x18\x1a\x9a\xb2V\ \xb31\x8a\x9a\xa7\xcb\xc2\x91\xb06\xd5ED\x1aIV\ \xceG\x12I\x86\xff\xd5\x85k`\xcc\xe9\xe0\x82\xda\x8c\ \x8by\xee5)\x0c\xbb\xa4\xbe\xb5\x01[\x87U\x86)\ \x1f\xafZ-\x97\xd5\x0fX\xe8\xe6\x18\xd7[\xb4n\xde\ 0u\xa1J\xb9\xd1>\xa1fD\x85\xfb5\xcd\xeb\xc6\ z\xf6\xc99\xe3\xec\xbd:4\x17\xe248\xfa\x88\xd5\ E\xfb\x80\xed\x05L\x8a\x19&B\x19\x06\xcd\xc2\xbf\x14\ i\xe9\x9cc`\xaf\x9d\x9dMeD\x1cR\x93\xc8@\ J\x83zJ&]\xd5u\x0d\x93\xeb2\x80U\xcdB\ \xa4\x9f\x9bw\x9d\xdd\xa0eCHF\x07+\xb0^\xae\ \xd3\x10\xd8T\xfe4>]\x11g8\xdc\xd4\x8c\x9al\ !H\x980O\x90\x1b\xc0\xfd\x88\xb0\xe3^\xd4\xcd\ dH\x0d5\xb3\x8e$\xfa\xd4L\x04Nwvk\xf9\ N\xb7,\x0c\x15\x10#!Q\xcd\x94\x02I\x01\x9b\x99\ \xcb\x10\x0b\xb5Z\xe4\xc3\xaaZ\xb5\xbc\x94\xfbL\x9c\x8c\ \xef1z\x93Z\xa3\x09I\xb1\x9fU\x89Z\x0bZN\ \xca[q\xb3\x89\xfd\x8cZ\x9a\xd4 \x0d?\x01\x86R\ \xe5\xad#b2c?\xcfo\xd9wiv\x10\xc09\ \x00\xb8\xc4=0\x1a [\x89w\xe0\xbc\x05\xd2\xd9\xc1\ ,\xe5\xa0$.8,Eo51:?\x86u]\ \xd3\x0f,\xe1CA\x8b2\x10\xee\x96\x09\xe7\x13\x92L\ {\x1bs\xa4>\x13\xe4\xb5\x9a\x8f5\xb2\xd6%\xc8t\ 6\xb6D\x82\xab3\xe3\x94\xab\x8bC\xb0\xde\xa2\xa0d\ \x05\xd8()\xb9A\xecu\xa4\x8f\x91K\xb5\xa3\xd1A\ 5SZ4\x8d8\xda\xb1m\x1c \xe9\xcevz>\ \x06f\xd4hT\xe4\xc2\xe0\x8c\x9dr\xe0\x11\x9f[\x1f\ \xb1\x9a7\x87\x9d1\x15\xa3D\x82\x9f\x10\x17\x96v\x15\ [\xe3X\xa3\x17Z\xac\x93\xda\xb5a\xdcS\xa3k\x01\ {@^\x98\xbc\x958\x86;\x19\x8ad24\x92\xb6\ \x9b\xa3GP\x867\x1cQ\xa3\x22\xfbiC.\xad\x00\ \xd6\xa5\xff\xa5{\xe3#\x10\x8cd\x89\xa9\xd7+\xee\xba\ \xc5\xc5uu\xe7\x95\xab\xe6\x81Y9S\xf1\xb0\x9e\xb6\ \xca\xec\xb7\x9b\xdc\xb8j\xa6\xd2n\x0f\xa1\x9bD#\xb8\ \xf7\xb8\xd9J\x11\xe9\x05b\x95/X\xa3\x10\xc9\x8a@\ Z>\x0d\xcc\xa1\xef\xf2\xa4\xb3\x96\xf2ZP\xad\xd2]\ \xab\x07\x97\x84\xa6\xf4H6\x80\x0e\x0e\xc3wz\xee\xec\ \xe2uGLG\xd3\xa23\xf0\x8c\xac(r\x8a\x97g\ \xbd\xc4;\xc2\x07C\xfd!\x07\xb3\xa2\x87\x0d\xec\x01y\ \x87\x8b\xb0e^\x0b{\xe4q6GkM\x1d\x09Z\ $\xc9\xf6\xc3WF!\xa4\xd8/\xa5\x1cH\xcdQ\x97\ \xc1\x90\x9d\xa8\xe6\x1d\xd8\x18\x10\xe2\x8c\x8d0n\x85'\ z\xdai\x95\x5c\x81\xc9\xf48[\xccU\xdc\x92\x06V\ \xc3\xb2\x93\xce\xce\x09\xc1i?5j\x19\xc1lo=\ \xce\xe6v#!~@\xadu\xf5\xc1\x06\x07\x1d\xe4\xb7\ z\x8f\x94\x92\x14~*#::'\x9cc\x97\xb8\xf5\ \xa4\xe3\x84\x07\x22\x16\xca\xa50\x1e\x8dr\x1b\xc9I\xe0\ \x8263k\x5c\x8e\x9d\xbf(\xb9VAE\xb2\x9f\ \xa8,\xdc\xf0\xde\xc5(\xec\xaeq\xdc\x8f\x11\xcfC\xb0\ \x94V\x92\x8bF,\xabFT\xc0\xb2\xb8\x8e'\xa7E\ >+;\xb8\x07\x17\xb6b-\xd8*f\xc5\x1d\xce+\ \xceg\x8aZo\xad^d3[E/.+\xb9Y\ \xc6v\xc7<\x18\xde\xe0N\x12m\x19\xea\xa4vR\xc8\ \xe7\x8ck#n\xec\x12#\x8d\x97\x06\xdf\xe2\xea\x06\xee\ \xeb\x10\xe6\x1cV\xf5\xcet\xb5:Y\x12\x1f0\xda\x80\ \x16\xcf\x1ar1\x99\xc5\x8d\xefb\x1a\x02o\xb7\x8d\xaa\ \xf7~\x0cM5\xa9fj\x9dN\x8ef\x22\xfa\x89\xfe\ \xeegh\x94\xc5\xfdn\x10\xc69L\xee,\xce\xa1.\ p\xa7\xcb]\xbc\xe9N\xdb\xb6)\xb3U$\xed\x85F\ 2r\x1fm\x862\xba\xec\xec1\x14\xdf\xf4[\xa76\ \xfd\x0ai\x889sN0\xd7s4\xc3\xdfJsG\ \xb6z\x0e \x92d\xbe;\xf3\x86\x98\x84Q\xc0T\x1a\ \xdf@\xe4\x05\xc2FB\x19\xe7zv#N(\x05H\ \xcd\x9c\xa9f\xf3\x12D\x90\xf6\xa8\x1b-DRM\x18\ \x1avcj>\xaf\x90m\xb8\xf9\x84\xe4^\x83\xa1\xac\ \xf1U\x06'\xd4\xcb\xcb\x1b\xd9I\x14k\xc5I\xeb\x88\ \xc1\xda\xa4C\xc4\xc5\x82\xfb\x09{\x04H\xd8\xef\xdc\xbd\ gf\xc3z\x0a\xbc\x18.\xe4(\x02fWx\xaa\xbb\ \xf5Sc\x22#\xf4\xa0!\xd5\xf2N\xb3\x90-W\x90\ \x84\x95;Sv;f\xef\x9d\x04\xb4NM\x89\xb9\x13\ \xa6\x95\xc1\x110.$\xda\xae\xbd\x01C\x0e\xd0[\x8a\ El\xa1\x898@XW\xaa\xd7\xe5\x00\xa1\x1eQ\x1a\ \x049\xd8Jb\xc8\x18\xe9\xb6q\x22n\x014\x0bX\ 5\x07\x8b\x02\xc5\x15$\x11<\xce9\x04\xde\xad}\xaf\ \x98\xee\xc0UZ1\xef\x1dn\x96\xb3\xc33aY\x07\ f\xab\xd6K+\xd4\xe6jU\x9beAg\xd9Et\ {B\xfc1\x8bcvX\xdeV\x86\xd6\x0e\xd8\xdbH\ \x03\xd4\xea\xa0\x8aM\x02X\xcdXO\xda\x7fqO7\ \xaer\xfb\xec\x05Vw\x8dF\xd3\xb3r6E:X\ \xec\x806\x15\x5c\xcdt\xeb\xd7c.hZ\x813\xee\ \x17FM\xf7\x0b\xab\x8dx2h\xbf\x14\xfb\x8eu\xa6\ \xd1\xde\xa2M\xdd\x01$\x8e\xa9\x02\x85|\xce\x99/\xb1\ ^<\x91O\xcd\xc0\x91\xc9\xb3\x1a\xff\xe2-\xd2\x12\x82\ \x15\xd4\x06\x93\x96V]h\xe3\x10\x89\xfbl7\xf7\x9d\ q|\xed\x8e\x82q\x99\x0c\x83F]$\xbbi\xcbw\ N\xec\xf9@\xcfV\x1a>\xb3\x96\xa0\xb4\x17\x0b\x1d=\ \xe3\xd3\x80\x05\xb2\x9b\xb0\xc6\xb2)\x9ei\xb47u\xc2\ \xdb#\xfe\x83\xedE\x1b\xb6\xa3\xa0\xc8\x1a\xaf\xf3\xb5#\ \xfd2\xcdR\x5c\xe6\x9a#\x86?\xa6\x8b&\xeeo!\ \xc5\x0c\xb0\x81\x83\x9c\x96\xb9\xd5\x94Q\xf1ks\xea\xd9\ g/B--O\xab\xddx\xe6;4\xf8\xba\x8d6\ \x85\xd47\xe3\xe4\xf5\x00`\x15\x84\x13\x22/\xce\xce\xe2\ \xee2r\xdd\x10\x9bF\x0c\x11\xdb\x0a\x03\xa8\xe9\x16\xc0\ \xca\x1c\xbd\xd7_\xa0s\x1f*\xeaJ^\x9b~\x11\xb9\ \x8d|g\xaf\xe5\xb5\xc1\xef\xa9\xf4\xd3\xb4\xa7zYp\ \xe9\xc5<\xab\x7f\x0cd\x8a\x87\x85\xd5\x82\x0d\x89z\xf5\ \xd6\xf9\xce\xd3t\xe1\x9d\xa7\xdc4\ \x89\x22\x00\xf90\x1aG{\xf4\xef4G\x83\x8b\xc9\xfd\ j\x99~\x17\xf2\xab\xf37\x10x\x12\x0f\xa7\xa9=\ \x02.\xe0\xc7\xa6\xf6Nt\xed\x9b\x8c\x04\x0e\x8f\xef\xc1\ #\x9f\x13\xb3\xa7\xe0o\xe0k\xe1\xec.\xb0\x8c\x22\xfb\ \xf9I9\x97\x93f\x92\x22\x7fPH\xe6\xf1\x8b\x18z\ \xba{\xb7\xf0]\xfc@\x7f\x7f_??Lo0\x05\ \xf9\x81m\xdd=|(\x90\xc1\xdcBP\x07\xc8r\xf0\ \x91\xae\xd0\x8e\xd4\xe0\x99\xcc2\x8f\x93\xd6\xd6\xc6\x80\xb3\ 0\x8f\x05\xc8O\x90^`Y&\x99\xb6X\x93)F\ \x9c\x19~d$8>^\xf4.n\x7f\x9bL\xc9:\ \x0e\x86W\xaa\xbd\xbf\x82*\x960\xc8\xd1\xd2[\xf8\xfe\ e\xeev\xaf\xf5n\xa7D\x9d\x11\xc01\xa1\xb7r\xa4\ Y\xa6\xcfA\x90\x92b\xc2_,!\x96-\x9d\x98\xd7\ \x8dw\x9ehn\x19V\x171\x1b\xb2\xd0\x02~\x07}\ Q\x09\xc8\x89\x9fhZKoG\x9d\xd1\x07\xcf\x86-\ \x22\x12\xd6+\xc2\xf9\xd9\x80\xae\x83qg\x98\x91\x8e1\ 4\x04\xc5\xdd\x83\xeb\xae@\xfe~\x90\xcd\xbee\x1f\xc4\ 9\xfb\x83\xc0\xd5\x14\xb5/\x00\x8b\xde\x82 )\xa0\xa6\ \x95\x05\xac\xb3\xb3\x229\x1c\xbf\xe1\x99\xa5\xa8gFo\ \xb2\x92\xbf/\xf2L\x8b\x0c\xbf0\x0f\xd3\x08L~d\ \xff\xfeI^\x13j\xfch>\x9b\x86'\x04\x9e\xef\xef\ \xeeSc\xc9\x9cX\xf4)\xa3\x0f\xbd\xedS\xb6)\xcc\ X\x9f\xeb\xb2\xe8\xba\xc3\x81\xae\xe0\xc2\xe3\xf7tIi\ \x8d\xbc\xfe\xe2\x15\xd4\x17\x97\xb3W\xd5S0^\x15A\ \xaff\xb1\xb7\xa8\xc9\x9b\xb08\xe3\x02\x07\xaf\xa5\xfb\x0a\ \x1da\xf6yB\x9f\x08i9(\x9e\x22G\xac)B\ \x9c\x82Y\x11<\xe4\xac\x08L\xb4H\xf2\x09\xe4\x06\x1a\ \xd0\x874\xaa\xa8\xb7\xa4q\xef\x00I7\x16\xcf\x18\x8f\ /\x9b1\xcc\xce\x949x\xa2\xef\xc1\x1a\xd4\x0b%\xea\ m\x04\x12W\xc7\xd4LI\x9b\xea\x99RR\xf6\x920\ 3\xa0\xbd'\xc7\xaaZ\xb5l\xc6\x8a[\x93\xf1@\x0e\ \x13(\x05&O\xca$E6\xa6#\xb7\x1e\xe6\xc5d\ \x86\xcf\xe1J\x18.\xc0\x10\xb2j\xb2Y<9\xb5\xdc\ k\x80\xeb0w)\xd0P\xdbr\x86\xf3\xcb\xbf\xecp\ 8\xd4\xfc-\xe7\xe8a\x03\x83\x85x\xe463v\x18\ 3t\xbd\xde\xc7\x19}\x94f\xdf\x87zX\xd6\xd7K\ \xd6\xa9/\x06S\x93T\xea\xbd\xe9\x8c\xa0\xcc\xdb\xa0\xc6\ \xd9=\x5c\xca\xd5\x8c\xcc\x06bh\xf0[\xae\x987L\ E\xe4$\xf8A\xb9\xf8\xbc\xa8\xbf\xd7h)\xa4\xe5t\ \x0bXL_\xb3t\xa7&\x10\x95\xaa\x0be7\xff\x02\ \xb2(\x16\xd0\x8a*\xc9\xdb\x10\xa1\xb8:\xb4-\xb3\xc1\ i0\xb4\xe7b\xb2\xfe\xf6\xa6\xa53\x8e/\xb9P\xe8\ \xd0\xd7k2\xe44J\xefa*\x10\xbd:\xbb\xe9w\ \x87\x98l\xdffR`!\xbd\xc04O\x8b\x1d\xa1x\ R\x86`h&\xaf(r\x1a\xbeH\xf1\x13\xe0\x0d\xd9\ ,\xb5Ae/\xad\xb0c\xce\xffT\x8c\xc6\xf5|\x8f\ \xc5\xe4V\xe2r\xecd\xf6\xa9\xbet\x84h\xc1\x18\xc9\ Q\xedb\xa2\xa6U\xbbE1\xa3\x95\x83\x84\x05\x88\x82\ \x9bm ?L\xee1\xb7\xab\x94\xd0\x82\xa1\x11\xcex\ \x83\x8c\xa6U\xb5\xfac\x1bH\x0b\xee3\x0e\xea\xaf\xe4\ \xa0\xfa;\x07\x9aQ\x00\xdd\x88u;Oj\xbe\xd4C\ 57\x8cG\x89|\x84\xc9\xab\x8a\xccxX]\xae\x99\ \xbe\xb0~\x85\x89\xba\x06\x9bU\xed\xcc\xe0\xd2\xf7 \xd2Xo\xd5\xbaU;I\xeeN\xe1\ \xce\xad\x13\xe2\xa2\x1dD\x8b\x8e\xa0+\xf2\xb4#\xc8\x12\ \xbf\x96\xa10\xb2\x13ZF\x82\xe6\x1d\x18\x9a\xe3\x18\x9d\ \x09\xe2mi\x1er\xcb\xd2\xe9\xfa\x92\xbd\x9a_X\x7f\ ^\xb7/\x9ff\x13t 0$c\x93\xcf\xd8\xa0\xad\ /\xcc\x861\xa9Y5\x1b\xe5\xa8C\x99\x99\xa6c\xac\ \xd2f\xdb\x91\xdc\xb1Xm\xcbk\xf4\xa5}\x8cE\xc2\ 3li\xeaZ\xc1u\xe0\xe9\xa8\xc9\xf2UL)\x8b\ I{D\xdd\xf6\xd1\x12j_\x12/\xb12\xb9z\xbf\ \x1a\xf1\xb4\xab\xf1\xcef[$\xedK\xde<\xebV\x09\ m`+\xa1E9\x19\x85\xf4\xad<('\xf3\x0e~\ Vo\x11=)\xe6\xa2!\xe3\xc9\xa9\xaf\xdc%\xf5i\ \x8a\xc1\xab\x88\xa7\x15\x13\x938\xfa\xc8\x85\x8fo4\xb9\ \xaen/\xdfsx\x1fn!\xe0\x96\x82\xba\xb8\x9fh\ \x1c\xc3'\x8e0`k\x86E\xda\xd6\xc5\x87\x93\x96\xab\ ,\xee\xed\xade\xa3\x93A\xab\xd9\xb5\xaa'\xa5Zk\ \xa3\xcc\x84\xbb\xf2rV3,\xb5y\xe1C\xefL\x1d\ \xcaz\xf1N/b-\x9cQ\xcc[X\x0b\xe7\xacq\ 9!\xef\x94\xe3\xf9\xbcC\xb7\x05.!\x8e\xcc4}\ \x9f\xc8\xb4E\xc5\xe9\x8fxq\xc0\x15\xd7;\xd8\xf1\xef\ \x8a\xbbE\x8d,\x0a\x03$\xe77i3\x97\xf4V/\ *\xda\xbbc\x0bK\xf1F\xbe\x999+\xc3QS\x8f\ \x87\xe4\x8d\x83\x8e\xa0Z\xf5v\xda\x0e\x0b\x856B\x22\ \xe2VF\xfc\xeac\xa2\x12\x9f\xe7\xc7\xc5\x84$\xf0{\ \xd4\x06x[\xe8\xbd&\xe8Ve|\x1d\xc3\x92\xeb\xa8\ k\x08&|\xea\x14\x19.\xea\xab\xf7Qm\xf1m1\ \x15-\x03$S5\x8c\xd8\x8b\x11\xec\x0bs\xd4\x8b\x8a\ :\xc6\xcb\xd4\xe6\x0aRY\x02\x07\xfc\x94\x90\x94\x12\x8c\ _\xee\x88z\x95*\x8c\xb4)\x96\x9c\x0e\xd3\xa4D\x05\ QP\x8f\xc4\x11\xd0\xdbj\xfdq\x80ff\x15\x86\xe5\ \x99\xa6$\xca\xe5.\xec\xf2\x01\xbc\x93\x12\xf4VI\xc9\ [%\xa5om,\xf3\xbe\xe5\xab\xfe?O/\x12'\ \ \x00\x00\x1f\xe1\ \x00\ \x00o\xb0x\x9c\xcd<\x09x\x1c\xd5yO\xd6j\xa5\ ]\xad$\x1f\xc2w\xec\x91p\x8c|I\xb2\xb1\x0d(\ BF\x96,[\xb6d\xcb\x96,\xdb\x18\x90gw\xdf\ J\x13\xcd\xce,3\xb3\x92W\xa4IJ\xd2\x1c\x85\xe6\ K!8@\x09\x0d\x90\x83\x80IC\x0e\x9a\x10\x9a\x00\ \x81\x98\x12r\x94\x12\x926$!!\x04\xf2\x85\xa6i\ )\x14\x8a\x13\xfa\xbfc\xae\xdd9V\x86\xd0b\xa4\xd1\ J\xf3\xfe\xf7\xbf\xff\xfe\xff\xf7\xbf\xd7\xf9\xd5\xf4\xe2G\ \xff\xfd\xa6\xeb\xbe\xdb\xb4\xfc\x9b\xc7n\xf9\x87\x9f~\x16\ !Tehc#\x07\xb6#T\xfd\x03\xf8\xf0\x0e\x84\ *\x7f\xcc\x9e\xd5\x7fd\xcf\xa3\xf7\xb3\xa7\xf8U\x84\xf6\ v\xc0s\x14E\xbe\x1eAhk%\x8a|\x9f<\xef\ F\x91\x1f\xbc\x1d\x9e\xbfB\x91g\xe0\xdd\xe8\xcb(\xf2\ B;B\xe7\x1dBU\xed{\x00\xce*\xf6<\xef\x07\ \xa8\xeajx\xff\x92\xaf\xa3\xaa[\xaa\x10\xba\xf0}\xec\ yY\x12U\xddy\x0c\xa1\xbe\x87Q\xd5\xf7O!t\ \xd1\xddh\xc5:\x98{g\x1fZK\xe6i}\x0d\xad\ %\xf0\xdb\xb6\xa0\xb5\x04n\xdb$ZG\xdek{\x0a\ \xed<\xf1\x10B\x1b\x1f@\xbb\xa6/@h\xd3\x7f\xb3\ g\xcf;\xd1\xc0\x0dI\xc0\xe7=h\xb8\xeal\xc0\xf7\ \xddh\xf4\xea\xeb\x10\xda\xb1\x1f\x1d\x92f\x10\xaaY\xcf\ \x9e\xc9C\xe8\xd0\x89W\xe1s\x9e=\x93\x9f@\x87\xef\ \xfb\x0aB\xefP\xd0\xc7o\x9d\x0bk\x16\xd0\x83w\x01\ M\x16\xd4WT\xfc\xfaq\xc0k\x82=\xc7\xe7U,\ \xbe\xf3\x09\x84\xb6l\xa9H\xbe\xeb#\x08\x9duo\x85\ t\xe7\x17`\x9d\x17W\x5c\x95\xabGh\xff3\x15\xd7\ \xbe\xba\x1b\xde\xbb\xb4\xe2\xb5M\xbd\x08-L\xcfYp\ \xed'a\x9e\xdf\xcf\x19\x06p(^9'\xd5\xbf\x1f\ \xa1\xbaG\xe7\xe4k\xb7\x00]\x16\xb1\xe7\xa1s\xe7\x5c\ \x97\x02|\x977\xcd\xb9\xf1\xa5\x1c\xcc\xab\xcc9\xb9\xac\ \x1b\xa1\xd5/\xce\xf9*\xc1\xab\xed\xb69?\xa9\x03\xfa\ \x1ek\x9d\xf3\x1f\xeba\x9eU\xb19\xaf>\xfc0\xf0\ \xeb\xd3\x95\xb1_(\xc0\x9b\xbf\xad\x8c\xef\xaf@hw\ _e\xdd\xc6\xcb\x10\xaa}\xacr\xf9\xc3k\x11\xea\x1d\ \xa8\xec|_%\xe0w\xb2rO\xdf3@\x9f\x17\xd9\ s\xf4\x13\x95c\xfd@\xffmG+\xdf\x7f\x13\x8ck\ \xba\xab\xf2\x9a\xc7\xbf\x07x|\xbe\xf2\xde\xa7\x1e@h\ C]\xe5SO\x01\xdd\xeb\xfe\xbc\xf2\xd9\xbb\x00\xaf5\ ?\xa9|\xe1\xaf\xdf\x0b\xf3\xde\x11\xb9\xb4\xff\x5c\xe0\xe3\ x\x04\x9f|\x09\xe8\xdc\x11\x99\xf9\x02\xcc7r\x05<\ \x01\x9f\x8d\xafE\xde\x1b\xfd4B\x17\x1c\x89\x5c\xfd\x98\ \x81P\xe6\x8b\x91\xeb\xfb\xef\x03z~\x97=G\xeeb\ \xcfc\xd3\x91\x9b\xdf\xffC\x84\x0e.\x89\xdc\x92\x85\xf1\ \xc2\xc7\x22\xdfY\xda\x8fP\xf3\x91\xc8\x93\x87`\x9d\x87\ r\x91\xdfD\xee\x84\xf1K\xaab\x1f\x10\x01\x1f\xa3j\ \xc1c# \x0f\xef\xa9j\xff\xf4\x02\x84ZF\xab6\ \x92\xcf[\x1ed\xcf\xd1\x97\xaa\xc6Z\x05\x84\xce\xceT\ \x8d\xdd\x0e\xf2\xd4\xf8\x87*\xa9\x13\xe4\xa8\xfd\x95\xaa\xa9\ e7#T\xdfRu\xf5I\xa0\xf3\x8e\xd7\xabn\xa9\ \x01\xf8\x97]Su\xdbM]\xf0\xf7\xab\xd83uM\ \xd5\xed\x87_\x04z\xc6\xaa\xee\xb8\xea[\x08u=\xc1\ \x9e\x97=R\xf5\xc4\x05\x17#\x94~!\x1aS\xbf\x0c\ \xfc\xba:\xbal\xfa\x1b\x08\xe1\xcfE7l\x07>\xb4\ /d\xcf\xd4\xfc\xe8\x05W\xee\x85\xf5\xefb\xcft<\ \xday!\xc8\xd1\xd8\xcb\xd1\x9d-@\xe7s_\x8f\x0e\ n[\x85\xd0\xdbZ\xa2\x97n\xfc\x19Bs\xe6D\x8f\ \x9f\xba\x1b\xa1\xf5\x0a{n\x7f$z\xe2\xb9O\x01\xdc\ \x9d\xd1\x1b\xf7\x109\xd9\x1d\xbd\xf1\xa5\x1e\x98\xff\xec\xe8\ M-\xc0\x9f\xc3'\xa2\x0f\xaf!\xfc\xfcH\xf4\xb1'\ o\x039]\x17}v%\xc8\x7f\xeb\x03\xd1g7\xc2\ s\xf3\x1f\xabk?\x0a\xeb\x9d\xb7\xa8\xbaq\xed\x0a\x84\ :\xbf]\xbd\xe4cyx\xeft\xf5\xd6\xef\x03=\xa2\ Rug\xff<\x84\x16of\xcf\xee\xc1\xea\xa3\xab\xe1\ \xefK\x0eW\xa7\x95{\x11\x8a\x14\xaa\xff\xe6R\xd0\xaf\ \xa3j\xf5M\x1bA^\xc6>Z\xfd\xca\xab\xb0\xce\xc3\ \xbf\xaf\x89|\xe7\xbf\x00\xffw\xd6\x1c\xfc1\xd0\xf1\x9c\ _\xd6\x8co\xb8\x15\xa1D\x7f\xcd\x95{`\x9e\xdd\x7f\ _s\xe7/c\xf0\xf7\x0d\xec9\xf2\xf3\x9a\x93K\x8e\ \x03_\xf7\xd7\xdc\xdbu9BK\x1f\xad9\xf58\xe0\ \xbf\xfe\x9b\xb1u\x0d\x17!\xb4b(\xd6U\x07t\xd8\ vw\xac{\xef|\xe0{M\xec\xd0\x8f@\x0e\xde\xf1\ \xa9\xd8e\x1f\xfeg\x84:^\x88\x1d\x8b\x82\xbc_\xf8\ Jl\xbc\x02\x14f\xac-\x96}\x14\xf4a\xdd5\xb1\ ?;\x09z\xb3\xa8-\xf6\xeezX\x7fku\xec\xda\ \xc7a\xbd=7\xc7N\xf4\x01\xde\xcb\xc6c'\x0e\x82\ \xfc.\xfbL\xec\xfe\xef\x1c\x04\xf9{\x91=\x8f\xfe.\ \xf6\xd0\xbek\x11Z\xf9@\xec\xa1\xf1\xd7A\x8e\xbb\xe2\ \xd5\xff\x06\xf26\xf8\xeex\xe2\x83\xc0\xb7\x81\x07\xe3\xcd\ \x17\x1fB\xe8\xfc\xbb\xe3c?\x82\xcf\xf1\xeb\xe3c/\ \xbe\x06\xf6\xa4=.e\xfe\x11\xa1\xb5\xdfc\xcf\x0b\xef\ \x89\xeb] \x0f\x91\x9f\xc7\xaf\xfa\x16\xb1WW\xc7?\ \x8e@\x1fbw\xc5o=\x02\xf8]\xaa\xc4o\xbf\xf1\ W 77\xc6\xefo\xf9(\xf0\xed\x7fj\xd7\x7f\xb6\ \x09\xc6o\xae\xed\xbb\xfcw\x085|\xa5\xf6\xe0\xe5\xa0\ W\xeb\x1ak\x8fi0\xfeb\xadv\xfcj\xd0\xdb\xf5\ B\xadr7\xfc}\xb8\xbev*\xf2{\x84\xe6\x7f\xae\ v\xe6\x01\x90\xe3\xe8}\xb5W|\x1b\xec\xcb9\xb7\xd4\ ~x\xfac\x80\xcf\xad\xec\xd9\xb3\xa8\xf6\xb6\xa7\x12`\ \xaf~X\xfb\xc8)\xd0\x83\xd1#\xb5O\xdf\x02\xcf\xcd\ \xdb\xd9sta\xed\xab\xd7}\x09\xe8\xbe\xa8\xf6\xb5\xaf\ \x9d\x07\xeb\x8a%*~}%\xd8\xaf\xe5\x89\xa5_\x03\ \xf9\xef\xeaI\xb4,\x01\xbb\xda9\x94\xd8t\xff0\xc8\ \xfbX\x027\xb4\xc2\xfa\xf6\xb0g\xdfhB\x9f\x0bz\ \xbb-\x968q9\xe8Im\x03{.\xf8M\xe2\x06\ \x0c\xeb]\xf6l\xe2\x13 \xde\xa8\xe6\xcb\x89;NV\ \x03=g\x12_\xf9\x00\xfc\xbe\xf7\xb7\xecy4\x9e\xf8\ \xe9\x83 ?\x1dw\xb0\xe7%-\x89\xa7\x97\x82^]\ \xfcp\xe2\xb5\xa7\xff\x12\xe4_\xa9\x8b|+\x05v\xee\ \x97u\xd1_<\x0d\x7f\xffC\xdd\xbc\x9e6\xd0\xe7S\ u\x97\xbc\x84a\x1d\x1f\xaa\xbb\xfcz\xd0\x0f\xb0<7\ \xbc\x0a~)\x12a\xcf\xc4I\xf6\xechg\xcf\x1d\x1f\ dO\xf1\x99zAj\x06\xfb\xf0\xc5\xfa\xd64\xe8\xcf\ \x057\xd7\x9f\xd7\x0f|\xaa\xca\xc3\x13\xec\x5c\xfa#\xf5\ c\xef\xff\x05\xd0\xb1\xb7\xfe\xf8\xed\xf0~\xd5\xeb\xecy\ \xec3\xf57\xed\x059Z|k\xfdC\xbb\x81\xee\xb1\ \xdd\xf5\xff\xfa\x04\xc8S\xffY\xf5\xcfn\x04\xbc\xde\xbe\ \xbf\xfe\xf9\xfbo\x00<\x8f\xd7\xbf\xb8\x09\xf4\xb3\x09\xb1\ g\xf7\xd7\x1a\xe2\x84\xfeb]\xc3\xd6{\x80\xcfg\xed\ o\xd8\xa6\x01}\xde\xfe|\xc3\xa5\xbf\x03;\xb2\xfa\xaf\ \xd8s{\xbaA\xfa;\xb0K\x97\xfe\xb6\xe1\x8a\x15\x8d\ \xa0g\xf74\xfc\xd9<\x90\x93\xda\xf1\x86+?\x09|\ m\xecn\xb8\xe9\xe3\x8b`\x95k\x1b>3\x0at;\ |\xa4\xe1\xb3\xf7\x00_\x96f\x1bN\x1e\x05|\xdf\xf6\ cx\x82\x5c\xac\xeco\xf8\xd2*\xd0\xa3\x85\x8f\xb0\xe7\ E\xcf7\xfc\xd36\xa0N\xdf+\x0dO>\x0bt\x1a\ \xfaM\xc3\xbfT\x02\xdf\xce\xaen\xf8\xd9\x15\xb0\x8e\x83\ \x8f5\xbcX\x09r\x8c^\x93\xc0\x09\xdd\x07\x1c@\xd7\ \xa0N$\x22\x01M \x0da\x94A\x17\xc2O\x06\xfc\ \xcb!\x1du\xa06\xf8\x97\x83\xdfk\xf0\x09\xc3O*\ \x92\x91\x04?\xa7Q\x16\xb5\xa2q\xf8\xd9\x80\xf7\xf3(\ \x09\x9f$\xf8k\xd7\x1b\x1a\xdd\x09\xef\x8b\xa8\xab\x860\ 8\x0a_\xfd\x9d\xa20\xa1\xe1\xcc\x85\x13\x86\x91\xd3;\ \xda\xdarX\xd3qN\x95%=\x9dm\x1d\x97\x8c\x89\ |\xb2UR\xbb\x82\xff\xdc\xd9&v\x81,\xa2Z1\ \xa9\xe6\x8d\xb1\xbc4fh\x15d\xe97\x86.\xdd\x80\ \xdf\xcb\xf05\x0eo\x88\x14\xe9,|\xf2_T\xe9\xf2\ g\x0b\xa1\x98\x04\x83\xc5$0\xb0\x8c\xc751\xdb\x9a\ \xc5\xae\xf5v\x85\xbd\xf0\x86\xc80MyeP\xa4[\ Q\x0aP\xce\xce\x92\x0c\xb3\x83\x10N\x86i\xc90\xb0\ \xd6\x9aR\xb3>d\xf0y\xc1\x97\x0c\xab\xd1\x90\x072\ \x02\xda\x05\x88L\xa2\xc9\x8a\x8dH\x01\xd4D\x0b\xa5\xb9\ \xdd\x04\x800d\xc1\xf6\x84\xba\x1c\xed\xa4\x12 U\x8c\ \xc1\xe2%\x80/\xc1\xe2%*\x13\x9a\x05+\xde\x8b\xa7\ \xb0\xac\x12<=\xa1$\xd0\x00\xc5F\x04\x1ctkT\ \xf5\x80\x94\xc2\x8a\x8e=\x87\xc4\xd1\x08\x158\xf8\xb2\x06\ \xcc\xd9\xb7\xc7\xf3\xdd\x0e\xef\xa5W\xb4\xd3%\x13\xa4\x89\ \xd0\x0a\xe8\x08z\x19~\x83\xe9BR\xf4\x1d\xc9\x82\xbd\ \xcc&\x84\xd0\xabN+\xb2*\xa6\x85AQ\x11\xc7\xb1\ \xe69\xe9f\xf4$\x9a\xa1\xb4\x11\x00U\x0c\xf4\xc1\x84\ \xce\xe84Lw\x9a\x8a#\xa1;\x06\x040LJ\xe9\ \x85:\xac\xe9\xe6\x0f\xe7pJ\x12e\xc1\x98\x10\x95I\ ]0\xd4\x0e\xcfY\x16\xa2S0r\xcaZ\x84RD\ \xf9\xda\x11MTtY4T\x1f\xd27\xa3=\x80\x88\ AUX\xa5\xec+PZ\x10d\x09\xa8\x0e\x08RL\ `\xf3\xba\xd3i\xc0DH\x89\x06\x1eW\xb5B\x87@\ @\xd6\x89\xe9\xb4,)\x93.Y\xb3\xa5\x22K\xbf\x0b\ h\x18~\xf3\x1c\xc5\xd0\x04\xad9d-=%*)\ \x9c\x16\xf6\xe5\x0cIUt\x1f\xb8q`Y\x0e\x90\x15\ \x91l\x8d\x8d\xf6\x90\x91\xb2\xcf\x88M%L\xee\x85\x9f\ g\xe0K\xe1_\xe47\xb8b\xa5-\xc1\x16\xe4\x85=\ @\xfbql\xb3\xbbO\x95\xd3\x8c\xdb\x1e3\x95\x8a\x93\ s&\x17\x19\x8b\x00\xfa\x92q.\xda\x8eD@K\x06\ \xe5\x9ct\x81\xa8\xd9\x85\xc5\xa0\x915\xa8\x1fd\xde9\ \x22\xd2?\x142\xcfJ`\x0aQ@\xa3b\xa3=j\ \x00\xde\xf4\x19\xd5LE\x8f\xd8\xd4\x19.\xbe\x84\x98\x05\ \x10\xeeR\xc9\xa9\x1f \xcbM\xa9\xea\xa4\x84u_<\ V\x01\xc9D\xaa\x18\x02\xea\x83\xef3\x14\xa3\x22\xd1\xb1\ `&\x06U\x0d\x87\x09\x8c\xbf\x95\xf0\x5cQ\x11\x1d`\ n\x05\xb4b\x92\x8a\x9c\x0e\x9fm\x05\xad\x1aR5\xa3\ \xc3\x07\xd0b\xd4M\xfda\x8a\x82\xd0!\x04P\xe0+\ \x85\xf2\x8e\xe1\x9az\xbc\xe0\xcb\x8f'\xe9Z5\xbaf\ '\x1d\xe3\x07p\x06kZ\x00\xe7\xd7\x83>\xe7a\x05\ t\x0d0=C\x81\xe8w\x96\xd83\xf8=\xb7l.\ \xb8\x89\x83:\xd6\x04\xb0e\x8a\x11\xc0\x9dN\x88d\xba\ \x80G*\x8c/P\xce\x88(\x0d\xf0\x897#\x7fq\ B\x9c\xdf\x99\xec\xea\x93d,(b\x16w\xb6%\xbb\ \x18\xdc\xc5b\x06\xbc\xd6X\x9ak\xc0\x98\xae\xa5\x5c\xde\ \x84M\xb1\x1d\xa6(\xc02\x0cO\xd0u\x00zX\x9a\ )\x1b\xeaB@T\xa0V\x98\x8b\x02\xfbl+\x93 \ \x08\xfb\xf6\xc07\x02\xaa\xb1\x08\x94\x93\xa9\x02Uj{\ \xf5\xdd \x95N@u\x00'\x87\x15\x81\xae;\x04\xda\ f\xb6\xd4\x12\xa3a#\xc9\xa4\x90\xd0\xb7\xc9$\x835\ \xd3R \x81eEz\xd4lN\xc6\x06N7\x11\x8a\ \x04O\xdblQ\xd8-\xe8~t&\xfao\xd3\xd9\x1f\ \xeez\x0e\x97\xa8\xadF\x0c\x00\x15\xbbI\xf8T\xa0\x1e\ \xce\x9b\x93s\x09'\xc5),\x88z9\x93l\x05\xb4\ \xf3\x00\x96\x85\x17\x06\xf5U\x12\x97\xeeI\xaap\x1a|\ \x1a\x07/\xae\xf3H\x8c\xd0\xb4\xd5\x9anE\xaf\xaa\x9c\ c\x08\xfa\x84:\x0d~\x15\x1cy\x16\xeb:\x08=\x08\ \xbe()\xad\xc1\x93\xaf.\xc3\x93\x80@X\x935R\ Q\xf0\xf0\x1d\xfeS\xbc\x15q\x8a\xff\xec\xab|\x02\xc4\ \x9d`\xd1IXq\x1a\x04\xe6\xb4m\xd1\x1d\xf3\x0c\xa8\ \xe3\x04\xf4\x5cY\x1d\x1f\x9b\x96\x14\x80\xedR\x9ba\x1a\ X\x10\x1b(\x00\x03\x09\xf3\xd2.?\x9b8\x00p4\ C\xe8\xd7\xf5<\xf6\x07$X\x22\xd4\x0c?\xcf\xf0\xa8\ \x85\x00\x9d\xa2\x9co\xb2\x00\x9eE\x84\xa9Y\x10e\x0d\ \xbcdA\xc0\xc7%\xdd\xd0\x9b\xe8\xea\xb3\xc0h\x0e\xd9\ m$\xfe\x93\x0bp'P\x94@e\xf2\xd3\xc5%.\ Y\xe2\x17\xd2\x96\xa7\x22\xbcH\xb9b&\x85\x07=,\ n\xe2\xe6'\xfc\xdf\x88K\x8eMhY\xfa\x93@\ \xb9a\xd0\x80Q\x22\xe1\x0a\x15\xb9\x19\x1e>\x0a\xf4=\ \x89\xfe\x94\xe5\xf6\x9d\xfd}\x1b\xa5\x9a{M\xc5\xd6D\ \x035\xec\x84P\x1b\x04\xa3k\x84\xe8\x05\xb1\xfc\xc2\x84\ \xa8\x0bI\x0c2\x0c\xae\x00\x22\xb3$\xce\x80\xbfm\x12\ <\xfe\xeb\x06?\x5cP\xf3\x82\x9e\xe7?L\x8b\x8aA\ \x02E\x18)H\x06S\xafm\x9dm|\x0a\xcbJ\xf9\ 2\xe3\x1b\x81\xcc \xa4e\x84YO\xc9b*\x87\xc4\ \x89O\x98c\x1ai\xc22\x8d{a\x11`\x92$M\ \xa0\xef\xeb@\xd4b\x22\xeaf\xe6B\xe7'3\xee\x01\ \x9d\x1e\x80`\xaa\x07\xbe\x04\xb4\x0f~\xeeF\x07\xe0k\ \x0f7\xca\xc1\x84\xbd\xa2\x98\xb0$\x05\x12I\xc0\x22L\ K\xb2,\xa41\xb1\xdb^$\x15L\x05\x05\xcag\xc0\ \x9d\xe8BFS\xb3\x84\xb8\x1a0FK\x0biI\x9f\ \xecLj]C;\x0e\x0cv\xef\xdd\xb1wd\xe0H\ \xd3,(\xfc\xabYP8I\x7f7\x09\xdf\x0bT\x8f\ Y84\xc9M\xefi\xeaO\xa5\x22\x13\xf52\x88(\ \xb6\xc2Bf\x1d\x99?\x90\xa9K\xa3\xd1\x11\x85bR\ \xba\x19\xc4\x9f\xc2*2w\x0c\x06Qy\xd9R\x01\x9d\ \xcfG0/\x87\x0f\x7f\x11\xc2\x07\x0dg\xd5)o>\ \x88\x84M\xa6\x1d\x95\x0c\x9c\xd5\x05Ia\xde\xe3\xf2<\ \xcec\xc2\x03\xca\x9a\xe6nx\xd3\xb4\xb8z3\xe8\x90\ n\xcc\x86#->\x9e\x99J\xb0\xa7\xf7l\x84U\xf5\ \xa8\x8a\x82S4\x04vxP\xdfIV\x95D\x1d\xa6\ 9\xf6\x9a`\x81#\xca\xc0\xe9r\xe0o\xe5\x8b\x18\xa1\ \xd61k\xb1~\x92\xab\x22S\xb2\xd34\xb2\xf5\x9aq\ 9\xcc\xb8C7\xa4,d\x98\x90jJY,\xc88\ c\x943\xf5\x1b\x8cl|\xe1f8\xdc\xa7\xc0N\x8c\ SWH\xa4\x94\x18\xf5Q\xca\x19bW\x0a\x9cO\x8a\ SO\x00\x8b|\x89\xccgiZCR\x09\x12\x9c\xcf\ x\x84v\x1bHL\xa4jZ\xa1I8\x02\xa64%\ \x92\x90\x85\x0bh\x1ag\xc4\xbcl0\xc9k\x0a\x97)\ 3\x9e\xee\x05L\x88\xe6f=\xa9\xd1@f4D#\ _\x96\x08\xad\xe50\xbb\xb9\x1d \xd6\x95X\x80\x09\xb2\ \x1e\x1fz/\x84\x19h!\x02\x92\x17\x01\x14\x0f\x973\ \xd1\xe1\x12\xe3\xd4KK\x1d,\x80'\xd1O\xd62\x05\ \x92\xc3?j.\x1f\xe8\xe1\xff,\xb4\xd6\x986\xa1W\ u\xb9\xad\x94\xaa\x18\x92\x92\xc7\xb6\xcb\x0a\xc6t5M\ \xf7$\xc0l\x13\xcd\x80Y\xe6e\xd0\xc8\xc4\x8cB\xd3\ \x8e\x18\xed\xacnM\x127\x81\x09O\x0b\x8aJ\x98\xab\ \xe7T%\x1df\x1e\xca\x9a\xc3\x11\x05-\xf4\x9c%$\ \x0c:Q\xee4\xa6G\xa5r\xcd\xa2}\x122\xe6\xa9\ E\x16|B\xc9M|\x94b\x95\x99$H\xa1L[\ ^\x1c\xc8\xa7y\xca\xef\x0c\xed\xfa\xacE1\xb5`k\ \x82\xe0D\xc8\x81=\x07f59*\x96\x82\xa1I\xe0\ 9i\xf8A\xac\xf6&A\xc7\xc0\xdbtX,\xb8\xc9\ E\x84\xe2\xd8O\xe7\xa9\x0d\xe6\xe1\x82\x9b\xea\x0bL\x04\ \xf5\x143\xcd8\x8c\xe4\x19\xd4]\xb1\xd24\x08<\xb6\ \xc4<\xbe'\xce\xaf\xc0\xe3\xba)J\x22/\xc2\x9e\xc3\ +/\x98\x12\xd6\x0cf\x92\xacvD\xe2d\x02\xdd\xc2\ \xf0\x9c\x9e\x09\x9c\x9ad\xa1\x84\x82\x8diU\x9b\x14V\ \x0b\x07\xb0n\x88Zq\xbd7\xc0\x93\x94\x93\xb9z\x94\ \xbc\xccd5L\xa3.\xe6\xd0\x14\x0e-[\xb1\x91\x94\ \x11\xdd\xb3\xda\xd5\x06\x0b\xfepj\x02\xa7\xf32\x0eQ\ \xa7\x15%\xe8o\xb7\xc8\xe5D\xbc\xc1\x06L\xc8S&\ Q\x88\xf0\x989\x22\xb1\xbcin\x7f\x89\xb0\xd85\xa0\ \xb9\x0e\xd8j.\x17\x86\xf2\x008\x1c\xc6]\x95\x07e\ 2+*Y\x19qi\x18\x96vY\xcc4U;\xd5\ \xa5P-\x16\x12\x12\x8dlr\x9a:\x0ej\x05\xa1\x7f\ A\x98\x92\xd2X\x85\xf0S\x81\xcc5D\x88\xeb\xe9>\ \x82A\x13\xa2\x0d\xce\xda\xca\x0eMS5aC\x88\xad\ \xb7\x87\xb7\x92\x7fE\xc3[[[\x83\x87'\xac\xe1N\ \xafSM\x07\x87\xc7\x0d\x1e\x95i\xaaP\xe347\x90\ \x1db\x96\xd8\x05\x14\x81\xe0\xd1*9\x06\xb9\xc9\x9d\x90\ \x19j\x94\xfe\x02\x80'\xbb\x80,$P(\x91\xc8F\ \xc0s\xf0%#\xc3\x02\xbfhPR\xa4\xac4\x83\x89\ \x13\xd2\x0b:D\x9b`\xc2\xc4B\xf0L\x8dD\xf3*\ \xc6\xe8\x06N\x96\x86\xd4\x86c\x1b'6\xa8NI\xca\ \xb8\x10\xa6\xcf\x8d4\xf4\x979~\xd9\x225\x88\xed\x05\ \x0f\xd2\xa7\xe6\xc3\xbd\xd4\x11j\xb7\x08\x09eJ\xc4$\ Ri\xf9\xdf\x8e\xff\x88\x04\xdaU\xdc%\x042V\xd4\ \xfc\xf8\x04\xa48\x18\x0bzNLa\x90\xc4\x8e\x10\x1b\ ]\xd1\xce\x93\x94\x02\xdf``\xf6\x8e\x05$\xb2iG\ i\xa6\x5cl\xa3\xdf\xb6\xcf\x0e\xff!\xc9%\xdeQ\xcf\ \xa7R \xf5\x99\xbc\x1c\x22\xe8\x1f\x9a\xfd\xbc\xf0\x9b\x01\ \xe0\xb4\x01\x96\x9eYf\xbbb\xa0\xf3\xb00m%T\ \x93%\xbb1\x12\x85\xe84#\xee\x9a\xf0\xae\xc0\xd5\x08\ C2\x16u +\x98\x18H[\xb0\x90QeY\x9d\ &\x22an\xe3\x80\x86k\xba\x11\xa6'\xb3'xk\ y\x04\x0f\xd1\xedF/\x97g\x17\xc4\xcb\xf5W\x17\xf9\ \x84$\xb6\xa7?\x87\x87$N\x7f/\x12\xbf\xc3l\xa6\ 5\xe5\xd9\x8e\x00\x03\xa2s\xba\x1a\xee\xeb\x89\xdeR\xff\ \x1f\xa6%\xde\xb8\x10\xde\xe7x\xc8\xe5\x9e\xd3Y\xd5\x83\ \xff\xf5\x89\xbca\x10\x16\x92\xcc4,\x8a\xf6\x9e\xcb\xb9\ \xca,Oa\xcc\xc8\xc3\xf2\x12AA\x9e\x85\xdbz7\ n\x86V \x98\xb10\x9a\x10\xc5\x15\x9d\xfd_#\xbb\ .\x0c\xd9\xb2q\xbd\xc4\x07W\xd1\x11:\x9e\xc3\xd5\xd7\ \xa9)\x05\xbe\xa9\xe5\x15\xae\xad,\x89?\xd68\xf0\xd5\ \xb0\x15R\x0a\x22\x8d2m%\x92C\x9cDK\x91\x09\ \xdan\xf9\xba\x82U\x05s\xbb\xdezn8\x0e\x89\x92\ \x11\xea\x80G\x8a\xc0\x97o\xd7\xdc\x19\x9d\xd9B\xe0\xb6\ p\xab9*\x10\x97\xe4\xb3\xd8\xc7\x8a\x85\xd9\xafb\x14\ m#\x5c\x1c4\x995@\xdb\xd6\x99)f\xb1\x19\xb6\ \xa9\xb5\xcaif\xadz\x91\x15LQ\x0b;K\x1a\xbe\ \xb9^b\xed\x9b\xe5\x07v\x9f1\xab\xfd\x91[\x15\x8e\ \x5c\x18Z\x07fA=7\xc3\xdf\x10\xed,V\x97E\ \xbb\xf5EHz\xe7\xbbL#m\xd9\x9a\xc7\xa7\x07c\ \xe5\xdc\xa9\xf2\x9de)\xdd\x026k\xb5\xce\x1c\xc4\xb6\ \x83\xf5\xfbI\x09\xc9L\x10T\xb2\xa7\xaa*\ X\xd0\xd4\x80\xd0\xe4\xf0\x1b\xc4\xb3@\x8b4f\xd7\xa3\ \x17\xa6\xeb\x821\xcd\xe7\xca\xc2s\xa1\xed]\x91u\x86\ \xc6q.'N6\xf6\xc2\xbcms\x91\xcf`\x018\ ;-G\xd5\x14D\x90\x0f\x8c\xdb\ Y\x9d\x9d\xd8\xb04.@\x19J\x04Wr\xed\x0d\xd8\ \xcaPG\x8bj\xe1B\xe9G\x97\xb4\x07\xcc\x06^\xa8\ \x0b'K\xf1\x89\xcd\x12\xc7\ \xc5\xdcv\xaf\xfc=q;\xf21\x82\x0epY\x87\xc3\ J\x8f\xa9\x89v\xaf<\xbf\xbc\x81\xa5,V\xe2\x12\x88\ O@\xaf\xabA\xd8\x07^{\xe9QUs\xeb\ \xdcl\xed\x92J\xc6\x97w\x8ao\xac\xf8\x14\x9f>\x01\ Y@\x0a\x94\xce:\xaa\x0a\x16(\xf0\xa4\xeaA\xf0\xb7\ \x22D;\x13\xc4\xe0)\xb8\xf4|\x9e\x0f\xc1\xce?\xb3\ ~\x0fg\xf8S\xca\xfe&\xff\x09+F`\xf5\x13\xf4\ \x88\x93L)1\x01\xc0\xc96y\x1bW\x0a\x15~.\ \xd0\x9fs\xf0}7X\xf7}h/\xda\x80\x0e\x00\xa2\ =\xf0\xd6a4\x08\xcai~v\xddAa\xfd,X\ \xe78s\xc8>P5\xe9\xd8\x01\xb5+L\xa5\x07\xa0\ \xdd\x17c\x08\x14b\x96\x06'\xe6o\x92\xb4\x96@\xc6\ \x1b,\xf4A\xe4\x04\xadl\xfd\x9d\xd5\x8c\xccr\x85F\ \xb7\x8c6\xa2v\x88-7#z\x8a\x00mE[\xe0\ \xdf\xb9\xf0\xe5}\xda\xae\x83\xbes>\x8ca\xe7\xcer\ \x96\xd4\xd8\xf4i\xb3\xe9h1\xe3\xba\xce\x09#+w\ uN`1\xdd\x06\x1a\xa7\xa6\x0b]\x9d\xb9.\x81^\ \xba\x93\x81\xf8I\xa0\xd5\x00\x85yF\x90&a\xf7\xf0\ \xbe\xbd\x1b\x0e\x0c\xf5\xb4\x1d\x1e\x1c OA\xc7\xda\x14\ \xfc\x0d\xa2ER\xc3\x06\xd13\xd4VaH\xd5u)\ )caT\x94\xf3\xe4\xa2\x93\x8d\xed\x9b6\x0b\x1b\x84\ \xad[\xb6\x9c\xbbE\xe8e\xa7\xf7:\x84\xad\xe7\xb7o\ \x14:\xdbrD\xea\xe8\xd4m\x14\x1d\x22\x0eu\xa68\ \xd8\xb2\x97\x99\x95(l\xe7\xcc\xcbR\x97?\x0c$\xea\ \x85\x7f\xb3!\xcefo\xe2\xf4\xd1\xb0K\xd8\xb5\xabc\ p\xb0l\xdc\xbf0\x1b\xdcK\x82\x01g\xb7\x8d\xce+\ \xc7\xa6\xcd\xd5\xf9\xb6)\x0b\xea\xd8\xfb\xa6p\x98\xc7+\ \x05j\xc4D*`\xe4d\xc9l\xa8\xb0\xcf\x9b\x0a\xc3\ \xd8\x12\x0b\x08\x98\xd8\xf92)\xe3\xe89\x11%\x19\xa7\ [\xcb%P\xc5\xbbf\xc5\xdcbS\xe3\x5c\xbe\xe9\xf4\ l\x0dd\xfb2L\x0f\x8b\xaf\x120\xf5\xdb\xd9\xf9`\ C\xb0\x89V\xa0p\x88\xe6\xee\x82\xd0u\x04\xacI\xa9\ -\xb1\xad\xc4\x16\xd0\xc4s\x9d\xe9'w\xd1\xac\x85\xec\ 4\x8d`\xe85\x12\xc8<\xf1W\xbc\x15V(\x8d\xff\ J\xder^6\xe4M\x0fm\x96\xcc>\xe9\xcfl\xb2\ K\xc5;=\x88\xb2O\x8b\x92\x01\x0e\xc6\x98&\xdeF\ \xc3T\x00Z\xedh4\xcb\xa2Qv\xaa\x9c\xfe\xbd \ 8\xda\xa3\x84\xe9\x09\x18Fa\x0a\xbbFF\x86\x04\xd3\ \x8c\x90W\xf3\x9a\x02o\x88\x82\xb0\xa5\xfd\x5c\x9e\x8d\xeb\ \xb8lIB\xd7\xcfJ\x92\xec\xe3u\x02?<\x94\xb5\ \x94\xc6\xdd\x0d\xa3\xb2,\x82z\x8ab\x85\x12fE\xe5\ \x8b\x02\xa8\x0c\xc9\x0d\xb9mNRLb\xb7\x96o \ ??K\x03\x99\xa7\x91\x8c\xb3\xd2m\xdfx`p\xd3\ \xe9\xd5-\xc4$\xf69\x92O\xd0h'\xcb\xa9\x91\xe4\ \xfb3\xb3\x95\xba\xa3\xde\xf4\xa0\xa1M\x06CF\xa0a\ \x10\xa8\x02\xad\xce\xd0S\x9a@\x1d\xda\x86\xc4o/ \ \xbd \xb4x[\xbe\x90\xe3.r\xd5\ \x00\xa7<\xa22\x81g\x0ef\x94\x99\xf6\x99g\x09\xbf\ _\x8f\x17\x06\xf9\xdd\x069\xd1\x98\xf0\x99z)\x84\xb3\ D\x8a@a\xe9u\x8aY\xee\xe8\x5c7\xcd\xf5\xa82\ \xc4kzj\x02gyB\xeb\x01i\xb6=\x1d\x9e\xc8\ xE\xa4n05<\xe4\xf3\x83\xf1\xa6T\xaa<\xe0\ \xce\xa2e\xc2kt\xd9\xbd\x01\x9e\x94=b\xe5\xe6\x06\ M-\xdc7\xcdE\xfbT\xeb\x8e\xb9\xd2\xd1\xc7\xec\xba\ \x0a\x15\x1c\x12,\x98\xb7<\x08<3\xb7\xac\x06;5\ \xcf\x83\x1cvZO\xa0\xad\xad\xa5\xbd\xe6|\xff\xcbQ\ }]C7\xbfh\xaf9\xab\xa5\x930.%\xab\x90\ &\xf3\x86\xa1*\xf0AJMB,\xe7\x83j#\ \xf0\xca\xdcx\xb3\xf2\x17{\x13\xa7?eU\xd1\xbc\x18\ O\x07\xdb\x0eF\xa0[(,hb',\xf2\xae\xec\ q\xfe\x1e\x8cs\xe6V\x9d8-N\xe2&\x1f\xc8\xaf\ P\xfa\x9bU\xc5\xac\xa7\xb5\xb6\xca\x82\xbc4Xj\xdf\ \x9d\x91t\x07\xaf\xc20\x1f\xa1S\x982\xf5\x1f-\xb4\ \x9a\xa9\xf1wS<\xe93w\x5c1\xad\x0bi\xdcm\ &}}\xc9\x14r\x9ej\xf7\xdaRp\x1ci\xa0P\ \x08\xec5\xd4\xde;\xb0\xb1h51(\x1e\x97\xb2\xf9\ \xac#N'\xf7Y\xe9\xec\xe6\xd2\x1cq\xab\x1d\x9dI\ \x0d\x9c\x81\x9e\x15e\xb9\xab\xa5?#$5u\x9a\xdc\ \x80\xa8c\x12\xe7Yn\x81\x1d\x80g\xa3!\xf7\x11i\ \x9c\xb2\xa6\xb3\x8d\x0d\xf4\xe1\xc0\x0a\xe7%g<\x9c0\ \xf8\xb5\xaf\xae\xdbu\xf6\xaa\x86\x94\x91R\xec\x5c\xacQ\ \xc8\x05\x9b+7H\xf7\xde|\x9d\x13\x94\x9fQx\xf3\ \xcb\xc3\x9e\x8b\xef\xf5M\xc9\x5cw\xa0\xeeu'Q\xbe\ \x00\x83n\xf0,}\xbb\xcc\xd6\x0fO\xa3W~\xf7\x85\ \xc7\xf0U\x8e\xf6>\x836\xef\x99Q3\x15j\x96\x8f\ 9ZY\xe8\xa9@\xd2\xc97\x89\x0b~0\x97C\xb6\ \xa5\x81Z\x98wk\xa7\xb9w}\x8e\x18\x09\xbb\x0a\xbc\ ?\xcfz\xc3< tY\xf5\x9f\xd9\xd7o\x5c\xdc\x22\ \x15\x0fGI\xc4\x97[\xdb\x1d\x95]\x05\x8d\x03\x98\xe7\ \xf8\xa5\x10\xfe\xf53;\xa06\x5c\x9d\x1eK\x0e\xe4\x15\ g\xb1\x14\x14\x90V\xd0\xf29_\xe6\xefqV.\x1d\ \xe5u^'\xf4\xb5\xe4\xaeqE>\xfb\ \xb2\x8c\x06Mc\xec\xd6\xa01\x8f\x9d\xc9?\xd11\x98\ \xd0y\xdf\x82\x13,\xa18x]\x8c\xaf\x97Z=;\ \xe1\xb3.\xc6w\x1c\x5c]P0\xcc\xdb\xb9\x8b\x8f\xf7\ \xf9\xf14i\xed\x0a8;\x16\xea8\x1bie\xbf#\ \x10\xf4Z4\x880-\xb4\x106\x0d \xf7\xc1\x0e\xd6\ r\x88\x8b\x0c\xd3\xdc>l\xa4&\x84A\x9c\x96Da\ \x80\x1f\xd3\xf0\x9da\x93k\x06W\x1b\x08\xcdBe\x9e\ \xb0x\x1d\xe1^Hg\x22R\xc1&#M\x22\xfc\x0c\ \xb7\xef|\xc5\x17\x06\x14o\xee\x9a\x89L9\xe9\x09\xb7\ \xa6\x16>+yk\x0f\xdd[\x84\xb4aJ\x94\xa5\xb4\ #\x9b\x08D\xac\xc5\xeaZM;\xd2p'\x07\xb9\xcc\ 8\x9a\xeb\x98\xc2\x8b\x9c\x95\x81\xe0\xcf\xa0Q-@*\ \x82\x94\xc9G\xe8\xb8\xfe\x84\x08\xdd\xff\x02\x06dR:\ \ \x00\x00 /\ \x00\ \x00qOx\x9c\xd5=\x09x\x1c\xd5yO\x96\xb4\xd2\ \xaeV\x87\x0f\x8c/\xcc\xc88\x8al\xec\x95l\xb0\x01\ !\x0bd\x1dH\xb6$\x0bI\x961\x97<\xda}\xab\ \x1d<\xbb\xb3\x9e\x99\x95,\xd34)\xa1!\x09|I\ \x1a\x82\x09\xc4\xa1!G\xa1\xe0\xdc!%\x14Z\x12\xa0\ \xd0\x04JB)I\x13\x92\x0f\x87+\xa49\xdaR\xda\ \x10\xd2\xa4\xff;f\xe6\xcd\xee\x1c+L\xf8\xbe\xc6\xb1\ \xdfJ;\xef\x7f\xff\xfb\xef\xff\x7f\xff\x1b:\xefM\xad\ \xf8\xf6\xaf\x8f\xdd\xf4D\xf3\x9a\xbf?p\xfb\x03?\xbe\ \x03!T\x9d7\xa7v\x8e\xedD\xa8\xe6\xbb\xf0\xc3\xf9\ \x08U>\xc3\xc6\x9a_\xb1\xf1\x8a\xe5lL\xc28\xd2\ \x81\xd0\xf4\x83\xa8\xeao\xab\x10:GCUO\xc2x\ \xeeJT\xf5\xddw\xc0\xb8\x0bU=\xff B\x91\xdf\ \xa2\xaa_\xb4\xc3\xcfO\xa0\xea\xf6\xdd\x00\xa7\x95\x8d\xe7\ \x8d\xa1\xea\x1b\xe0\xf9+\xcfD\xd5\xb7W#\xd4\xf5E\ 6N\x1dG\xd5w\x1f@h\xe04T\xfd\xe4\xa3\x08\ u\xff\x1a\xad=\xf3\xf7\xf0\xf3\x17\xd0F\xb2\x0e\xcc\xdd\ H\xe0\xb7\xbf\x17m$p\xdb\x1f@g\x92\xe7\xb6l\ D\x17\x1d}\x18\xa1\xb3\xba\xd1\xc0\xdcy\x08\x9d\xad\xb1\ \xb1\xf7~4t\xcb4\xe0\xf72\x1a\xaf>\x03\xf0\xfd\ \x19\x9a\xbc\xe1&\x84\xfa\xefA\xfb\x94#\x08\xd5Jl\ L>\x82\xf6\x1d}\x1d~\x1egc\xf25t\xc9\xfd\ \xf7 \xd4\xf95t\xf3\xa7\x9b`\xcf\x09\xf4\xad\xcf\x03\ M\x96\xbe\xbf\xa2\xe2\xa5\xa7\x00\xaf\xa3l\xcc\xdcQ\xb1\ \xe2\xee\xa7\x11\xda\xfe\xd7\x15\xd3\x7f\xf2!\x84\x96\xaf\xaa\ P\xee\xfe\x12\xecs\xb2\xe2\xfa|\x03B\xe3\xc3\x157\ \xbe\xbe\x0b\x9e\xfb\xdf\x8a7\xb6\xf6\xc2\xf7\xf7.Zz\ \xe3\xa7`\x9d\xc7\x16\x8d\x038\x14}qQr\xf0b\ \x84\xea\x9f[T\xa8\xdb\x06t\xfa36^\xf2\xe1E\ 7%\x01\xdf5s\x8bn}-\x0f\xeb\xbe\xb0\xe8\xf8\ \xean\x84Z\xeb\x16\xddK\xf0j\x7fu\xd1\x8f\xea\x81\ \xbe\xf2\xc7\x16\xfd\xc7&Xg\xfd\x8f\x16\xbd\xfe\xc8#\ \xc0\xaf\xdb+\xa3'r\x08\xedy\xa32vq\x05B\ \xbb\xef\xab\xac\xdfr%Bu_\xaa\x5c\xf3\xc8F\x84\ \xfa\xbeP\xd9\xf9\xdeJ\xc0\xef\xae\xca\xdd\xfd\xcf\xc3\xcf\ \x97\xb1q\xdf\x1f*\xa7\x06\x81\xfe\x17\xceW^{\x0c\ \xe6\xad\x9b\xab\xfc\xe8S\xff\x84\xd0\xfe\x86\xca\xfb\x9e\xfd\ &B\x89\x9e\xcag\x9f\x05\xba\xd7_W\xf9\xe2\xe7\x01\ \xaf\x8d\xafU\xfe\xe2/\xde\x83\xd0;>Ru\xc5\xe0\ Y \x17OV\xe1\xe3\xaf\x01\x9d?[u\xe4K\xb0\ \xde\xde\xe7a\x04|\xce*T\xbd'\xf29\x84:>\ Yu\xc3\xe3&\xd0a\xa0\xea\xe3\x83\xf7\x03=O\xb0\ qr)\x1b\xe5\x17\xabn\xbb\xf6_\xe0\xe7\xeb\xaan\ \xcf\xc2\xfc\xe6\x81\xaa\xef\xac\x1aD\xe8\x8c-U\xcf\xec\ \x83}^\xf2\x83\xaaW\xaa\xeeFh\xe6\x8b\xd5\xd1\xf7\ \xc9\x80\xcf\xbd\xd5K\x1f\x9f@\xa8\xed{\xd5\xed\x9f[\ \x8a\xd0\x86\x03\xd5[\xc8\xcf\xe7le\xe3%{\xab\xa7\ \x12\x12\xd0\xe5\xdc\xea\xa9;A\x9eN\x99\xaaV:A\ \x8e\xb6\xa6\xabgW\xdf\x86P\xc3\x85\xd57\x1c\x07:\ _\x94\xad\xbe\xbd\x16\xe0O=W\xfd\x99c] G\ \xff\xc6\xc6\xd4\xef\xaa\xef\xbc\xe4U\xa0g\xb4\xfa\xae\xeb\ \x1f\x02\xbaD\xd8x`U\xf5\xd3\xe7]\x8aP\xfa\xaa\ HT\xfb\x1a\xc81\x8a\xac\x9e\xfb;\xc0kCd\xf3\ N\xe0\xc3\x96i6\xa6\xd4\xc8y\xd7\x8c\xc0z\xf7\xb2\ \x11_\x13\xe9\xdc\x01r$_\x1a\xb9\xa8\x15\xe8\xbc\xed\ \xdd\x91\xe1\x0b\xd6#t\xda\xfb\x22Wl\xf9\x09B\x8b\ \x16E\x0e?\xfae\x846\xdf\xc6\xc6^)r\xf4\xe5\ \xcf\xc2:\xdf\x8c\xdc\x0a\xea\x82b\xed\x91[_\xeb\x01\ <\x8d\xc8\xb1V\xe0\xcf\xfe\x17\x22\x8fl \xfc\xfcE\ \xe4\xf1g>\x03r\x9a\x8d\xbcx:\xc8\x7f{c\xe4\ \xc5-0n\xcf\xd7\xd4}\x04\xf6\xbbX\xabY\xb6q\ -B;^\xa8Y\xf9\xb1\x02\x8c;k\xb6?\x09\xf4\ \x88\x1c\xac\xe9\x1c\x5c\x8c\xd0\x8acl\xdcys\xcde\ -\xf0\xfd\xca\xcf\xd6\xa4r\xf7!Tu]\xcd'\xae\ \x00\xfd\xba\xfcoj\x8em\x01y9\xf0\xab\x9a\xdf\xbc\ \x0e\xfb\xbc\xb4\xbf\xb6\xea;\xff\x05\xfa\xf5R\xed\xde\x1f\ \x00\x1d[\x7fS;\xb3\xf9\xd3\x08\xc5w\xd4^\xb3\x1b\ \xd6\x19:\xad\xf6\xee\x9fF\xe1\xfb;\xd88\xb9\xbb\xf6\ \xf8\xca\xc30>P{_\xd7!\x84V\xaf\xaa}\xf4\ )\xc0\x7f\xf3\xab\xd13\x1b/Dh\xed\xb3\xd1\xaez\ \xa0\xc3\x85OD\xbbG\x96 $}%\xba\xef\xfb \ \x07\x9d?\x8b^\xf9\x81\x7f\x861\x11=\x10\x01y\xbf\ \xa05:S\x01\x0as\xe0\xbah\xf6\xdb\xa0\x0f\x9b\xee\ \x8a\xbe\xeb8\xe8\xcd\xa9\x1f\x8e\xfei\x03\xec\xbf\xed\xb2\ \xe8\x8dO\xc1~{\xff3z\xb4\x1f\xf0^\xfd@\xf4\ \xe8^\x90\xdf\xd5\xbf\x8b>\xf8\x9d\xbd\x08\x9d\x7f:\x1b\ \xaf\x18\x88>\xbc\xe7FX\xe7`\xf4\xe1\x99?\x80\x1c\ \x0f\xc4j~\x09\xf26\xf2L,~\x1d\xf0mdy\ l\xdd\xa5\xfb@^\x17\xc7\xa6\xbe\x0f?\xc7\xde\x1f\x9b\ z\xf5\x0d\x90\xe3\xbbbJ\xfa\x1f\x11:\xf37l\xec\ z)ft\x81\xbd\x1f\xf0\xbb\xf2\xeb\xb1\ ;o}\x01\xf0\xfev\xec\xc1\xd6\x8f\x00\xde#u\x9b\ \xeeh\x86\xf9\xbdu\xfd\x87\xc0\x966~\xafn\xef!\ \xd0\xabM]u\x07t\x98\x7f\xd9W\xeafn\x00\xbd\ \xdd\x0d\xf2\xb4\xeb\xea\x86\x17\xb7\x00^-\ \xdd\x0d?{\xf0\x16\xd8\xefc\x0d\xafn\x05\xfdl\xbe\ \x8f\x8d;\xff\xa71F\xe8?=\xd7\xb8\xfd\xeb\xc0\xe7\ S\xeei\xbc@\x07\xfa\xb4\xfc\xb0\xf1\x8a_\x81\x1dy\ \xe7'\xd8\xd8\xf3\x95F\xe5\x8b`\x97\xa6v4^\xbd\ v\x19\xf0cQ\xe3\xbb\x16\x83\x9c\xd4\xedi\xbc\xe6S\ \xc0\xd7e\x7f\xd9x\xec\xe6Sa\x97[\x1b\xffj\x12\ \xe8\xb6\xff\xee\xc6;\xbe\x0e|Y\xf5@\xe3\xf1\xcb\x00\ \xdf\xb5\x97\xc2\x08rq\xfa+\x8d_]\x0fzt\xea\ F6\xee\x5c\xdf\xf8\xbd\x0b\x80:\x03#\x8d\xcf\xbc\x08\ t\x1a\xdb\xdb\xf8\xaf\x95\xc0\xb73\xbe\xdf\xf8\x93\xaba\ \x1f\xfb:\x1a_\xad\x049Fo(\x08)\x13\xc0\x01\ \xf4Q\xd4\x89d$\xa1\x0c\xd2\x11Fi\xb4\x03>\x99\ \xf0'\x8f\x0c\xd4\x01\x84k\x83O\x18\xbe3\xe0\xdf<\ \xd2\x90\x8a\x14\xf8\x9cBY\x94@3\xf0\xd9\x84\xe7\x0b\ h\x1a~R\xe0\xdb\xae\x93\x9a\xdd\x09\xcf\xcb\xa8\xab\x96\ 08\x02\x7f\x07;e)\xa3\xe3\xf4\x8e\x8ci\xe6\x8d\ \x8e\xb6\xb6<\xd6\x0d\x9c\xd7T\xc5He\x133\x8a\x99\ )L'\x14\xad+\xf8\xeb\xce6\xb9\x0bd\x11\xd5\xc9\ \xd3Z\xc1\x9c*(S\xa6^A\xb6~k\xe8\xd6M\ \xf8\xbd\x0a\x7fg\xe0\x09\x99\x22\x9d\x85\x9f\xfc7U\xba\ \xfd\x85B(&\xc1p1\x09L\xac\xe2\x19]\xce&\ \xb2\xd8\xb5\xdf\xae\xb0\x07N\x8a\x0cs\x94W&E:\ \x81\x92\x80rv\x81dX\x18\x84p2\xcc)\xa6\x89\ \xf5DR\xcb\xfa\x90\xc1\xe7\x01_2Hh\x1cP\x98\ \xa6D\x90\xd0(G\xec\x15\x071\x1b\x99\xa6n2U\ \x1a\xb5\xa1z\xc2[\x8bz\x01\x06\xd9Z\x0e\xcdR\x18\ \xb3\xf09\x05\x9f\xc8\x0a\x0e\xb4X/\x9e\xc5\xaaFp\ \xf4\x84\xd3\x80\x86`\xf5$\x85\xf32\x92\xedy5C\ J\x12\xe7\x0c\xec3\xa9\x9bN!4\x97\x91nOZ\ \xb4g\xb7\xe7\xf3\xfd\xe8\x22\xbaa\xb2H\x12f\xc9\x1c\ Q\x09FB\x8e^\xf8i\x0e\xbeSa$\xdf\x19!\ $Z\xed\x10G\xea\xd5\xe6r\xaa&\xa7\xa4a9'\ \xcf`\xdd\x13\x81\xed\x800\xd3\x11\xb2 A!K\x91\ 1\x014Y\x8cP2\xcf\xbf\x91\xa9\x98H0v\xd8\ \x0b.\x19\xcf\xe3\xa4\x22\xab\x92\x99\x91s\x07\x0d\xc9\xd4\ :<\xd7Y\x86&\xf8*\x05\x0a\xdb\xcd\x8b\xba\x09]\ \xce\x19\xaalj>\xccH\x00\x9a)\xca\x0eb\xafr\ \x84\xb6\x80\xc8s\xf07\x09\x9fM\xaa\xe8\x04(A\xb2\ \x03I6\xe0\xc5\xdd\xa9\x14\xe0$%e\x13\xcfh\xfa\ |\x87D\xc0\xd7\xcb\xa9\x94\xaa\xe4\x0e\xba\xa4p\x0f\xec\ \xf3e\xf4\x1a\xdd\xb1\x04\xcb\xcd\x02(\xcayXXv\ IajV\xce%qJ\xda\x937\x15-g\xf8@\ lB=\x14B\x92Z\x22Q\x18\x22=d\xbe\xea3\ o\x15\xac\xadr\x85e\xdb\x1c\x82\xad\x91m\xaa6\x84\ \xe5=@\xed\x19\xec\xb0\xb8_SS\x8c\xc3\x1e\x10\xd7\ \x00\x8c\x9d\x94{\x879\xc4<\x1d\x8bHU\x04\xcc\x97\ T\xcb\xe9\xc6\xa6\x01AB\x1c\x15l\x8e\xe6\x02T;\ \x80\xe5\xa0\xf9\xb5h\x10dX\x9cQ58\x1a\xf04\ Q\xc3\x1c:\xe8<=\x04O\xf8<\xbd\x9e\xe2\xa6S\ \xf1\x9a\xe1\x9b%6OC\x07\x01\x0a\xa6v\xd1Y\xb7\ a\x88l7\xa9i\x07\x15l\x04\xecw\xd8\x16}A\ Hl(\xf1aM\xc7!\xc2\x10b\x17[n\x82F\x0aD\ g3>\xe0\xeb\x01\xfc\xb8r\xa4l\xc8\xab\x00\xb6D\ \x11\x17\x98\xcf~\xe7\xa8\x8b$I{v\xc3?\x04\xdc\ \xb2\x22p\x0e\xa8u\x1c\xd04\xa5\xa9^B\x0d\x11d\ =@\xcc\xe3\x9cD)\x11\x02\xf7l{\xf3D\x0a\xb2\ T\xd74\x80jqR4\x1c\xcd\x16Q\xec\x95V\x01\ Al\xbb\xd1\xa3e\xf3*6q\xaa\x99\xd0'x\xd9\ U|Y\xae\xdc\xbe\xd4&\xba\xeeP\xdb\x1f^+\x87\ 7NM\xd2\xac\xa0\xfaY\x1f^6\x11^\xca\xb3X\ \x92\x8dr\x16\xe8\x07i|\x9e\xd2\x19\x035\x14\x00\xc7\ \xb8@l\x8aA\xe38\xe68\xc9g\xa2\x0fY\xf8\x0d\ \xa1\xe4,\x15*K?\x12\xf6\xf2k{\xb5\xdc;M\ \xc9\xc8hs\xe0;\xc1]g\xb1a\x80Z\x80j\xc8\ J.\x11\x8cL\xc2%\x08\xa3\xc4?Q\xd9*e\x1a\ Q\x1c\xc7T-\xa3b\xe1\xe15\x82\xf6\xfd\xf6F(\ A\x1a@\x1c\xe1\x8cm\x0d\x82Vi\x10V\x19\xd2f\ \x08\xe0&U\x9b\x99\x9aSr\x00\xd9%7\x83\x80|\ \x9an)\xcb\xa5\xa6@\x99\xc7l\xe94\xcd\x22\xb2B\ \xfc\x17\x1f\x03\xb8\xba)\x0d\x1aF\x01\xfb\x03^g\x0b\ \x1d\xd1\xdc\xab\xc0\x16Z\x92cPI\xc8\xa2f\x1b\xe4\ )D\x00\xd7I\xb2\xaa\x83\xe7\x9c\x97\xf0a\xc50\x8d\ fJ\x8d,\x08\x03\x87\xed6-\xff\xcd\x05\xbe\x93\x87\ \xa8,`\xe8B}T\x1e\x09gT\xaeZ\xd6\xead\ \x93\x0a\x0d\xdf\xdc\x91\x14\xa3\xa6\xcca\x18\xa0\xe5R\x99\ \x7f&\xb8\x9c'\xe9\xdad\xf6\x11*\x84\xc4*Y\xbe\ \x80\xe0r\x15\xfd\xad{\xdd\x13h3\x95\x19/-\xb9\ \x80\xd2\xce\xbd\xafb\xcb\xa3\x83\xfavB \x0e\xc2\xd2\ 5A\xf4\x87\xf8\x10)#\x1b\xd24\x06\x19\x07\xa7\x02\ \x11\xda4N\x83on\x96<\xfe\xd7\x0d>{^+\ HF\x81\x7f\x98\x93s&\x09\x15a\xa6\xa4\x98L\x0d\ /\xe8l\xe3K\xd8\x16\xcd\x97!\xbf\x0dd\x08!\x80\ \xc6\xd3.\x19B\x08\xc7\x94$\x81\x0c\x05\xaa\xc9'\xca\ $\xbb\xc6\xa3p\xd1\xfc\x93\xdfL\xbb\xb5\xdeV\x14\xc2\ \x02f\xd0\x89\xf0%\xe9\xeft\xf4KZ\x08HQ\xeb\ 8M1\x1d\x05\x5c\xc7 \xd8\xe9\x06S\xd7\x07\x7f'\ \xe0\xdfa\xfbSs\x19L\xb9\xba\x98)$\xbd\x92I\ `$\xcd)\xaa*\xa50\xf1\x0f^\xec\x90,\x85\x07\ \xae\xa5\xc1m\x19RZ\xd7\xb2\x841:0UOI\ )\xc58\xd89\xadw\x8d\xf6\x8d\x0dw\x8f\xf4\x8dL\ \x0c\xedo.\x9f;\x15\xf17\xc1\x1d\x9d\x8a\xb7F\xf3\ \xc7\xf2\xb9C\xfe\x90\x0c\xc7\xe2\x01\xfbW\xa1+\xe6\xe8\ \xe7\x9c\xe04\xd2\xf0\x8dJ?Y1\xb9\xc8G\xdd\xe6\ M\x8a~\xa3r\xf3A>\xaf\x03\xae8\xab\x14Y|\ \xf8\xb6\x1c~\xfdy\x08\xbft\x9c\xd5f\xbd\xf9%\x13\ vZ\xf6[1q\xd6\x90\x94\x1c\xf3d\x87\x0a\xb8\x80\ \x09\xaf(\x0b\xd7u\xc3\x93\x96\xa57\xd6\x81\x9e\x1a\xe6\ \x028G\x0d)\xe1\x5c\x0f5\x1bDcX\x8e\xe6\xe5\ \xd3\x97\xc1~z\xb4\x5c\x0e'i0.\xf8u_\xf0\ V\xf0\xe7&\xa0\x17\xf0\xa5B\xac\x83S\xe5\xc0n\xf1\ \x88\xadd\xaa\xf6Y\xcf\x15\xd6\xc0\x0a}\x86\xa9d!\ [\x85\xb4U\xc9bI\xc5i\xb3\x9c\xa5\xded<\xe5\ \x0b\xef*\x0e\x8f\xd5R\x92`?T\xaa\x1f\xc49L\ \xd2|\xf4\xe7T\x92\x99\xa6\xe4\xa9$\xe2\x12\x9d\x91<\ d<\x05\xbf'\xb3J\x83\xc9\xcd$\x22\xd3t}\xbe\ Y\xda\x0f\x069)\x93\x00\x89\x8b`\x0a\xa7\xe5\x82j\ 2\xd9j\x0e\x97\x9a\xb5\x1c\xff>\xae/~Lm$\ k\x9a\xb2Y(KXZJ\x84%g\xbbO/\xe8\ \xcb\x01:-m@\x12%\x81b\xe1r\x16\x19*1\ R\x17S\x7f\xaa\xf3\x18\xd3\xa0\x04f\xc1-y\x860\ \xbc@\x8d\x85\x87\xdf\xb4Q\xd9`\xe9y\xaf\xe6rw\ I-g*\xb9\x02v\x5c]0vg\xd3\xbc\x83\xc4\ \x81[\x05\x01\xc0\x94\xcc'\xb8\x00\x18T rT$\ (\x81\x9cH\xa7[W\xe4\xad`\xccSRN#\xcc\ 5\xf2Z.\x15Ft\xaf\x15\x8b\xd7q\xa2\xa9\xe5\x9e\ k\x84\x84S\xb7\x95\xb5H\x81\xca\xbf\x13\xd2\x10yN\ \xd2\xc2\x02#x\xb3wXJ=\x02{F\xe6\x9e\xa4\ 4\xe8\x91x0\xb5\x95\xaf0\x03\xab\xe5\xb85w6\ \xd7oo\x8e)\x07\xdb\x1b\x04:R\x1e\xec60\xb0\ Y\xa8\x8fJ\xa6\xae\x80'\xa5\xa1\x0c\xb1\xce[%\x03\ \x03\xbfSa\xb1\xa5\x9b\xe2)n\x02\x98\xf9M\xda\xea\ \xe4 \xb5\xd4B\xcaH2\xe3\x8b\xc3\xc8=\x09\x7f0\ ]\x83\x18\x07+^4\xa8\x1cK\xf6Z\x879\x1bZ\ \xe0\xef\x18M\xa0s<\x82\x0c+\x15\xbf\xb3'\x83\x93\ \x07Y\xf8\x90\xc3\xe6\x9c\xa6\x1f\x94Z\xa41l\x98\xb2\ ^\x5cA\xf6\xc7r}9Y\xb1G\x01\xcdJ\x84\x83\ \xa1\xb7\xd2=\x11m\x9dv\x95]%\xbb\xa2\x92b\x94\ v\xaa\x1b\xf6\x0a\xe3\xc9\x0cN\x15T\x1c\xa2:\x12\xf5\ \x9aYZ\xaac\xe8\xcb>\xc87:\xa0\x09\x89B\x09\ \xe3\x87\xfa(\x8fbD\xb4\x9b\x04\xd8Z>\x1f\x86\xf4\ \x18$\xf1\xd86\xac\xee\xa0V\xa2N\x88\xe5\x0d\xaaU\ \x16\x85\xef\x8f\x94\xe4\xa5\xb3\x10\xe0\x92On\xf5i\xb5\ QQh\xbc\x92\xd7\xb5\x19P\x22H\x1a\xe6\xa5Y%\ \x855\x08>s\x90\x13\x87\x88o\x03\xf8\x15\x9d\xe6\x87\ \x12\xa41B-\xa7O\xd75]\xda\x1cb\xe1\x9d\xe9\ \x09\xf2\xa7hz\x22\x91\x08\x9e\x1e\xb7\xa7\x8b\xbe\xa6\x86\ N\x0es.k\xd0\x1e\xee\xcd\xadZ\x94\xe6U\xd2\x1c\ \x00Z@0h\x974\xfd\x01vA\x8a\xc0\xf42\xcb\ \xf9 \x16\x98\x19\xfft\xfe\xd9JG\x9c\x1c\xd8I\xab\ O\x1dVrJV9\x82\x89S2\xe6\x0d\x88(\xc1\ |\xc9\xf3a\x94\x1c\xe6\xc1\x86\xdb\xcfD\x87\xb5Y%\ 7#\x85i\xf8\x1a\xbb\xaa\xd3G\xeb\x1b\xcc\xa3\x16\x0b\ pt\x04\xfcH\xbfV\x08\xf3T\xbd6\xb4\x0c\xcf\xf7\ \x0dJ\x89\x97\xb9\xbc\x92TM\xb7-]\xda\xb6e\xa2\ \x03pj\xbd+\xc9\xaa8\xa7\x15f2\x90\x0ca,\ \x19y9\x89Aj;\x82\xb1\xe8\x04\xfb\xe1\x95\xceX\ N\x8d\x145\xc8z\xb36&I\x9e\x90\x886\xfd\xb4\ =N*\x00I5\xf1\xa4F!\x99\x04]I\x17\xd4\ \x10\xf58v2\x18P#\xc249\x0dsg\xe9\xe7\ M\xb6Lan\xc4,\x17\xa9\xd8\xd4+=\x09\x22s\ tn\xa0\x94\x12\x85\x19\x08\xdc\xa14\xaab\xd9\x00\xa2\ \x83\xc9\x82\xb4\x06KiMU\xb59\x22T\xd6a\x12\ \xd8\x0a\xdd0\xc34\xeed\xd8\x91(\x8f\x1d!\xf6b\ Y\xa0\xab\x8c\x95\xeb\x0dw\xf9\x846\xa5I\x80;V\ `i\x80U\xbf\xa7Q\x85\xbd\xf8\x19B\xb0\x02\xf1>\ \xdd\x17\x8f!\x88\x1d\xa0qE0V\x09\x1f\xac\xac\x82\ \x0a\x8b^\xc8og\x5c\x0eO\xacC\xc2\xff\x8dL\xc1\ 4\x09sIN\x1b\xbcb\xc6gE'\x06v\x82\xbd\ \x1crJ0\xa5t\x09\x09&m\x5c7\xb9q5\xf5\ y\x82)\x0b\xde\x09\xa9\x5c\xf1_0\xf2\xe9\xb7\x10\xf9\ rP?3\x0c\xf5\xb21\x9f\xf0\xc1\x5c\xa789\xb8\ Yq\x8eK\xe0\x90u\x16P\xa4aNz$\xe0\xa9\ c;\x8c\x95d\x1a\xd9:\xaa\xa6\x868\xa4\x8d>\xc6\ \xab\x9b\x1a+B7\x22\x90n\xb7\xdf\xc0M\xcd>Y\ 1C\x9d\xff\x84\xcf\x02\xeelp!VR\xb4\x89-\ \x1c\x15\x88\x89\x0aY\xecc\xf7\xc2,^&\xd4\x80k\ \xdc4k\xb4\xf7\xc0\xb2v\x92PC\xf0\x8a-\x8b\x8d\ \xb9C\xc1\xf5\xa2\xb1\xb6\xabRvpG\xedt\x08]\ \xaf|\x9b\xbc\xce\xc6\xb7\xca\xaf\x0c\xbde\x08\x8b\xe8\xad\ \x0fG/\x0c\xb1\x5c(b\x8c\xcdb\x99S\xb2\x0d\x8d\ \x1bYw\x91\xfbMS\xd6\x16\x89\xb2(\xbb\xddg\x03\ &rB\xb5\xa0\xa3\xbd\xc5\x1c\x110v\xe2i^@\ \xednH\xa8\xeb:\x19\x94,\xd8\xd1\x86\x8bI\xe1\xcb\ J\xa0BL\xa5\xe4\x02\xc8,\x03;f\xf8e\x11\xd8\ &\x066i\x9f\xdc\x06\x03^\xc2O\xc5\x98F\x16%\ /c\xe4\xf0*\xd4~m\xe4\xa9\xa3\xe8L,G\xe3\ \x98k7\xe8S\xc6,\x8bL\x98I\x83\x82\xd0uZ\ \x8b*\x062?*\xf5\x0f\x84\x96,\xb4<\xb0\x93&\ \x0d\xb36\xf0\xd2\xf3\x17\x03\xb1.D\xf7a\x9b\xe1$\ H\xceA\xfa8\xce\xa5$\x03\xab\xcc\xedX\x02K\x1a\ \xaa\x82\x91X^\x84D1\xe0\x1a\x0a8\x0cJ\x02\xa0\ \x88\xa7\xda\xbb(W\xb0]\xb6\xd5)%\xc96\x08|\ \xa7\x11\xa9i\x9c\x9c_\x13\xb0\xd2>\x0a7L\xd2\xdd\ \xcbx\xe6\x9e\x14dY\xb9\xe7\x01\xda*\xc5\x0ae\xa5\ \x87,,*eG\xbb2u\xfd,\xb3#\xdf\xa7y\ \xf5\xc9b\x87gp \x861\xe3\x1a\xb8Cv\xcc\xc1\ ko&\xaf\xeb\xea\xc0.1>\x08Q\xa1\xe5\x90\x80\ \xeb\xbc2jqL\x13\xe2\xd2\x9aqr\xb8<]F\ \x98\xc1\xcc\x84\x8e\xdc\xc7M\xc5\x16\xd2\xd9\xc3Jb<\ \x5c\xe76\xdc3\x86\xd6\xeaF\xff\x18\x96\xdb\xc9\x01\xc6\ O\xd6`\xb3\x93\xe8\x9c\x9dm\x94\x18g'\x93\x9f\xb0\ lr\xd8\xa1S\x08D\x81\xae1\x1bf\x08!\xd7\xd0\ \xc2VX\xc4\x5cWvD|6\x88q\x1aP\xcaS\ \xe2{\x15\xe3\x15*\xec&-\x92\x15\x17mW\xa4\xd3\ \xd9<&%\x12\x9au)90~\xaa\x1a\xea\x02\x96\ \xa3~~\x8e%\xd6\xdd\x1c\xb0\xd1\xb4\x92S\x8cL(\ \x9c\x16\xa1\x84\xc6\x82\xf5,/K\x11\x1b\xa3\xd2\xea\xaf\ \x98\xaf\xc5\xb3\x85\xc3D20\xa9r\x85\xd1\xc5:\xf1\ v\x95\x9a\x90SaoG%5vGMh\xd1\x98\ W\xa0H\xd1\xbc\xdd\xaa\x9a\x87\x95\xa2\x5c\xf6\xdf\xe1\xa7\ p\xb4M\xdbE\x04\x08\xe2\xec\x16\xcf\xbal\xb4\xc5\xaa\ X\x06\xcf\xed\xa3\xa7\xfb\xee\xe6\xc2\xea\x96\xbe\x94b\xfa\ \xcfk\xe2\x85~[M\x85\x99\xa4u\xcc\x7ff\x1c\xe6\ \xb5\x80$\x17H8!\xcc\x1a\xc0j>hV\x8b\x13\ \x988\xdd\xb0-4\x06\x09\xda^\x1fL\xb4\xdd\x86\xb0\ \xdc\xa4\x82\xe7\xfc\xe7\xed\xf28\x02\x94l;Y\xda>\ \xc1l\xdb\x09\xba)\xde\xb5\xe8\xd9\xef\xd6]H)\x1a\ mR\x80P\x93\x9c\x1cvH\xd6y\xa47\x22\x17\xfa\ \x22\xfb\x08=\xab\x10y-O\xce\x13\x87\x99\x1e\x94\ \xb7\xb4\xd71\xa8\x17`\xe7\x184\x0c\xe2\x9b\xa3\xaaS\ \x8d\xf7\xa3\xea$\xaf\xbe\x97M\xd5\x98so\xc0\x11\x09\ zC hN7\xa5\xb5(\xeb\x91n\x08+g\x03\ \xe4\xaf\xcb\xb3\xf7|\x84z\x04\x8d\xc7\xda\xac\xcf\xca\xa9\ z{\xa9\xf2)\xa4\x17}\x04\xcf9moV#\xb3\ \xf7\xba\xab\x8a\x9a\xb6\x09\xfdH\xac\xe0\xeas\xeb&\xdd\ r\xb6\x85\x09R\xa2n*a\x0a\xcd\xff\x04%\xea\xce\ \xe7YM\xc3{\xde\x12\xdaP\xed\xca\x17\x9d\x88\xbf\x87\ g\x84\xfe\xd3'(u\xb2\x9c2\xe1\x8d1\xc5M.\ \xc5\xf1\x86\xdbTK=\x90h\xe94\xa4\xb1;P\xec\ \xc8\x81\xf4\x99\x04\xd9>v2\xc6\xb4\xce\x14\xe4\xa1V\ <\xbd\x0b\x9a,4\xa38\xc6^\xe8>\xf1\x9f\xbf\x1d\ \xe6\xebv\xc4n\xc5\x16\xa1\xcd@\x8e\x8b\xea\xd11\x90\ ^\xca\x810\xd9\xfb=\x14lE\xe3\x9e2Y\x1b\xee\ ]v\x16\x89\xa1\xc6\x11e!\x00\xb3c\xb1\x22\xb6\x15\ \x05{\xf6r\xebl\xd1\x9f\xd6LS\xcbJZ:F\ #?\xc2,\x16\xeb\x05\x89\xb0\xabGG\xb8\xc8S\x86\ \x7f\x8d{z\xc8\xaa`\x07\xb9\x9cw8\xe6\xe9\xa6\xed\ \xb8G8\xaf\x83\xd4jB\xc9\x06\x90\xbd\xd6\x0as\x1c\ \x8d\xeb\xb3\x22\x18\xbf\x19\xe3t\x9b\x22\x96\x87\x83\xb0l\ \xf0q\xe2U\xc1>|mp{\xbd\x13\x81\xd0.\xf2\ \x119h\x97\xc4\xae\x16G\x03U\xc1\xc1\xc0:\xda\x01\ \xc0\xcep\x15~\xd2\x8d\xb95\xcd2\xab\xe0h\xd5\x90\ \x92ULi<\x8f\x83X\x1cpS\xc4{B\xa7}\ x\xa8\x97\x93\xab\xf3\x8a\x1aQHC@n\xf30\xe9\ OJ\x16 \x11\xcc\x99\xea\xbc\x93\xc3\xf3l\x11\x84\x93\ \x9c.k9,\xe9Z@\xb8\xb2pl4nP\xf3\ \x02\xb7\xce\x0c\xc6\xa6\x90/\x0b\x97%\xf6Af\xa9\xbf\ \x8c\x91c\xc90\x9f\xd9@s\xc6\x02mr\xd4\xc5\x1b\ 7\xa3r\xc1p\xee-\x05a0Z\x5c\x1fv\x9dX\ \x91^%y&\x00\x83\xb7\xbbo\xdd\x1b\x8b\x15t\x1b\ \xa5wl\x04\x8f1\xaa\x93+68\x97\xc4\x01\x1e#\ \x88\x1c\xb5\xa3\xbc\xce\x1d\x86\x86\xc6\xed2\xb6\xd5M<\ \x05\xd4I\xef'\xa4\x9d\x01`b\x1e\xe1{uH\xf4\ \xceZE\xc4\x96@\xa7\xf9U-\x81\xb6x\x8c\xb5\xfb\ 9}\xa4\xfe\x90\xfd[\xf7\xd9\xd1Bi\xeb~#o\ \xdd\x97s\x90\xf5\x1aA\xb0\x97p\x0f/t\xd7\x89P\ \xe8\xe1H\xb8\x10\x8f\xb8\xca]m%\xad\x17\x8e*\x9f\ \xa0|u\x22\x1e\x12\x13\x90\xb5\xd3<`\xa3)\x81P\ ,\xcchsm\xb4GC\xe8\x94\x90\x14\xc8R\x83\x82\ \x96^\x9f\xa3\xd0\xe8x\xa6`\xd2\xed\x04)\xb4\xebv\ \x94cb\xc9u\xa8 \x0fZ~\xb5\xcb/\x0a\x16}\ \xf0\xa0P\xcfu\xfcp\x8c\xf6,\x85x\xe2\xf5\xae\xc9\ a\x82\xd8\xc4@\x96#\x87M.\xc0bdRC\x81\ \x84\x85%v\x1e\xe5\xa4$,\x15\x0bRD\xbb\xfc\xe7\ t\xf7\xd22Z\xb8PJ\xae\xd2a\x10\x0d\x1aya\ .\x9c\x04g\x0b0\xdb\x8a\xef\xbd\x22\xc9\xbb[\xcc\xe9\ \xda&\xeb\xb4\xb1K\xb1el`#\xb5\xd3\x06\x0dU\ Z(\xd2\xc5\xb6}\xd2\xca6\x1d\xe2L\xb6\xd0\xfc\xb2\ \x9fvw\x05\xd9\x14\xfb\xb2-\xf2\xea*+\x85\x1c\x9f\ ,\x0bp\x5c4\x05\x8e\xf6\x04W0\xb6\xbf\x99^\xdb\ \xf2:a\x97X\x87\xa3\x7f\xa4\xd6O?\xf8\xff\x0f\x9a\ '\xfcP\xff\xe3\x1c\x0b\xfa\xad\xe6\xd4\xb4\xbd\xe1\xfa\xd6\ \x9f\xfd\x00\xbe\xc9rB\x83\x0dn!\xc5\x04\xafY[\ \x8b\xfc\xb5\xd5\x08\xc54+\xc4D\xd8!\xd7`.\xad\ \xe9Y\xda\x09\xe5\xb7P\xf1]~V^\xf6J\x7f\x9d\ \xceT\xe1\xfa\xb6\x17\xc8\xa6\xa2\xfb!\xce\xe9E\x9d\x93\ }v\xf8\xcdnw\xf90\x9d\x0b\xbb\x8c\x9c\xbe?\x83\ z\xfbl\x09\xf4e\x1e\xd7A|\x97i\x85\x80\xe3\xb7\ \x94x\xba@\xd8\xe2{3\xe2\x91\xf9\xa9#\x85\xec4\ 0\x5cK[\xda@\x88\xc0\x8e[\xbcV\x88\x8ba\xbd\ \xc3v\x1a\xd4\xfb\xcdy\xbb\x03q/\x1c\x82\xc2\xb9\x08\ \x0b\xe7\xfc9_^\xd8\xe4\xad'\xae\xba\xab\x13\xb1[\ \xa5V\xbf\x89^\xfe\xbd\x8axI\xbf\x09\x09\x1a\x9e\x1d\ \x16\x22\xc8\xe2\xb3N\xef\xfb\xfd\x8d\xae\xdb)\xbe\x08U\ l\xf2\xb9>\xe7m\x11K{\xf5}\xee\xeb\x06]R\ \xb3\xaf\xbe\x15\xafi\x9d\xf9fi\x22.Q_m\xbd\ .\xc3Qz\x03\xbdJ5\xcb\xea\xe7\xd5m\xef\x99\xa5\ \xf5h\x85\x174]\x86\x10\x89-H\xc5\xbd\x03~{\ \xf0\xbfs#^\x87,m.\xe0\x1d\xa6\xee\xbbp\xe4\ \xda\x9c5\x85\x9e9'\xe9\x9b>\xc0o\xc9\x07\xb1\x84\ \xd3i\xd2\x19I\xafH\x13wN \x12o\xe6\x00u\ \xdd\xe2Yl`\xda\xd4X\xe4\x09\xee\x0b\xb8\x0bi\x1d\ \xde\xb23\xc3\x0c\xdd\xf4Uv33\xf3\xd0\x86\x1dj\ H\xdc\x16\xd0\x98\x00-\xe4\xda\xb0e\xfa\xec\x12\x01\xd2\ \xe8\x9ba\xe8\x91u\x197\x17\xa7\x8ao.\x1a\x19\xc8\ $\x92\xa0\x90\xf6\x15`\xb0I\x817\x80\xf7\x82/\x96\ !.\xca\x10\x03\x98\xc3\xa5w\x12}\xc8\xb7\xb1\xdc\xce\ \x121L*e\x7f\xb3\xff\x12\x15;a\xbf\xe4UN\ Y\x00\xd4E?cJ\xe56\xae\x16\xa4\x88>O?\ \xe7\xe1_\x89r\xcezK\x8f\x952Z\xc9p\xce\xc3\ '\xd0$\xcc\xae\xd5\x8a\xf5$\x83>9\xcb[#X\ +\xc88\xf8\xd3\x11\xb4\x19\xb6=\x0av\xb4\x0d]\x82\ \x86!L\xb6~vC(\xd0\xb9\xe4US$X\x96\ \xa9U\xd7\xb9J\x8e\xd2\x0a\x96\x01!\xf4,% \xf5\ Eh\x0b\xb8\xc7\xad\x90A\xd0\x9b\x14\x10dm\x83?\ g\xc1_\x96\xa7X\xb7\x05;\xe8w\xe7\xc2\xb3[\x10\ ;@\xca\xdbR\xe1P\xa3\xcd\xa1\x9aM\xfa\x9b:3\ fV\xed\xea\xcc`9\xd5\x06\xfa\xa5\xa5\xe6\xbb:\xf3\ ]\x12}qQ\x1a\x22'\x89\xd6\x04r\xcc\x13\x82\xb4\ H\xbb\xc6\xf7\x8cl\x1e\x1b\xedi\xbbdx\x88\x8c\x92\ \x81\xf5Y\xf8\x0ebFR\xa7\x06\xd12\xb5\x844\xaa\ \x19\x862\xadbiRV\x0b\xe4\xf51[\xda\xb7\x9e\ -m\x96\xb6o\xdbv\xd66\xa9\x97\xddW\xec\x90\xb6\ \x9f\xdb\xbeE\xeal\xcb\x13\xa9\xa2K\xb7Qt\x08\xf3\ \xeb-\xe6;\xb2u\xd5\x82\x18\xdfo\xc7R\xacAr\ \x00\xfet\x00s\x86\x17D\xa0\xb3\xbd\x09\xd4O\xc3,\ i`\xa0cx\xb8l\xfc\xbf\xb6 \xfc{ieL\ \xa1\xe1\x09\x13?/au\x12\x02V\x8a\x94\xed\xd6*\ \xe6w\x88\x99\x12\xbb\xcc\xc5\xee\x94\xc4\x82(\xb1\xc7\x9b\ \x12\xe3\xd8\x16\x0f\x08\x94\xd8\x9d:%-\xf4\xa8\xc8\x8a\ \x8aS\x89r\x89Tq\xc3I\x11\xc9\xda\xbcx?P\ \xd4AS\x085Svxi\xdd>p\x5c\xa2\x98V\ \x18>dN\xd0XZ\xa2\xd7\xd1\xbc\x228q\x96\x84\ \x8a\x1b\x83\xbco9\xb2\xd7C8\xd9\x9d\xc4\xff-\xb5\ <\x03\xe0)H\xbb\xb3\xc4\x1d2{oX\x8e\xafU\ \xe0=\x1db\x1al\x9d?m\x03;q\xd6\x02\x99\x7f\ \xdc\x9f\xf9\xe4\x84\x8a\xf7\x80\x10#0'+&8\x16\ s\x8ex\x19\x1dS\x81H8\xb1h\x96\xc5\xa2\xec\x06\ =\xfd~^\x12Z\xae\xa4\xb9\x0cL\xa30\xa5\x81\x89\ \x89Q\xc92/\xe4\xd1\x82\x9e\x83'dI\xda\xd6~\ \x16\xcf\xd7\x0d\x5c\xb6d\xa1\xa3'\xa9~\xa2\xec\xa8\xce\ A\x8c\x1d6\x15\xcb]b\x81\xb6\xf8\xc2\x00\x1aCz\ C\xde\xee\xa7\xe4,R'\xca7\x9b\x8f-h\xdf\x9f\ \x12\x22\x1d\xd6k^\xa0\xae\xdb}\x89\xc5i ,p\ \xb9w\x0e\xffs\xb6\xaf\xf4\xea2r\xee\xfa8\xb3\xd4\ \x05J\xe3e\xde\x94\xa2\xa1N\x1aC\xf6\xa0c\x10\xb4\ yZ\xd7\xa1\xb7[\x81n\xb4q\x89\xbf\xc1\x81t\x88\ \xd0\xd2p\xf9\xc2\xf3\xf8\x82\x88\xb8\x97\x9a\x09\xabJ\xa6\ \xd3\x98\xfa\x04/\x1dY\x1d\x95b\xda)\x92V\xb6\x0e\ \x0b\x91\xf5\x8a\x00\x99\x97\x0b\x9d\x97\xdei\xc8\xef\x22\xc0\ \xc2\x08\x99\xf4&\xe4^\x83\x90(\x0b.Z\xc9\xabX\ \xcc~\xe9=\xa4\x0cV\xf3\x92A\xce\x1b\xc9\x91\x19%\ \xac\xa5\xc1\xe5\x13\xb4\x16R\x15w\xe1\x9e\xf6\x9a\xb0\xc2\ \x85\xc7\xf3\xe5\xbd1\xb0t^\xd9=\x1a\x1es\x1b\xdc\ o\x1b\x14V\xa4y\x87\xcf\xac\x9d%\xef(d/$\ \x90\xf9U\xe9\x0c\xd7%'~\x13\xcf\x98\xddW\xc0V\ \xf2w\x19\xf2B\x22\x7f\xcfC^63>\x8b\xb3p\ \x97\xdd\x19\xcf\x0a\x19o\x92n\xde\xf5~\xbf\x1eM\x85\ x\xceHfp\x96'\xb7>d/\xaf\x9b\xc3\x93~\ V\x94\xea\x9eZ\xcb\x03@\xbfy\xeb\x8bjTV\xbe\ \xbf\x80:\x95'6e\xb5Hx\xcc|s\xdd\x00\x9e\ (\xf4\xf3R\x0bv\xf1\x22\xd2\xaf\xd9o\xfc+\x9d5\ Vr6v\x15\x12;\xd0e.`v\xcd\xd16\xc2\ \xd3\xf4\xa4\xcc2\xd5\xc4^\xb0h\xd0\xa9\xbbn\xa0\x07\ e\xb4G\x9dU\xd8I\xf0\x96T5H\xff\xa6\x0b\xa6\ \xa9\xe5\xe0\x07%y\x10\x228_\x01y\xc26g\xee\ \xfaY\xcd`\xd2\xae\x97yLL\xd07GZI\xac\ \x95`\xb9\x9d\x85\x15n\x89E\xf5%\xbb1\xce[G\ {\xf2\x1cd\xfe\xcd>+\xfc\xb4\xa8\xe4\x97\x05\x1b|\ \x98ZK'\xfc\xb3\xde\x03\xe6\x0e\x13\x09\x15\xf3\xb0v\ \x81\xabp\x07\xaf\xb70koP\xecT\xea\x09Zi\ \xdb\xb2\x15\x9f\xcb4y\x9b\x11\x82@\xec\xba\x7f\x90\x05\ |\x9c\x86F\x16\x9c\x8a\x18\x14\xf7\x03Z\xc9\xa8D\xe1\ \x1eA\x1b\xa8\x1d\x17\xd6\xb7\xa9\x92\x19\x96\x0f+\xd9B\ V\x88\xc5\xc9;\xbf\x0c\xf6~\xd7\xec=\xa9^dc\ 5\xc8\xa4\x8d\x02}\xfb\xa2_\xb3\x88\x07\x84\x85\xf7h\ x\xd2\xa5\x8f\x9f\x94\xb1t\xd4\xc9O\x9c\xf6>\x93\x9a\ 'U\xf0\xce\x0d\xa3\xf4~\x22\xe9\xe3;\x88\xe7\xfd`\ {t\x84]\x5c`\x1da\x9ebZ\xcc!\xb9\xa8\xe2\ \xc3\xea6.\xfe\x90*\x87P\x06\xf1\xe5\xcf\x10=\xc6\ d!\xb3\xf3\x02\x09\xbf\x97\xde\xb0TM\xac\x94Y\xf1\ \xa2[\xb4W\x8e\x15rba\x14T\x92V\xcb\x0ay\ \x1f4\xe2\xb4/\x89W(\x85\xb2:\xaf\x01\x06\x08\x97\ S\xd7t\xd8\x1b\xb5\xe6\xf9\xbb\xd5\x90\xe6\x07\xcf\xa0\xcc\ \xfd:Y\x97/$\xf3|i\x1c\x07v3U*\x08\ H\x0a=\x01\x9e.\xaa\x8f\x9f!\xa9Ek\xd5\x8c\x9b\ \xf3\xaa\xffb[]GS\xee\x9c\xaf\xb5$\xdf\xdb\xe0\ 6n\x13[,^?\xec%\xdd\xa5\xc4\x08\ zCw\xf1\xd3\x12\x0d\xbc\xdc]\xa0\xde\xdc\x8a\x8d\x07\ \xf2\xaa\xdf\xf7\xceF\xe9=\xbd\xb7\xe0\x16\xccj\x1a^\ M\xb17)My\x9cV\x06]\x88\x19~\xab.\xc4\ \x84b\xb1p\xaa\x9c\xd4-\x96P|J\xdb\x16\xc2\xff\ \x13\x04\xc25\xd9\xa5\xf3\xa6\xf5&\xf5\xe2\xbb\x8c\xc5\xe7\ \x04%\x91\x19\x86\x02i)\xe1\xf7\xc9}\xb1\ \x18\xf39\xeaf7,\x15\x9eT\xb1\x137\xe7\xc5\xcb\ \xa5\xc9\x0e)\x92\xa9\xac\xc6m\xe3s:o\x0c\xa2\xa7\ \x8f\x90\x8c\xcc\xca\xaa\x92\x12r\x94@\xc4ZK\x8c\x04\ \xb6\x11I\x8b|\x17\xda\xfa\x98\xb1\x909\x9bC\x84\xa7\ |']\xd2\x0a\xb7`\x91\x14\x14Lh\xddc:\x15\ \x22\x92\xef'^\xa2\xb2\xe2\xff\x00\xc2\xda\xc6\xba\ \x00\x000\x15\ \x00\ \x00\xaaBx\x9c\xed}k`\x5cU\xb9\xe8j2\xd9\ I&\x93\xa4\x8fP\xd2R\xcaN\xa8M\x9a&3\xcd\ \x13\x12B m2I\xdb\xb4\x0dI\xfa\x80Z\xca\xce\ \xccN2tf\xf6t\xf6\x9e\xa6)P\xb0`U^\ \x87g)P<\xa2\xf8(T\xabx\x0e*z\xbc(\ \xf7H\xb9\x8a\xa8\x88\xa2\x17\x8eG\x8f\xc7\x17JA\ \xe1x\xcf\xf1|\xeb\xb1\xf7^{f?&m\xf1\xfe\ \xb8WlV2\xb3\xd7\xb7\xd6\xfa\xd6\xb7\xbe\xd7\xfa\xbe\ ow\x7f9Z\xfd\xed7\x8e\xdc\xfbB\xcd\x92\xffq\ \xd5\xc3\xff\xf4\xd3O#\x84\x8a&\xa4\x9dkGV#\ T\xf6\x14\xfcq\x11B\xa5\xd7\xd0v\xde\xcd\xb4\xbd\xe5\ 2\xda\xde\xf7K\x846v!t\xe8$\xf2}\xd5\x87\ \xd0\xda\xeb\x90\xef;\xd0\xae\x9bF\xbe\xef\xbe\x0f\xda\xcf\ \xdf+w T\x99D\xbe\x9f\x03\xac\xb9\x85\xc8\xf7\ \xdbU\x08\x0dU\xa1\xa2U\xeb\xe1\xef}\xb4\xdd\xf8W\ Tt+\xf4\xbbu\x04\x15=\x5c\x84\xd0\x15\xdf\xa2\xed\ \x1d\x1fCE\x8f]\x85\x90|\x19*\xfa\xces\x08\xed\ \x5c\x85\x96\xae\xfc/\xf8\xfbk\xa8\x01\x8f\xd7\x1dC\x0d\ x\x9c\xee\xbfG\x0d\x18n\xf7\x0f\xd0J\xfc\xdc\xc5m\ \xa8e\xcf\xef\x11:\xf0k4p\xe8\x19\x84V\xafG\ \x83\xd3\x9d\x08\xad\xf9.m\xa5\x17\xd0\xba\x8e{\x11\xaa\ \x1e@C\xf7\x8f\xc3\xbcO\xa2\x0d\xf7\x8f\xc2<\x8f\xa0\ M\xcfN\x22\xf4w\xbdh\xe4\x95e\x08u\x1eD\xa3\ E\xe7\xc3:#h\xcb\xad\xf0|\xb4\x12m\x8d\xed\x03\ <|\x99\xb6\x873h\xeb\xa1w\xe1\xef\xdf\xd1\xf6\xf0\ '\xd0\xb6\xaf\xfd#B[\xa6\xd1\x8e\x8e\xaf#\xf4\x81\ \xbd\xe8\xbe\x8f\xcf\x05<\xb6\xa3/}\xb5\x00\xa1\xf2\x19\ \xf4\xcd\xcf~\x17\xa1\xa5\xaf\xa0?\x97\xfe\x0c\xa1\x0b\x1e\ \x9a3\xe7\x97\xdfC\xe8\xca\x7f\xa3\xedC\xcf\xcd\xa9~\ \xec\xfb\x08\x0d\x9e=g\xfc\xda\xdb\x11\xaa\x89\xcd\x89=\ \xf6y\xc0\xd3\xa3s\xa6\x97\x1f@h\xff\x97\xe6\xdc\x92\ \xaa@H\xbdv\xce\xdd\xef\xaeC\xe8\xa3\x0b\xe6<\xfd\ \xcd\xdf\x22t\xf9%s^\xc7\xed\xdf\xbd3\xe7/-\ }\x08\xd5\x96\x16\x94\xef\x86\xf9\x0f\xddQ\xb0\xe0\xee\x8f\ !\xb4\xe0_\x0a\xda_\x07x\x97\x85h\xfb\x91\xb2\x82\ Q\x98\x06\xaa\xfaM\xc1\x8e\xb3\x7f\x80\xd0\x8e]\x05\x91\ \xb5\xb0\xa7\x8b~R\x90\x81\xb9\xa2u?\xa5\xed\x8d\x9f\ +\xc8\xfc\x1e\xf6a\xfdy\x05\xd7\x7f`\x0dB\xd7\xbf\ Tpo\xa4\x10\xe0\xae\x81\x16\xf0Rw\xa4\xe0\x81\xb7\ S\x08\x9d\xd7Y\xf0\xe8d\x1dB\xdbW\x14\x1c;\xa7\ \x17\xa1\x96{\x0a\xbe\x8c\xf1pqQ\xc1\xf7\xff#\x03\ \xf8\xf8d\xc1O\xcaa\xff\xefi*\xf8c#\xcc?\ 4\x5c\xf0\xee\xb3\xcf\x02]\x0d\x16\x16\xfd\xebb\xd8\xe7\ \x81\xc2\xd2\xd7\x93\x08)\xdf.\xf4_6\x07\xa1\xa9h\ ay\xf3\x95\x08-\xfch\xe1\xa2\xc3o\xc1>\xcd\x14\ .y\xb6\x01\xa1\xf1O\x16v\xdf\x08\xe3\xcf\xfdu\xe1\ \xfa\xf0\xcf\xe1\xef\x11\xda\xde\xf0\x0am\xef\xbd\xa4p\xe7\ Z\x98\xef\x8e'\x0ao:\x02p\x9a\x16\x16\xde\xf5\xbd\ \xff\x85\xd0M\x89\xc2\x07\xb6\xb7!T!\xd1\xf6PC\ \xe1\x93\xaf~\x03\xa1\xaee\x85\xaf\xbe\x0a\xf4\xb3\xe8c\ \x85\xaf\xbe\xfd4\xc0\xe9.\xfc\xc5ga]\xedZ\xe1\ o\xef\xbc\x01\xe6\xf9G_\xe0\x06\xd8\xc7\xfe\xbb}\xe5\ \xaba\xde\x17O\xf9\x16\x1d\xd8\x88\xd0%W\xf9\xfa\x1f\ \x87\xf5\xdc}\xd8\xb7cm+\x9c\x877}W^\x07\ t9x\xbbO>\xf66\xd0\xd3\xe3\xbe\x89\x97a=\ E;|\x93\xf8\xef\xcaU\xbe}\x9f\x87\xf5\x5c3\x06\ -\xac{\xf5\x8d\xbe\x1b\x84O\x224\x9a\xf1\xddzB\ \x83}\xdf\xe7;\xbc\xf6k@'?\xa6\xed\xb5\x9bh\ {\xcf\x1e\xdf\xfd_\x04\xbc\xdfV\xe5;R\xff:\x9c\ \x13\x9f\xef\xa1c\xb0\x7f\x97\xdf\xe9\xfb\xe8M\xb0o\xd7\ \x1e\xf7=\x9c\x00\xb8+\xdf\xf0}\xe9\xad\x8f\x22\x14\x7f\ \xc7\xf7\xfc\xe2\xb5\xb0\xeeg|\xcfo\xbb\x1a\xe8\xb2\x83\ \xb6\xf7\xdd\xeb{\xfe?\xe1\xfb\xc2o\xf8~\xb8\x15\xe6\ }\xd3E\xbe\x7f\xf7=\x86\xd0\x91\xdf\xf8\xfe\xcfAh\ \xaf\xf9MQ\xe9A\x09\xf0q[\xd1\x82\x13c\x08]\ \xf4\x9b\xa2U\x1b\xe1\xb9\xc8ME\xab>\xb9\x00\xa1\xd6\ \x93E\xcd\xf8\xf3\xb5]\xb4=\xd0S4p\x07\xe0e\ \xce\x13E\x9b0}W\xbcL\xdbC\x0f\x15\xed\x0c\x8a\ \x08\x05\x9f+\xda\xf9\x198\xb7\xe2SE\x91#=\x08\ \xf5l\xa4\xed\x03\x8dE\xb1n\xc0\xd3%s\x8b\xaeN\ \xdf\x03tv>mo\xdcQ\xa4\x1d\x02z\x9c/\xd2\ \xf6\xf0KE{\xce\x81\xf9.\xbe\xac\xe8\xc6\x1bd\xa0\ \xdfT\xd1\xad\xc7\x80\x1e\xa3\x9f.z\xb8\x04\xe6u\xc7\ \x89\xa2O\x10\xb8\xc7i\xfb\xc0\xe1\xa2\xcfl;\x89P\ IS\xd1\xa3\xb7\xc0>\xbe\xff\x00m\xef\x14\x8a\xbe\xbb\ \xe2s\x08i\x0f\x15}\xbf\xf3\x0a\x84\x1e|U(\xa8\ \x82\xfd\xde\x1e\x17J\x95\x7f\x00|~I8g\x1a\xd6\ q\xe4:\xe1}\xc5@g}\x9d\xc2\x0a\xfc\xf9\xdcv\ \xdaFzh{_\x8d\xd0D\xf6\xff'\xb4\xbd\xff\xf3\ B'\xa1\x83\x17i\xfb\xa0O\xe8z\x11\xce\xef\xb6?\ A\xfb&\x9c\xc3\xc7\x85\xee\x8b\x01\x1fw\xbd$\x0c\xd4\ \x03=\xf6\xcf\x176\x5c\x02\xe7\xb1\xfe\xb3\xc2\xf6\xdf\xc2\ |\x86eaG3\x9c\xff\xe2\x1b\x04m\xe6\x8f\xf0\xfd\ \xcf\x05\xed\x0687\x17\xdd,\xec}\xee\x0b\xc0w.\ \xa2\xadt\x91p\xe8\xdf\x1e\x81\xf9\x9d/<\x00l\x12\ \x9d\xb5\x5cx\xe0\xb7\xc0\x07F\x1f\x17\x1ex\x1b\xe8\xe2\ \xf6\xad\xc2\x91z\xa0\xf3\x833\xc2\x13_\x07|\x07\xc6\ \x85gW\xe0s\xf2\xef\xc2\x89\x1f~\x02\xce\xdd\x85\xc2\ \xab\xa3\xd0\x06\x9e\x14~q\x1e\xf0\xc1\xee\x90\xf0\x8bf\ h\x07\xee\x12~\xb5Z\x05<}Ix\xe3kp~\ +\x02\xb4\xbd\xf7G\xc5ew\xc0\xfe\x9c\x1b,\xaej\ X\x0at\xf6\x9f\xc5\x8b\xee\x81\xf3\xbbm~\xf1\xb9\xaf\ \x01\xfc;\xbfY\xdcr\x19\xcc{\x83P\xdc\xf1\x02\xfc\ \xfd\x81\x95\xb4\xbd\xf7\xf6\xe2\x8e\xef@[\xdeX\xdc\x89\ \x9f\xdfz\xa2\xb8{\xed<\x84\xce\xff\x0emw>U\ <\xd2\x06|\xec\xb2\xc7i\xfb\x91[\x8a\xb7/\x87\xe7\ \x96\xfd\xef\xe2h\xf2I\x84\xfc\x81\xe2\x07w\x00\xff\xbe\ \xf9\xcd\xe2#\xcdp\xbe\xef\xda]\xfc\xc2\x8b\xb0\xdfW\ J\xb4\xbd\xab\xab\xf8\x9dwa\x9f>\xf4\xfe\x12\xdf\xf3\ x\x9f\x1e,Yp\x1b\xe0\xd1wW\xc9\xe6\x1f\x01\x9d\ \xb4^_2\xd9\xf4q\x84\xce^D\xdb\xb1\xf3K\x0e\ \xac\x87\xf9O\xbdXr\xaf\x08\xeb/\xb9\xa6\xe4\xb1\x7f\ )\x85~>\xda^{]\xc9\xb1E{\xa1}\xbd\xe4\ \xc9\x9e\xdd\x08-__\xf2\xdc\xf7\x00\x8f\x9d?*\xf9\ \xd3\x87a\x1d\xf3S\xb4\xbd_,]Yy)B+\ ^,\x0d\xfe3\x9c\xdb\xf5O\xd3\xf6\xc6\xdf\x95\xf6\x94\ \xc3~^)\x94\xf6n\x9c\x0f\xe7o{\xe9\x88\xff\xd7\ 0\xce\xd7K\xb7\xbe\x0c\xe7r\xeb\x9e\xd2+?\xf2\x12\ B\x9b\xffZz\x95\x00|p\xfb\x13\xa5\xe3\xb8]\xf0\ H\xe9\xe4\x1c`\xbcwN\x96&\xbe\x0d\xf8\xbe`^\ \xe9\xb5o\x05\x11\x9a9Pz\xdd\x08\xd0u\xf9\xd3\xa5\ \xd7\x1d\x03>\x5c\xfb\xed\xd2\xfd\x150\xef\x8b\x96\x96\xde\ \xaa\x01\x9c\xdb~Uz\xf7\xf7`_\xa4\xbf\x96\x1e\x0a\ \x03\x9e\x96\xff\xba\xf4\xd0f\xe0kuu\xa5\x8f|\x03\ \xe8ol\x7f\xe9\x97\xaf\x07z\x01\x8e\xfa\xa4\xfc8B\ \x9b>U\xfa\xd4\xf3\x9ba\xfc%\xb4\xbd\xe5\xfa\xd2g\ 6\xdd\x0d\xf3\xac.}f\xf2\xaf\x08\xb5\xbd\x5c\xfa\xf2\ \xb9\xb0\xff\x03\x95~A\xde\x0fr\xa5\xc6_\xfc;\xe0\ #\xc9\xcf\xfa\x03\x1f\x02\xfa\x8e\xb7\xf9k\xaf\xd8\x8a\xd0\ \xc8\x0f\xfc\xa18\xf4\xbf\xf5%\x7f\x7f\x1a\xf8\xd4\xedw\ \xf9w\xbe\x0c\xdf\x9f\xa5\xf9w\x9e\xfc\x0b\xf0\xb1'h\ {\xcd\x87\xfd\xb1\x89\x7fF\xa8\xe3r\xda^\xf1\xb6_\ \xed\x81\xf3\xe7\xdf\xe6\xbf\xe5i,\xbf\x17\xfb\xefC\xc0\ O\xabn\xf3\x7f\xfcrX\xf7m\xaa\xff3\x0f\xfc+\ \xd0_\xd8\xffT=\xe8\x07w^X\xd6\xf8\xe9\x1a\xe0\ \xbb\xcf\x96\xf5\xbc\xd0\x0f\xe7r\x92\xb6\x1f\xaa,\x0b\xef\ \x069~\xceke\x9bw\x03\xbf\xee\xb8\xb3\xec\xaa4\ \xc0\xbb\xb9\xb8l\xf2V\xe0\xaf\x17\x9e,K~\x01\xbe\ \xdf\xdbY\xb6\xc7\xf7\x07\x90\xab\xe9\xb2}\xdf\x00\xfeS\ \xf9B\xd95\xdf\x02>\xd9\xdaS\xf6\x91i\xe0/k\ >H[\xe9\xa6\xb2O\xbc\x1a\x80}U\xcb\xfe\xe7s\ \xc0\xd7\xae\x7f\xa8\xec\xb5\x87\xa1\xed\x1f\xa5\xed\xfe}e\ o\xfc\x08\xf0\xd92\xbf\xec\xdd{\xbf\x88\xd0\xfb>V\ \xf6\xee}\xb0\x8e\x81\xe7\xcb\xfe\xf2\x95\x0b\x00\x1f\xcd\x81\ 9\xbf\x84\xf3w\xe5\x83\x81\xc5_\x01\xba\xdc\xfe\xe7@\ \xfd\x22\xd0C\xb6m\x0b\xb4<\x05\xfaC\xa9/0\xfc\ \x93\xed\xb0\xee\x9f\x05\xb6\xbd\x00\xfb\x95\x0e\x06\xc6\xb7\x03\ \x9f\xdf\xf6H@\xae\x84}\xbe\xe2\x00m\xa3?\x0e\xa8\ s\x01\x9f;\xce\x0f\x1c\xda\x0d\xfb~\xd6\xefh{\xde\ \xa3\x81\xfbe\xc0S]4\xf0\xd0F\xcc\x0f\xbf\x15x\ \xf4X1\xe0\xe5\x9c\xc0c\xef\x80\x5c\xdf\xf2\xa7\xc0?\ \x1e\x84\xef#_\xa1\xed\xcd\x0f\x05\xbe\xb9\x1e\xe8\xe3\xba\ u\x81\x9f~\x13\xce\xcd\xe6\x7f\xa2\xed-_\x0c\xbc\xb6\ \x18\xf8\xe1\xcd[\x02\x7fy\x0dt\xb6\xfa7\xca\xd1\x13\ \x00\xcf\xffP9\xfa3\xec\xe7\xc1\x82r\xdf\xd3\x11\xf8\ \x0c\xe7_\x08\x96\xdf\xff.\xe8\x87\xa5\x9f\xa6\xed\xd9\ {i\xbby\x94\xb6\xd1Kh{x^\xf9#\xcb\x00\ \x7f\x8b.)\x7f<\xb0\x08\xa1\x0f\xf6\x96\xff\xe4\xa4\x1f\ \xe4\xe6\xb9\x15b\xac\x16\xe4\xcd\xcb\x15\xc1(\xf0\xb7\xb1\ \xefT\xb4\xde\x01|\xbc\xe0O\x15\x17\xac\x85\xe7\xcb\x0e\ B\x0b\xf2\xfc\xc1\x03\x15;o\x02\xb9\xd7\xf2\xf3\x8a\xbd\ \x9f\x01x\x81\x12\xda\xde\xf3p\xc5\x91\x8dp>\x96\xad\ \xacx\xfc\x0f\x80\x87\x83\xafT<\xb3\x0e\xf6\xbf\xaa\xbe\ \xe2\xdbO\xdd\x0f\xf4\xdfB\xdb\x0f?P\xf1\xe3\xef\xc3\ >LvV\xfc\xa2\x19\xd6\xb9\xea\xc3\x15\xbf\xc2\x9f\xd7\ \xbd]q\xb2\x05\xceK\xe3$m\xaf\xaa\xaa,h\x05\ ~\xb2^\xaa\xf4c\xfa\xb8\xe7\x9d\xcaEo\xc0\xf9\xba\ \xfa`e\xc7\x13@\x9f5\xf3+/I\xc3\xfe4W\ V^r\x10\xe0\xadYR\xb9\xe3\xf70\xdf\xe6c\xb4\ \xbd\xea\xe5\xca\xd8q\x90\x8b\xb7\xd7Tf\xbe\x00\xe7c\ \xc3\x87*g>\x09\xe7\xe9\xd2\xd5\xb4\xdd\xd3Zy\xcd\ \xd2*\xa0\xa7\xde\xca\xeb\xe6\x01\xfd/\xbc\xb8\xf2\xc0\xc7\ \x80>\xcf\xfb\x8f\xca#\xf7\x9d\x0d\xfa\xcd[\x95\x9f\xda\ \x02\xeb\xf8`E\xe5\xa7\x9f\x00zz\xdf[\x95\xc7\xb6\ \xc3\xbaWLB\x0b\xf4\xdd\xf0\xb9\xca/.\x03>U\ +\xd3vg\xa4\xf2\xc5K`?\xe5\x1b*\x7f\xf8\x0b\ \xd8\x8f\xddC\x95\xaf\x14\x02]\x05\xaf\xae\xfc\xd95\x80\ \x87\xeb~Zy\xb2\x10\xe6!\xbc\x14\x03%\xf1J\xa0\ \x08`n~\xa1S\xe8\x13N\x08\xcdB\x87P\x87D\ \xa1N\xe8'\x7f\xb5\x93\x16\xfe\xc1\x13\xfdB\x13\xfc\x0b\ \x19\xcft\x0a\xf5\xf0W\x1d\xf4\xeb\x13\x06\xc4\x80\xd0\x02\ \xbf\x87\x84\x01x\xb2\x9d\xfc\xb6\x9a'}\xe1\xbb\ \xa3\xd0\x13\x8f\xd7DfE\x9foBA\xf8\xa4\x19\xfa\ 7\xb0\xd9\xd5\xc1\xf7\xad\xf03\x0c\x9f7\x08'`>\ \xf0Sh\xe3\xe6M\xd7\x84\xbf\x1f$O\x87\xc8Sa\ \x0c\xbd\x04\xb3G\x01\xfe\x1d\xf2\xf7\xc6c#\xf2>I\ \xecM\xc4\xd2\xa3R\x22\x96\x88\xf97(SR\x22!\ E\xd3\xe4\xf3\xf1\xa8\x12\x8fKS\xfb\xa4\xa8<\xe5\x1f\ \x85\x9f\x93S\x22t\xc2_\xc6dxV\xd5\xa4\x09x\ L\x95\xa21\xff:\xf85-\xf6\xee\x9aR\x92Q)\ \x1e\xf3\xaf\x8fI\xe2\xa0\x94\x90\xe1\xab\xc1\xe0\x08~\x14\ \xc0\xf7O\xa9RR\x1c\x8bi1u\xca\x18\x0b\x86O\ \x8a[\xa4)x4\x19\x93\xe0\x98\xa32i\x5c\xc9h\ ;3\xb1\x9dZz\x0e\xec\x1az\x06u#\x09\x89h\ \x0a\xa5\x91\x8c&\xd0\xc5\xf0\x9b\x06\xff\xa5\x90\x8a\xbaP\ \x08\xfe\x9bD1\xf8{\x0ae\xd08\xe0+\x82\x14\x94\ \x80O\xd7C\xaf4\xfcK\xa2\x01\xf8\x99\x81\xa7\xa7\xa1\ M\xc0\xb3!\xf8]\x81\xe7vA\xdb\x04=\x15\xf8\xa9\ \xc3l\x82\x7fi\xf8d/\x9aA=\xc2~\xc0\xfd\xa0\ p\x18v\x1bc\x1b\xd3\xc1\x09\xa1\x0f~\xa7\x9f\x1f\x85\ \x9d\x80\xfd\xe5\xa0\x89\xf0\xcc\x00\x99+\x85&\xc2\xdcC\ 0j\x8f\x81\xf9\xf7wK\xe2TZ\x9e\xb8xJ\xd3\ RjW(4\x19\xd3\xa62\xe3\xc1\x88\x92\x08\xad\x97\ \xd2Rr@\xca\xa8\xd3\x80\xaf\x90\xaaDv\xa9M\x9a\ \xd2\x84\x9flJ\xa5\x95\xbd3=\xa3\xf83QSD\ \xfc\x99H>\xc3?\xaf\x96#ZwH\xea\xb1\xc5_\ \xfa\x14\xf1\x87\xb1\x17\x83\x9f-\x96\xdf{P\xaf\xf1{\ \x04\xa0Rl]\x0d\x90#\x00#{\xb5\x9d.\xab\x95\ \xd21\xa9\x85\xfe\xec\xe9\xc5?#\x9eK\xd9s\x8aK\ \x99\x80\xff\x12\xf0\x94\x0c\xdf[\xff\xeaAa\xf8O\xff\ \xcbk9\x17\xb9,gb\x22\x91\x92'Y\xd3\x13\x0e\ \xe3\xe6=\xdb\x1b\xfci\x12>\x93\xa1\xdf>\xf8\x16\x7f\ \xa2@\x1f\x0d\x164\xc0~;\x9d\xbd\x99\x8c%3r\ z\xdfTh\x12\x0eo\xcf\x00\xfcx\xcf\xf6f\x06>\ kBQ\x14\x87'\xad\x7f\xf5\xa0\xcb\xd1\x18\xfc\xd5\x87\ \x86\xd0\xf0i\xed\xcd\x8c\xd6\x14\x8d\xa7X\xd3s\xf9X\ S\xdf\xd0\xb0\xe7\x82\xbas\x16\x90\x22\xf8V\xe1g\x0a\ &\x12\x87\xe5\xa80\xd5\x04,\xc6\xba\xb4\x18R\x8ci\ \xad\xcd\x9eVJN\xabrJ\x89\xc7\xd4h\x22\xc8\xe6\ \x18Sz\xdc\xbfv\x9c\xe4\xa59\x93\xd4`zqB\ \xcdi\xc2\xee\x82\xf0Ov\x9e\xbc1\xd1\x0d\xd9\x13\xd5\ \xe4\xb8<\x99\x96\x12\xc1\x84l\x99U\x8f\xd7\x03\xb3\x9a\ \xec4\xc1\x9cF&g\x12\xc5\xec';\x1d\xd349\ Mv\xdb~\xb2\x0e\x0f8Nv)Q\x01\xeaA\x84\ 6\x13\xf6\xbf\x9f\x88\xe1\xfd\xc0\xf6\xb1\xa8o5\xa62\ \xb7\x17w\x14\x87\x0d\x98\xb6\xd0\xaa\x84\xd5\x04\x1e\x16\xcf\ a\x22\x90\x078q\x5c\xd9\x1b\xd9\x95T\xa6\xe3rt\ 2!'5{\x10\x0b\xed@\xa0.n\x22V ]\ \xb6P\x16\x83\x1c\x1b\x84\x85t\x92E\x81\x1eCt\x90\ \xe3\x18\xa6\x01\xc9\xdf'\xef\x91\xe3\x0aF\x93-\x8c\x00\ \x93\x7fx\x1e\x03F\xaf\xe2\xa1XDN\xaa\xb2m\x17\ ?\x0cKT#!dt(\xd8\xb4\xde\xf6\xd9\x06\xb6\ \xc4>\x18\x22\x04\x93\xec'\xcaK#Q\x9b\x9cv\xe1\ \x1c\x13\xffb\x9f2\x9d\x8c+RT\xdc %\xa5I\ 9\xed\x88\x876\x90\xe0\xcdDO:\xc1d|\x9d\xd0\ \xc2at\xfehJ\x8e\xc4\xa4\xb8\xa8MII\x22w\ \x9dq\xda\x0c\x13\xec'\xfa\xe1Q\x98n.N\xcb\xc6\ @\xb6\xabqIS\x1c\x90Z\x05\x9dZA)\xc4\xd3\ x\x0b\x05\x85\x93\xf0\xef\x0fF\xf7\xf2-\xb0\xbe\x98\x92\ \x14\xdb\x82\xad\xc1U\xb6\x00\x96\xc1x\xbd\xa0\x9d\x02\xd2\ \x88\xf6\x87\x11\x14\x16\x8e\x92]6\xd0i\x00\x9c\xd7\x1b\ \x8d\x9a\x98\x1a\x8a%wa\xa0\xe5R4\x1a\x87\xdf-\ \xe7\xc0\x0a\xb6\x9e\x11\x0eVI\x078d\x11\x80\xa0\x99\ D$M\x9eT\xd23]\xa2\x03\xc0Z\xc0L\x0b\x99\ \xdb\x00\xa5a\xa2#\xef\xc7Z,`\xb1\x17\x83\xe5h\ :\xbaGJF\xe4\xa8\xb8)\xa5\xc1\xf2U\x07\x98\x02\ \xac\xaeK\x184\xfa\x09kp\xaf\xb8\xe3\x0c\x1a\xe0i\ L\x8c\x94\xa4\x06a\xe4\x01\x07<-\x5c\x03{?)\ \x9b\xa8\x0a+\xf1(\xa5)\x1b\xc8\xcb\x08-5\x13R\ o\x03\x88a\xac\x8d\x1b\xfab\x98\xd8\x0d\x1c}1\xd8\ \x13\xb1\xb8,&A_v\xc4Y\x1b\xa1\xd6 @m\ '\x9ahX\xb8\x90\xd8+uB\x03\x83^\xa7k\xa3\ \xf8'\xb5\x17\x8cq\x96\xf4\xc9\x1aH:qtF\xd5\ \xe4\x848L\xd4\xc6QY\xd3b\xc9I'\x8c.\xb6\ \xc7\x0b\xf0m\xd1\xdc\xf2,\xa48N\x7f1PM'\ \x06c\x05\x86\x8f\x8a\x01\xac\xc2$F\xa0 '\x04W\ \xdb\x935\x87\xd4J\x03\x0e\xee\xea8%\x11\xa8p\x15\ \xe3b\x87]W\xb9\xc0\x00\x98\x92TuZIG\x1d\ \x81v\xd0\x0d'L\xa0\x8eH\x8ff\xb2%\x83\xee\xc3\ \x19C-5\x86\xca\xa8r\x1aS\x84(%\xcdq\x1d\ \x89\xce~T{\xfc,\xc8\x19\xc3q9UpN\xfb\ \x99\xad\xb9\x9f\xd04\xcf\xd1J\xfaajZ,!;\ \xf4.A\x83\xa0\xbe\x8d\xa1a\xa3\x87opll\xd8\ \xe1i\xbf\xfe4\x1a5\x9e/\xc2\xcf\x8f:t\xc0\xac\ \x03\xc4!\xea\x12\x03\xdcf\x95\x0c\xca\x92\x1b%\x06\xc0\ \xf0\xc6\xa2\x13\xd8\x0d\x87\x13\xdf\xdaa\xc7\x1e\xd5\xc4\xb0\ \x0e\x11z=A\x8e[+\xe0\xb7Sh0Y\xfb\x10\ X\xcf\x9a\xa8\xa6d\xd9i\x8b\xfc\x84\xbf\x11\x0e`\x0e\ \xea\xc2t\xe7\xc2Vb\xfb2W\xcaW\x0c\xe1\xad\x8b\ (\xca\xae\x98\xac:Nz\xa9-\x8f\xad'<\x16d\ \x95\x01-\xb0AI\xcb\x1e\xbcu\x09\xf4\xc1T\xd0L\ \xe4c\x03\xf1z\xf4\xe5\xcck\xe1\xc6Lb\x5cN\x8b\ \xca\x04L.\x99\x04v\x83Av9\xe2\xc3Q\x1d\xb0\ y\xba\x82\xf0\xa2f\x8c|\xcb\xc9,\x1aV\xd2\x9a\xd3\ \x10\x01\x9e-r]0\xf3s\xc1\x9a\xf5\x90\xf2\x9c\x95\ \xd3\xb4(\x07\xf5d\x07\xcb\x0c\xfeo=\x98\xaeP=\ Oe5\x81\xd5\x08?;9\x0d\x8e\x97+\xfe\x11y\ BN\xa7]\x8eA\x0b\xc1~\x98(W\xadL\x0e6\ \x13\xf6L\xc5{\x10\xbe\xbf\x80|ZO\xd4\xad:\x8e\ f\xe6\x8f\xc8\x09\x99\xec\xb56\x05\xdaVJ\xd2\xa6\x9c\ \xb6\x00\x8d\xa2Mh\x0dZ\x0fm\xbb)\x9bG7\xad\ Y?\xda\xee\xd0g>\xc7s\xda\xc8^t\x9a\xeb\x1a\ \xd5\xa4\xb4\xe6\xc6s\xaa\xe1`\x0e\x12\x0fX\x1f\x8fu\ \x0e7\x81\xcd\x80_\x11\xd4\xc2\xa4\xe6\x88\x9d\xe5`\xfb\ \x8d\xa3\x1e[\xe9\x8d\xcdN\xf8\xceB\x87\xf3\xbb\xc7{\ \xc2\xba\x0c\xef\x0e\x8d\xf7P\xc8\xd5\xd2\x04\x08\xb2\x9dQ\ \xc6ow\xaa\xe9\x08O\x1cl\x90&\xac8:\x0db\ \xea\x7f0\xc4hl_\xde\xd0\xed\x0eX\x89(\x8a\x9b\ \xd6\xc3\x0f\xdc\xbd*\xab;\x8f\xc3\xe3\x80y]\xdd\xe3\ \xa6eN\x06\xe0\xa4\xe4\xa4H\xd6\xec\x01\xad\x83-\xd3\ \xaa\xd2\xd7\xb3\xd3\xc5d\x0a\xf3q\xc2d\xf5\xa5\x1bc\ -\x86\x85\x1b\x12k\x8d\x92H\xc5A\x97\x89\xd6`<\ \xb8\x0f\xbc\x98\x0dl0^\x07\xacb.lb\xd5\x19\ ^=\x83\xb7\x8a\xa8a\xd4&l#\xbb%\x129\x94\ \x0b}.\xde3i\x0f\xc8p5\x9f\x01\xda\x8c3\xb9\ \x9f`\xa5\xdf8\x93X\xf0\x1c'\xa71,\xb41|\ QB\x09\xf2\xaaC\xb2\x0e\x84\xd0\x942M\xcfeB\ VU s u)\x96\x0c\xba\x0f]\x9b\xb5\xe5n\ \x0aq\x15\xd9z\x1bu\xd8\x19\xfc{a\xd0\xb9\x8d\x86\ \xe9\xea(Q\x87\x9a\x8d%\x9d`*\x92.\x0b\xfb\xa0\ =\xcei\xe2qYJ\x8bC\xca\xa4\xb8\x81\xe2\x8dH\ \xc3\xb9qer\xe7t,\x09\xa3\xf0\x8a\x0da\x8a\x0d\ \x9c*T\xb4&\xaeP\xc3\xd7\xbeG7\xd9JL\x85\ \x18\xb3\x0d\xcc\xd0\x14\x99\x906i\x08\xb3,\x8c\x86\xfd\ 0\xd1z\x22\xf2B\x1c\x9bY\xbcFIa\xbd=\x0e\ \xc2U&\xb6\xd6\x9ax,5\xaeHT3\xb4\x1f\xba\ \x9a\xae\xd4\x05\xd3\x15\x1c\xa6\x01\x01\xce\xa0\xea\x897\xa4\ \x85\xa8\x11a\xc3hsCk\x15\x08\xa2\xb4\xacN\xe5\ \x89X?A\x08\xe6\xd9m&\xbf\x1e\x81\xa9\x01\xd3_\ \xab\xaa\x19\x17\x0c_h\x9c\xbf\xaf\x1a\xb8\xc4\x17)}\ \xac\xed \x9f\xf4\xc3\xe2\x1b\x19\x11\xe2K\x99\x06Tc\ \x0ct\x16>\xa3\xb5\xa2\x14O\x83\x069#\xca{c\ \xaa\xa6\xd6\x10RK\xc0\x09b#Z\xb9\xec[\x94'\ \xc0\xcf\x08\x92Q\x92\xb9\xb1z,\x07\x99\xf2\x1eQX\ \x0dx\xebc\x97N\x1d\xc4\xa6\xe69\x08\x9d\x8d\x88j\ \xe0_\xde\xffa]\x96@\xec\x07a\xdd/,'\xc7\ \x8a\x1e0\xac8\x06\x89(\x1c`\x9fa\x0d\xd6\xf4f\ \xd52\xa6[\xc7\xd4Bj\xe33\x89\x01\x9f\x9dG\xf0\ iYU\x0ekN\x03\x7f\xeb\x8e\x80 \x95\xd3=c\ \x98\xe5`1*NI\xaa8.\x03\x8b\x00\xb9\x0aT\ :.O\x80\x8aY#\xda\xfc\xaf\x17T\xcf\x19%#\ \xaa\x19\xf6\xcb\xb4\x94\xd40YCO\x11\x14j\xc2\xb9\ .\xe9\x0e\xb1!\x0c\x96\xef\xb8\x1d\x8fzlG'\xd6\ \x0b\xc8bu\xab\x99I6\xa6\xcd2\x84\x10(\xb8_\ =A\x1auz`\xc2?N\x0e/C\x03;\xc2!\ bm\x1f%[\xd9O`\x10\xeecl\xc2QC\xf4\ X\xe6d \xf1\x9al$b\xb7\x9b\x84\x95gq:\ \x16\x8f\x8bQ\x19\x0b<;\xf4\x89:\xef\x03,c\x0f\ \x82*N\xa4\x95\x04Fd\x1a6!\x1d\x15\xa31u\ W\xf7x\xbag\xb8\x7fdC\xef\xc6\xfe\x8dcC\x97\ \xd7\xcc\x02\x9b\x87f\x85\xcd\x06\xa2\xb5\xf5g\x19\xf8\x1c\ V\x19\xbe\xf4\xde\xedB/9\x9a\xabH\xab\x93j\x88\ \xb0\xc0f;\x8c\xe5\x90\xdf\x07=0\x97\x96\x13\xca\x1e\ {\xccI\x18\xb1\xbaP\x89irB\x15cI*6\ wg\xe4\x8c\x8c\xb1F\x90Y\xdb\x0bO\xea\xe2G\xad\ \x05\x0aW\xb5\xd9\xe0\xb0\x81)\x0d\x0d\xd4\xfd\xc1\x18\x0f\ \xb3\xa1\xe0w\x8c\x9f\xecuU\xc1\xba\xd6\x98&\x14\xa7\ :8\x0e\xb3\xccV\xc9\xa2\xbc\xa5+g\x80\x05\x9cJ\ %G\xf3\x81\xdf\xc8\xe0\x9b\xaa9>\x10\xab\x99\x0b*\ \xec0\xce\x12\x18\xa7_\x05m]\x22\xe2\x0a\xb4v1\ .Oh\xf9\x0cx\x8a\xca\x9b#\xbc\x14\x83W\xcfn\ \xf4\x9b\x85\x0e\xa6\xe8\xb4\x10?\x9d~v\xc3\xec\xd46\ 0\xef6e\x86\x94V\xa9\x87\xb2\x97\xf5mfw\xf5\ \x94~\x8f\xb2gkr\x90\xd0\x84\x95@%\x9d\x9e\xa9\ \x11/\x07\x16\x17\x91\xb0\x96\xc6H3*OH\x99\xb8\ Fi\xae\xc6\x9b\x9at\xac\x0c\x82\x00\xe9$\xce\x88\x5c\ \xa4W\xe2\xf14I\xcb\xe4E8\xd5\x0c\x22si\xd8\ \xc0[\x08\xf0\x88\xeb\x1a,J\x11\x8e\x97\x9c\x0f\xd8\x8d\ 9L\xc3N\x22\xd5\xb1`\x05\xfd\x22\xc2Q\xf2\x18\x93\ Y\xa1\x9f\xf7>\xc5\x220\x22JR\xc37\x96\xa6\xb0\ p\x9f\xdfR\x90\x7f\xcd\x84u\xbd\xc9\x18v\xab\x10d\ Ju\x1d\xa7\xeb\x9eE\xee\xa5\x81\x91F\xc5\xa4\x82\xb7\ MM)\xc9\xa8;\xec\xe5\x8e\xb0)\x0eB\x84\xcd\x99\ z\xc7B\xdb1<\x14\x8fCn\x83\xe8C\x10\xca%\ j$;\xb0m\x8cFstA\xf8\x04\xc3Y\xc9h\ ~\xc0bsX\x15\x87\x06\xa2\xe2\xb5\xd9\xf2l\xd3\x1a\ \x09\x1b\x8b\xa2\xe4N\xd7\x04\xca\x00v\x17\xc4`\x8bj\ \xb8\x0b3QK\xc7@z\x11q\x8f\xf9p\x8b\xa8\xca\ \xb0\xa3Q/\xedK\xb4 \xa1\x9f\xb0\xd5>\x82\x84\x13\ Y\xba\xdd\x02}:*\xf3M\xc9^\x08\x8e\x02\xb2\xea\ aY\x03l\xa1!N[j\xa6\xc6*w\xec\xa9\x87\ 7\x17\xa9\xbc\xe0\x0b\x93g\xea\x89\x12\x91m\x99\xd7\xad\ \x99\x92#\xbb\xa8\xe8N\xca\xda\xb4\x92\xde%.\x17G\ d\x95\xf8;\xacW\x8b\xces\xae\xcf\xd7\xc8\xb6q\xe0\ \xeb\x96\xb5\x87\x9c\xc9\x1a\x81\xc9\x03\x18)L\x02\x96\x88\ \xcc1\x8d*\x03\xfahdJ\x8ef\xe2\xb2\xc7\xd1Y\ \x92\x05\xbeV\xe8b\xc8\xe3\xc1\x9a\x0e~\xe2\x0e\xf2@\ \xca\xd2\x1c\xdb\x13\xf3\xf6\xd5\x84k\xf3P\xe7rP\x95\ T\xcak\xaa\x1b\xd9\x918N|\x01'\xc8\xc1\xc0\xd7\ \xaa\x17\xc0o\x18\xdb\xf5L*\xd2\xcb\xc5\x10\xe8\xe6\x83\ \x86]\xd2\xc8\xa86l\xe8\xfd\xe6\xc1\xa97\xa6\x11#\ :I*\xadL\xc2\xf1\x01\x95zF\xdc\x13\x8b\xca\x0a\ \xa8zI0\xb8=\xc8\x17\xb3\xda\x0b\x88.\xdb\xc4;\ \xc7\xfb\xd3i%-6ypo\xbds\x10\xff\x97\xd5\ 9\x18\x0c\xbaw.a\x9dM9]L:z\xaa0\ \xb03A\x16/g\xda\xed\x86\x17\x9b\xeaJ\xa6U8\ \x08\xb8\x00\x85\xcf\xf0[;\x03\xbe\x90\x88\xecV\xe2\x0f\ \xd3o0\x9b\xa9k\x8f\x80\xa5\xa7\xa4\xd5\xb0i\xc3\x84\ \xa6Op\xee\xae\xb37\xc4\x92\xb1Dl\x9f\x8cE\x8d\ J\xef\xd0\xb4\xb44\xe3>n\x05!\xbb\x06 5\xa2\ \xea\x19\xd0J7({b\xc9I\xd1\xeb4\xcf%\x0a\ G\x88\xa9%<\xa9\x96n\x049\x11V2^\x92\xa8\ \x03V\xde\xc1\xecr\xec\xd0\xedc\xc8\xadch6m\ a*\xf7\x9a\xb3.\xbe\x16\xe1q\xe4\xa4\x92\x99\x9c\x02\ \xd3B\x96E5%Ed\xa0\xca.\xaf\xad\xb4\x9a\x06\ \x14\xd7\x830\xeaj\x82\xefA\x8b\xa88w\x93\xa9\xb6\ \x83\xe9\x88e\xa0\x9a\x89D\x80\xe6'2q\x0f2\x8f\ \xe71R\x0d\xf1J\xe0PL\xca\x8b\xeb\x85\x06\x86U\ \xdd\x14\xd1\xef\xb2u~\xcd\xb3\x08\x9d\xc3\xf3x\x19t\ \x9d\xb18\x1c\x97%\x15\x90\x05l\x04L\x0aY\x9cP\ \xe2qe\x1ao\xb9~5\x0eg8\xadj\xde'\xe2\ \x8c\xa1\xd1\xe3\xcc\xceu\xf4\x0d\xf9\xf3\x95=\x836\xd2\ /[\x996e\x92\xbd\xdcn\xb3\xf8\x19\xcf\xe7\x14\x04\ \xd0\x9a\xc9\x8a\x98\xf4\xc6\xe7\x90Ht\xf79\xb5\xd9\xcc\ \xc9\xea\x19\x0a2\x94\xb6\x99L\xc7\xd6\x01\x09\xffW\xa7\ 2\xe4\xbe\x9c\xd8\x8d\xee\xe3^a3n=\x0d\x0a\xc8\ 2\xffLe\x8aw\x16\xd4\x10\x5c\xe0p\xe0z\xa6q\ \x18\xaa\x9b1\xbbF\xeb\xec\xb4\xf4\x0c\x9e\x1bU\x851\ \x8a,\xba\xd6\xff\xfd\xe9\xae\xf4\x9an\xde\xb3\x1d\xb3\xdd\ T^C\xcd%\xb1zv\xac\xc9\xd9a\x97\xb8<\xd9\ \x99D\xb7\x82\x9bgZ6\x94E\x91D\xa9r\x07*\ \xee\xc1\xfc\x97s,\xc7\x1e7V\xe1Z\xc1\x98\xc6V\ )\xa6y\x8a\xd8.\x0b?\xb3\xe7av\xb6\x15\xcf\xc3\ \x96\xb3\x01A\xb7\xc8\x80]n\xcf\xa7\xbc8\xd4\x187\ \x91\x10\xbb\x1f6\xd9+\x16\xbb\xb5D\xacR\xf7#\xaf\ \x8593Z\x93f\x96\xf1\x8c\xd4\xf0\xd6\x18\x0a\x11\xe1\ \xa1\x1e\x98\xea;\x13\x9c\xdf\x98P\xc3\x99\xe2\xec\xf9l\ \xa0\x97\x10Z\xe6=\x19\xafi\xac\xf3\xc4N3\xf3\x0c\ 7\xe4=-\x17\x1c\x19[\x98\x17\x8e\x1a-\xb4eo\ \x81\xea\x130\xcf\xd1<6<0\x18\xfe\xe2\xcbq\x94\ K\xb9Q\x9c\xcc\xb7z\xe2'n!\xdf\xd61%1\ w\xe4El\xe4L*\x0a\xe8\xe7l6\x8f\x19T3\ \xefR\x96]\xc2\x9d\x83\x8a\xcb\xb0{H7K<\xd8\ c-\x03\xe7|\xc1j\x02\x9eK\x01G\x8cKU/\ -\xa1\x96\xa8\xc6\xe4\xde\xd1j\x1a\x8c\xe0+\x13O\xbe\ \xd5\x91%N<\xd86\x1d\x84\xa3\xad\xb3Ft\x8e\x8c\ \xc9\x89(\x00\x9ec\xb6\x9c\x86U>\x7f\xb6\x06x[\ \x8e\xa9\x91\xe5\x0b'\xb4\xd3O\xcc\x82\xa0PO\x17m\ ^\xef\x8d\xca\xc9\xa8\xa8\xea\xd7{\xfaq\xc1a\xa7\xee\ \xc3V\xd9X8\x5cX.\x01\xeb\x05\xc3\xb4{\xda\x08\ \xeb\x1e\xa0\x10\x09\x9e\xda1\xe6L\xaa\x19\xc5W\xcc\x18\ \x90\xb8\x95@\xf2\xb2\xe9y\xc0YQI\xa6=G\x80\ \xe6e\xcf]j\xb5\xabHda\x07SUZ\x98\x98\ \xa7\xb6\x8c\x83=`*%\xa3\x0a\x88>\xea\xfeg\x9e\ *\x8dy:\xd3\xb0\x01\xbc\xb4\xf78\x1a%\xc2A\xb2\ \xac6\x0e\xeb\xf8\xd2r\xdcCM\xe8\xb1\xf0\xdd\x01C\ ^\xdb_\xa0d\xf1^n%\x8b0s\xb0\xdcj0\ \xf9\xe81\xefKm\xf9~\xb6g#\x1f\xd9x\xfe\xe8\ \xe92\xfc\xafs\xd6\xaai\xa3\x86\x9cCt\x91q\x0b\ aP\xaf\xeesaw\xbb\x16\xcb\xef\x04c\xf2&$\ \xe2\xe0d\x94C\x8fd\x1d9\x94\xa6W\xef\x04Sd\ \xf4\xb4>\x1d\x17\xb54\x09\xd0V\x10(cSrZ\ \xc6Zn\xd24\x9f\xf1U\x1c3\x9f\xa5=R,.\ \x8d\xc7\xe17\x8d \xccD\x13\x09\xa50\x0c\xc8\xc8\x94\ \xa2\xa88\x00T\x81\xa7\xd2\xa2\x92\x94E%-FH\ \xa0\x82\x8a)\x97\xc0\xf3\xe0\x7f\x0b9q\xc9\xf1[\xd3\ \x970\xa6KJ/1e\x0b\x87\xa3A\xbf\x01\xc9\x83\ \xe8\xaa\xa9\x87\xc8@h\x90m+\xe7\x96\x04sO&\ \xae*%\x12\xc9\xe0\xc3\xe8\x05\xd1\xcb\xfe(\xcb\xdb\xbe\ \xa8\xb7\xa4\x87a\xc2j'D\x11\xce\xba\xaa7aW\ \xd3\x94/}\xc7cI\x10\x1a\xf1\xb8\xa78\xad\xb6H\ g\xa6gY0Z:\x11K\xc6\xd4)OH\xf3u\ \x84R\xc3\x0c\x07\x16\x9a\x8c5\x91\xd9\x8b\xcf\x22A\xa7\ \xc7]\xa5\x199\x8e\xcc\x1b1z\x00\xdf\x14\xfe\x80\xb8\ \xfb\x01\x93\xf1\x10\x975\xf3\x89a\xd7\xfd*\xddw\xef\ !n,\x89^<\x96\xb3]\xf7\xd54ik\xb6\xd8\ \xad\xca\xe1b\xbc\x99W\xc6\xdd\x9d\x93\x98\x12\x0e\x0e\xef\ \x07\xb5\x8b\x7f*]\xae\xbbh\xddzri\x00f\x94\ \xd0\xf2\xfehLs\xebe\x17lW\xb4\x1c\x87\xd99\ \xf7\x12`\xbf\xfb\x85\xa3\xdc\xf3\x83r<\xe5\xfc\xbc\x0f\ k\x88f0\xe6r\xa2\x04:?\xee7\xe577\xc4\ \x96\x98<\xed\xdc\xa7-\xe7\x9e\xd2\x1a\xde\x88\xef\xa5\xb0\ \xc8\xe9b\xf9\xb1\xf8^\xb7\xd1\x12\xf1\xd7\x9b\x89\xc6\x14\ \x1a_H/3\xbbD\xfdz\xf4\xbd\x1d\x92\xa4b\xa8\ y\x0d\xb9\xdcfHv\xfc\xf8a,7\xa9\x1bb\xe4\ 4\xbe\x87\x03df1\xc0\x12\x9b\xfb\xe4\x5c\xb0\xe6\x8d\ \xb2\x17\xbc\x16\xcfM0/C\xec\xe2<\xb7\x90\x0b\x8e\ Y\xec\xfa\x99\x190\xff=\x9f\xd3\xc0\xb2B\x13\xc0\xb7\ z\xc8\xef2\x92\x80\x8b\x85\xc8_\xe3H\x81\xdfg\xc8\ \xef).R\x86\xbf\xc5\xa0J\xaa\x1ee=\xc8T\x0e\ \x9a\xf7\x84\x9f\xe5yp#a=&\x0b\xe3\xbdn~\ \x07\xe8\xf4\xce\xd6\x8e\x93\xd7\xc3\x11`Q\xf4\xf4J\x93\ \xc6G\xdb\xcc\xa6\x9fIf\xaadu\x90\xdftE\x89\ \x5cW\x11d\xa6\x8c\x98\x1cs\xd5!\x13;\x06\xa2\x9f\ \xec\x9e\xd2\x12\xf1\x9e\xee)0\x12C=\xdd\xe3Jt\ \xa6\xa7;\xa5\x87\xec\x98\xf1:\xa9\xb4\xbcGNR\x9d\ \x88I\x14\x12\x833\xa90_\xa1\x1a\x97\xe5T\x90\x8f\ \xe3Y\xab\x11\xb9 c=]\x02\xf5#6A\xefP\ S\xca4hL\x09\x1a-J\xbc\xb7\x195\x05f\x10\ \x01d\x82\x972\x9a\x92\x00\xad \x02\x12e&\x08[\ \x9f\xc2!=d~!2gg\xca\xab\xb0f\x87\x9a\ \xac\x91d\x83:\xf7+\x81\x8d\xee\xc4\x96\x8b\xc9\x81{\ \xc1\x9e\xdd\xe3\xc2\x81\x1b\x05k\x02\x1e\x1fThU\x87\ \xc3\x5c\x06\xdcY8\x1do\xa3<\x9d\x9b\xe3w&G\ \xa9\xb6\x1d\x85Y\xe5\xf6\x03a\xbd\xa7\xd58\x08v\x12\ \xb6\xa2\x17\x87\xf6\x1a\x22\xdaM6\xd5\x91;\x12\x1e\x9d\ E\xbd\xa9\x14\xf5\xce:m\x00\xf3\xb4\x99\xde\x8b5\xcc\ _\xe6\xdc\xc9.\xa4\x98\xb7\x91\xedV\xb1\x80\x86\x14s\ \x88Q]\xe8\xa2\xc5f\x04\xdd\x1e\xf4\x1aI\xa4#a\ \xf3\xcf\x88e3\x8c\x8a\xb8\xeb\xb0UvJ(\x87\x19\ .*\xc0\x1e\xc0\x5c!+%\xc8\xd4\xb1\xb8\x1867\ j\xa0\xfe\xaaFb\x8fQ\x9b\x0e\xbb\xd9Z8<\xa6\ e\xecQ\xc3TFt\x15W\xea\x8ag\x85u\xeaZ\ q\x03s\xdc1\xe8\x5c\xd4\xc6\x00\xb30Mro\xe6\ \x14_\xfam\x90\xdc\xeb\xaf&\x1a\x1d\x0d\x89\x19\xb0x\ \x8a\xda\xd9\x1c%Q\x93\xf7jT\xa0\x90\xc4\xbd\x8cF\ \x82b\xc9\x96\xc4\xb4F\xfc\x87\x8c\xaf\xf2q[\xe3\xbc\ \x8az\x86\x15\xeb\xc1c8\xe2\xd7a*\xe2l\x06I\ \xc0\x92\xb1\xf7\xbb\xddU\xbbK\xb3d\xa5\x97\xb3\xaa\xd9\ \x12\xde\xca\xe7n.\xed\xa3Q\xaaFl\xbaA\xf5X\ \x98\xbbl\xbf\xbd\x8a]\xe2\xadaW[d\xbe\x1d\x10\ K\x98\x08\x88vgX\xabL/\x08Y3\x7f\xde\xf0\ \x9a\xfd\x8e9\xab\xb5\xc6\x18\xe3\x8a\x06\xb2DT&\xfc\ D\xc0\xe0SG\xdd\x1e\xce\xc3n\xc9\xda^>P\x84\ :\x1e\xda\x0d\xc7L\x0b\xf9l\x90\xd4\xfa\x19$\x9bA\ \x9f\xc0}\xfaY\x9f\xc1,\xafl\xb319\x1a8\x02\ \xe6\xb4Du\x5c,U/\x071\x95\x19\x97\x1b\xc5-\ \xb1\x84\xac4\x8a\xb2\x16q9VUv\xa1\xa5\xa6\xe9\ \xdf\x97\x975eg\x13\xf9\xdcM\xa2<2P\xc7X\ 6\x98\x93uDlcS<\xf4\xeb\x86\xb0\x83J\xec\ \x16\xe3j\xf2$3\xac\x15\x0f/\x0e\xc9\x13\xae2?\ H\xceY#\xb7\xea\xbd\xb37\x04}\xeev`\x95]\ \xba\x9ai\xb5\x12\xadz\xa3\xe4\x86\xab*\xbb\x5c\xb4,\ \x088\x07\xcdMN\xea~\x8cl\x15\x82#\xee,2\ ]\x10\x06(\x22\xd5\xc4\xb1\xf2\xa0\xba\xf2\xf7\xa5\xdc\xfe\ \xd41\x9f>-\x85E\xbcS\xa6\x0e\x11\xc6\x87O\xc4\ >\xa9>\xc9M\x80e\x9b\xcf>w\xeby\x89mb\ -\x0b]\xca\x0aO\xe2\xd2j\xed\x81u8\xe9\x5c\xcc\ \xedK\xcf}NJ\x90\x19\xa2\xb06Arc\x08\xda\ \xc40>\xd6\xd6\x8c \xdbQ{Nm\xd4\x9c\x8d[\ j\x19}\xc22\xba\xeb\x1ev\xe55\x01\xablb\x12\ \xdcm\xf01,z1\x91\xba\x0e\xdeh\xb1\x8d\x9a\x99\ {\x1d;\x85iV\xddq\xb2\xb1$\x1c\x8a\xf3B\xcd\ _\x0f\xa6\x87^?\xa1wZ\xda\xe5&\xbdy\x1a\xad\ %g\xdf\x9eF\xcb\x87\xa4\xbcH4\xef\x0c\xf4Q=\ \x03\xddI]vIB\xb7\xefr\x86\x83\xe7\x18\x02\xc7\ X\xf0\x5c\x1e*\x1c\xca\xba\x8e\xe0\x0e\x9d\xd5i\xaf{\ g\xf9,\xe6\x1cg\xbf\xa1\xd0\xacf\xf9\xc1\xa6,\x09\ n\xc0\x11\xf9\x0e\x0a\x0c\x098b~x3\xe1\xd1~\ \xfa\xda\xdfr\xfa9\x87\xb2yv\xcbp=*a\x12\ \xbe\xd1`\xc9\xef\xcb\xd5\x07\xf9\x9bfJ\xe7\x8dD\x9f\ j$\xdf\xf2(\xae\xb6\xcem-\xb1U\xfaX8\x95\ \xfd\x14\xfaf1\x05\x8ch\x9a`\xe74\x81\x85v\x13\ \xd8\xec\xc2\xedG\xf2\x1a\xfe\x04\xd1\x87\xa9\x8d\x90?6\ \x9a\xc8d\xc8\xf5FR\x8b\xcf\x98\x17\xbf\xecB\x12\xf0\ \x82-\x05|\xed\x93V\x5c\x9c\xad\xc3\xa78Got\ \xadt\x9fa&\x95\xd7\xfc*H\xa9\x9d\xe6\x1c\xbf\x87\ \x1fG\x97z\xf9>V9$&[sq\xec\xd4\xff\ %4M\x99e\xd8\x98\xe7\xc0\xe3\xf4\x9e\x91Lh{\ \xd0\xa2S^}\xce!\x0e\x18\xd9\xf5\xae\xe7s1V\ \x5c\x84\x95\x86\xadj\xebK\x19\x962\xaaY\xbd\xc8\xdd\ /\x82\xeb\xa0\x9a]q\xec'\xce\xa6\x91&]5\xbe\ 3\x9f\xdam?\xd2|R\x00\xa9\x9d\xf0Pf\xc3\x9b\ \xf2o8\x8d+^\xc8\xc9\x88\xbb\xb1\xc9\x15\x992\x8d\ \x88a\x16Q\xe6\xe6\xe4\xa0\x15\xc2\x8e\x93\xc3\xc5;9\ \xfc\xd09%\xa7\xb5\x98\xdb\xb8\xd6\x1b\x97\x22\x8f\x0b\x97\ \xec\x14\xc9\x9cD3\x93LFh\x1a\x99\x07\xc0\x0b\x8d\ \xce^\x06>U\xbc\x0c\xf3\xd7\xbc\xdcg\x03\xe5\x88\x15\ \xa6y\xb9\xbb\xb6\xf2_\xd0<6\x8e\x99\x88\xe9F\x0e\ F\xae8el|9=\x963.%\xb9\xb4\xf1\xd3\ \x81\x12s\x87R-X\xc3-m\x9c\x11#4\xce\xd2\ \xfb\x1cZ\x03q\xac\xaa\x845\xb9\xbe\x9c\xc4\xcc\xe0\xcc\ zw\xc3\xb0\xda\x02\x11\xef7\xbb\xbe\xcf\x8a\xbe\xd9 \ '3\xe3\x92\xcb\x09\x5c\x9a5\xb5\xb0\xae\x85\x10\x04\x9a\ \xa7\xb1\x92\x80\x1b\xc5&\xd0\xb0\x94\xa4U\xd8\x9c\xbc\x9e\ \xb7\xe8\ \x93\x03\xaa\xec\x92\x8e=\x12\x8ex\xed%w\xd3k\x5c\ \x06\xfb\xafY\x85#\xb22\xbe\xc6\xddB3\x0e'@\ 4\x0b\xba\xdd\xa2\xe6\x1cg\x8c$\xc4]\xfb\x0c0\x86\ O\x14\x1a\xb4\x8e\x94v\xdd\x88\x9a\xd0\x08\x1aFk`\ \xc4mh\x03\x1a2\xfe\x0e\x22ZW\x0e\xf7\xfd\xa3\xf0\ \x07\xe1M\xe1-rh0\x22\xfe$\xbc\x0d\xff\x9d\x14\ \xdeF\xcc\x91\x0b\xc7\x83\xbar\xbb\xe0\xbbw\xe0\xe9?\ \xb20\xd4|C\x0c\xef\xb5\x0f1\x14I\xfd\xfe\x09P\ KD\xe2\xc9IR\xf9\x00{.\xae\x1b\xdd\xb4\xb1i\ dxMh\xdb\x86!\xdc\x8a\xaa\x9c\xde\x83K\xda*\ $v\x03\x08DS\x82\xe2\xb0\xa2\xaa1\x9c\xaa\xb1E\ \x8agp\xb9\xe5\xe6U-mb\x93\xd8\xd1\xde\xde\xda\ \xae;\x97\xbb\xc4\x8e\x0bW5;D\x0f\x96\xeb\x1bg\ \xc6\x90\xfag\xb3i\x88\x16\x16i$\x05\xb6\xf8j\xbd\ a\xb25z\x98J=QjV\x22#[Q\xf7f\ \x19\xfc\x87x\x9e\xc9\x91\xabg\x8a\xe2j\xd2\xd3Z\xaf\ >;\xf5%\xb7\xd2|n\x0d,\xbe\x96~X\x0f\x8d\ b\xc74\xdf\x0d<`\xbf\x81\xbd\x1a\xec\x04\x96\xe2]\ \xe2\xd6\xb4\x02l\x0b\x17\x1b\x16\x13\xd2\x8c\x18!nm\ \x90\x13\xb0;\x09\xb5\x06\x84\x1b\xae\x18\x18\x91\xd22\xc9\ \xd7\xc2\xc1.QR\x10\x95rC\xa3\xd4\x16\xdb\x8e\x9a\ |w\x0b\x98\xccl\x8e\x18IJ#\xbe\xd4V\xb2#\ \xe9\x08\xa6O\xc0\xbf\x81Ya\xa4\xcd\x1e#a\xa2\ \x91\x8a\x83\x83]\x1b6\xe4\xbd\x867gIqu\xc6\ ec?\xbddd\xa9s\x22\xa7V\xf2<\xcd`\x0b\ \xc4:\xc3Z\x08.e\xa9\xd7s\x0f\xa10i\xb3\x13\ \x8a)d\xca\x0du\x15\x8a\xbf\xf0ob\x05K\x0c5\ \x9f\xf5\x99]\xf4\xf1\xc3\xf6x\x1c\x91q\xd1)\xeck\ \x06\xbd\x17\xbf\x9f,\x85\xd5F\x1c\xba\x85k\xb3i\xec\ \x9d\x0c\xc4\xbb\xcd}\x88\xeb\xd1\x87\xc2c\xc3:\xb7\xc0\ 1~\xb1\x09Ly c\x8c\xc4\xaeFQ\xc2f\x08\ \xfe\x18\xd8\x09\x09\x07S\x22R\x9c\x80\x0c\xe6\xbdi\xc7\ fEx\xbc~\xcc,5Q/j\xc9\xab&:S\ \xc8\xb91\xe2\x1c,\xe4\x9e\x85c\x06\xb3A\xf7&{\ t\x8f\xca\x06\xf7\xc5h&\xf5\xbe\x00qF\xa4\xe2\x04\ \xa0N\x8e\xe6\x8f\x9c\x7f\x98\x15rL\xaa\xd5/\xcct\ \xd14\xa0\x07q[\x8ce>\x00\x94\xbdC\x0fY\xab\ \xa3\x9d\x1e\x92\x8e9#\x89D\xa7\xd3\x0c*L<\xd3\ \x12\x10\xd1\xb8\xacMc\x95%MhV\x0d\x9a\x86\x84\ \x1e\xe1N\xe2\xe7\xc9\xf73\x22\x97\x02*NOA7\ \x02\x93\x90\xae\xa8\xd3-~4\x93N\xc2\x13\x92(\xb6\ \xafje\xde\x17u\x16\xe4y\xc3)\xee\x001\x17,\ u\x0e\xb21\x19\x9c\xa5\xf0\xbf\xd4\x05\x9b8\xb61\x83\ \xb3\xc6t\xa4:E\xf9\x9f6\x8de\xc7\xc58\xe5Z\ \xd8\xc4U\x19Q\x0c\xba\xfae\x09\x88b\x09\xb1\xfb\x99\ \x14\xd7\x83J\xcc\x22t|V\x88\xe9\xde\xd9\xeb\x94u\ !\xd3\x12\x1aR\x82R\x8d%\x07\x02\xa4%\xaeC\x87\ \x09&\xa2\x87r\x11u)\xa2\xa4b2}\xa3\x8aj\ \xc9\xc0\xc8\x1b\x9b\x8f\x9cR\xe6\x0c\x7f\xefJ\xf5\xe5\x10\ \xe2/g\xf48\xaeNA\xaf\xf9\xafg\xbb\xe8\xf8\x0e\ \xeb\x98\x99\x15Mmw\xc9Y\x99\x90\xc1(N\xcbD\ \x0d\xc1\x9eKR\xad\x0f(\x8cd\x9e\xb0\x1a\xb48\x05\ \x8b\x5c\x0a\xe5}\xa0\xe6\x14\x9c\xa1\xd4\x22\xfa:\x886\ \x16\xf1a\xc9\x80\x07\x9d}\x14t\xf4\x10\x88\xe3!\xf8\ \xcd5\xc1H\x08 \xfaz\xd4:Ce\xc4\xca\xe7r\ f\xd6\x18\x84\x9dc\xf4\xda[m\xb3;\xd2i\xef\x94\ !i\x8f\x12\x03\x167::\x14\x1a\x1b\x1a\x05\xbb\x0e\ \x0e\xf7\x14\xb6x\xb1(\x81\xed\x09\x8a\xab\xe1\xe0c%\ \x11W\x92\xd6\xd8\xeeL\x03\x17\x8d\xa9\xbb\xf2V\xff\xfe\ \x7f\xc2\xd7\xff{\x09_6\xcc\xeb\x99YR\x81\xf5\x0c\ P\x0a8\xc8\x22\xa1\xf9+\x04\xa7\xfah\xba\x9b,[\ C3\x99[\xbf\x9e\x83\xc1JI\xcdf\x7f\x22\xf6\xfb\ \xb3Y\xc5\xd8J\x80\x95\x14K\xc5e\xde\x85J\xea\xaf\ M\xc9\xf1\x14u\xed\xe2\xc8/\x82u]\xd3\xc8\x9f\xc9\ \xf9f\x85H^q\xad\x13h\xfd\x9d>fGP\xe2\ \xcdI\x8a\xe2\x9e\xa7!\xc6a\xa6\xafQ\x92\xc6\xce\xa5\ @N\x0f\xb3\xce{v\x80C#u\x97\xa0^\x98W\ \x14\xda!\xf2\xde\xd5]H\xb4^\x90#V\xbcn\x96\ \x1b\xe1\xa0\x07n\xc5Z\x9bd*\xc7iyw\x06l\ \x14B\xd6\xf8\xbc\x18V\xc9xZ\x99\xc6o\xb3\x91\xf7\ \x82\x99\x8c\xdf\x0e\xd8h-(AN\x19\xf5'M\xc7\ \xb4)\xac\x09\xe1\xf7\x83\xe8\x87\x02\xe7\xeea\xbf\xbbH\ o\xf1NM\xae\x07X\x95\xc2\xa3\x96\xc8t\x92\xd4H\ \xafMl\xfa\x9c\xe9\x8cF\x9b!V\xb9\x0ca\xdc\x87\ \xb2[s\x92Ue\x86z\xeb\xc3\x98)\x09\x0ec\xb8\ \xbdt0\xf7i\x8f\xc4C\x9b\x1e~\xd3\xb5\xc2\x8dA\ \xfc\x19\x0e=\x82\x16g\x8c\xe9,\xb2\xbam\x8cKT\ .{\x8czI\xd8\xdd)\xf3\x95\x18ov\xca\x1dh\ ]V\x19\xe4\x5c\x9d6om\xd6\x98\x04+\x82\xccX\ \xb5\xb3\xfe\xe90\xa5*\xc2\x1e\x82$T\x9d\xba\x22\xf8\ \x9b\x9d\x8a5J\x1c\xe0\xa8\xa0\xe0\x1a\xaf\xd6\xca\x85Q\ \x9b\x1bcH\xb81\xe6\xd0a\xd1\x9a\xdfx\x16@\xcc\ $\x809\xae\xc9\xa8 Ub\xfb$\x17\x8a\xcf?M\ \xd2\xa6\xf3\x01\x0e\x99|\x92X\x00\xd1jG\xad\xc4\xbd\ D\xdf3\xc8jf\x09\xd9us\x1c\x03f\xcd\xa7D\ >~\xb8\x11\x87\xc5\xa1\xdc<\xc3\xd5,\xcfP\xcd\x8c\ \xd3r5*\xd9\x9f\x0d\x195\x16i$'Fm\x14\ \x83\xc1 \xc9AetdZ\xf9\xe6\xab3\xed\x18\x09\ 7G.\x15\x90\x02q\xc2M\x0b\x97\x8f\xa8\xe7\xcd\xe6\ \xc6C[b\xf0\xcd\x1ddY\x8b\xe6\x85/\x8ekv\ \x18hD\xd0_\xd9\xc3J\xd8[h\xbcA8_\xd0\ _\x9d2@bT\xcc\xac\xdalu \xac+\xc5\xc6\ DV\xd0w7ae5\x82\x83I'b\xb8\x84\x1f\ \xd6\x80\xc0X\xc7\xfek\xcc\xadA\xf2\xa6\x9d&w\x9a\ \xd7\xd06\x10g\xf7\xfa\xcf\x09\xfe\xf5\x9f\xb9\xc0\xa29\ \x12\xdbf\x8a\x86\xe4\xe6d5\xc1q\x1fa\xe5\xb4\x0c\ \x19U\xa7\x1a\x0d\xdf\x01'yM\x7f@_\x96\xe0T\ s%&\x91\x8c\xe32HN9\x92!!\xed\x89\x84\ \x1c\x8d\x01\xd6A/td0\xb3\xc8\x81\xb4\x15I,\ \x04\xdeB\xac\xedF\xdai-yc\xf0\x80\x98\x1b\xde\ \xbc\xb8?I\x0aFmT\x18m`\x15z\x14\x17\x80\ v\xda\xbe.\xdb\xb1f\x17`y6\x1b\xd5.\xba\xd1\ f\xc8\xd3\xcb\x9c\xb4\xc5w\xfe\x09\x8d6\xddO#S\ \xd0V\x16\xf7\x92)\xf0W\xd7BX1^\x22\x98\xdb\ c\x8b`W\xd0\x9cS*\x19I\x9f`6\xfbq\xb6\ Xk^P\x88\xe8\xfa\x03\x8c\x13\xf3\xef\x1c[AB\ OI\x1d>\xaa\xbfac(\x82\xdfC&\x8eg4\ \x0d(\x04Dhd\x97\x1cu\xa2g?a\x94\xd8\xa3\ \xce\xd5j\xc71\xb4\xaa\xe3\x9a\xae\xe6\xae\x06\xf8Cj\ \x1e\xc96\xe69p\xba\x04u$;\x0b\x14>\xb0\xaf\ }\xed\x84ql\xe9K~\x92r\xb4Q\xcc\xb9\x1b\xc7\ >>kmv\xdbsq\xfa\xa9\x87\xe7\xb8\xa4\x1e:\ *\xbc\xa7\x9et\xa8\x9b\xaeF\xd2\xa1\xedV\xb6\x903\ \xc7o\xa5\x7f\x08T\xba\x0c\xd8\xc3\x8e\xbby\xeay\x8a\ v\xdeR\x81\xbe]VwL\x98\xef\x8c\xcd\xd5\xff\xb8\ { \xfc7y\xeb\x0c\x8e\xb7\xa0V\xa0\x0aV\x92\x04\ v\x12\xb6\x10ET\xef@r\xc4\x9c\x16r_\xb3\xc6\ +H\xcdFYE\x9e5\xe9\x19\x8d!\xb4\xc2X\xe2\ \xd4\x06io,\x91Ip\x97\x14\xb4n\x03y\xa1y\ \x0a\xfb\xfb\xba\xba\xc7\xd3`\xa4\xa9\x09)\x1e\xef\xa9\xe7\ \x88\x12l\xb2\xa8j\xda\xcd4\xd9\x9e\xf6\x964\xb0\xe3\ \xb0\x13zEw\x88vt\xc0\xde{\x9bgi3\xe0\ \xdf4\xb7\xcff\xfc\xbfYb\x9f\xadn\x13f\xa6\xbb\ \xb3\xc8]`\x91\xb5\xdaL\xca\xf9\x18U\xe7\x82A\xd6\ ,\xa1r\x1e\x98\x93\xc8>\xfd\x187[\xc6cs1\ h\xd1\xbf\xccPNs\x90y\x1b\xadWu\x8e\xe0\xdd\ ^\xe3lo\x01\xbb\xa6\x98\xd9\xf4\x99M\xd6\x97\xad\xce\ EmS>H\xde,\xa2\xa2\x13Y/\xb9[h\xb6\ ,\xa3b\x98T\x19\xc7\xf5Tv\xc93N\xf0mJ\ ;\x5c\x96\x899i4\xa2]\x08\x0e\xf08\x1a2c\ Q\xadqH\x0a\x17\xb3\xe2\xb8\x03U\x96+yv\xf9\ nbh\x84\xde[\x1boL\xce\x05Podb\xe5\ m6\xb1,\xad\xbc\xcc\xa6.]\xaa\x1b/\xbe\xb6\x0b\ \xb5\xb6\xd6_\xc1\xa56\xf9\xf4\xb3E#\x99$/\xe9\ \x81\xab\x12\xe9\x9fq:\xe0s-/\xe9\x0dq\xee\x93\ b\xf2>\xde^\xa7\xd9\x06\xf8x4.\x0c\x92E\x8f\ 9\x0e\xc7\xf5\xb2\x1c\xfcR\xbd\xa7\xd3\x80[\x9c<\x8e\ \x96\xbaL\xd9\xe6:\xef\x15\xb5}\xef\xa21\x81\x0bH\ \x92\x94a\x80\xeb\xa5\xbeE0u\xe2\xca$\xbd\x1f6\ \xbe\xc5w[\xac\xe2\xa8\xa3\xb5\xed<]#\xb3\xd2a\ *\xe7Z\xa7b\xd4\xf1\x9f6\x8aH\xdb\xf2\xd6\xfcr\ \xd7\x12f\xee\x9a\xad\xa23\x9b\xc45\x15\xeb\xd5)=\ q\xcd\x06\xdc2\x0b8\xfdV\xc6\xe2%\xe2\x98\xe9\x82\ Q\xfaJf\x19[\xf7\xd4e\xd4\xe5\xe8Pt\xc8\xec\ \xb2e\x8cu,\xa9\xa2\x85x\xa8\xbb\xc4\x00\x97Q\x04\ \xfd\x5c\x98\xb6k\x0e\x92\xed\xbcZ\x01\xebG\xb9S\xa4\ \xcd\xc4\x9d\x07X\xce]\xf2\xebo\x08;AT93\ \x84b\x05\x8f\xa11vM_\xcf.\xe9W8\x82^\ m]\xb5\xa9\x07\x19\xc1.!v\xeb;h\x9c\x90z\ \x9a\xe1Iq\xc4\xf1\xd8\xaa1E\x89\x03\xd1\x10\xa3V\ \x85mw\xc1Y>\x89=\xb6\xe2\xd7\xce/\xe3\x95\x9d\ S\xc5g\xe7x\xf8ih\x04m\x8b\xa1\xdc\xf6\x09\xfa\ \x9b\xd8X\xbdS\x93\x8bm\xc1\xc4\xe7\xbc\xc4\xa0]p\ L\x0e\xf3\xa1\xe8\xe5\xf3\x99W\xe2w\x96\x88)9\x1d\ S\xa2F\xa8\x8a,E\xa68\xc6\x92\xa49YNt\ ?\xa4\x07\xe2\x1b\x03\xe8Sp\xd7X\xea\x99\x82hO\ Vuv\x13c14y\x90\xda\x92,S\xb1\x9eU\ \x91\xed\xb5\x08\xea\x0a|[\x00\x1a7]\x1f\x81\xe5\xc7\ 5\xe0\xf2\xbb&\xc8~\xb4\xd6\xe2\xbfw\xaf>\xb0\x90\ \xf9\xecm\xea\x0fd\x83]b\xa4\xbbZ\x9d\x0b\x03\x96\ \x14\x83@\x9fL+<\xe0\x94A;0\xa7\xe9e\xcc\ \x06w\xea.F\xbb\x89\xad\x22zX\x9dp\xd8\x15\xde\ \x02\x03^JR\xd5i%\x1d\xb5\x87\xd8Am/r\ \xf9^Gb\xc4\x9a\x99\x83\xddu,c\x9c\xa5\xc68\ \x190\x11\x93R\x82\xd5\x03d\x83\xda\x0d\xb9\xccaH\ \xcbRl\x16\xa2\x0f`\xbf\x90\x00V\xebD\xe2[\xe7\ z\x17\xae\x1d\xee\xb2{z\xf6)>\xd9\x10*\xac\xe6\ \xbe\x99Y3\xa4_\xdd\xe4\x12\xa7\xe9*\xc8\xba$\xe1\ f\xbc\xd0\xde\xee\xb1\x03\xe8b\x94d?\xfa^d\xf4\ \xe4NGW\xf4\xcd\xd5\x14\x0d\x83Zh;yZ\xfa\ \xad\x0eg\x5cs\x8aI\xd1pZ\xd9;c\xf7\xfc\xd2\ \x1cr\xe4\xfas#\xce%\x10<\xa8~\x99\xe1q\xb5\ \x92\xa0+Hw\xfa\xabre9\xfeQW\x86\xe3]\ \xde9\xa7\xa8\xb7\xe93w/\xe9}\x0eq\xd3\xec\xa4\ /\xd3\xdci\x93ot\x06\xab{\xbf7c\xd9\x17\xfa\ \xf6\x1c\xcb\xb5P\xba\xc5\x7f\xe6\x84U\x97\xa2\xd9\x9e\xa3\ \xd7\xda\x8a\x10\xcex\xe0\x88cnot\x0f\x96\x94Q\ \xfe\xbd0\x0bf4)\x1a\xc5\xde\xb5\x9c\x97 `\x0f\ Z?YO\xb6\xeaS\xce\x08\x81\xc4\xcew\xb9\x82\xa9\ %!\x22zl\x96\xb5\x12(}\xfd\x137\xc1\xb0\xac\ \x81\x9a\xb3\x01_\x1c\x195P\x1c!\xaf\xb2\x5c\x99\xd3\ \xcc\x9a\x01N\xb11\xe0\xe7\x94\x03ZH\xc6\xc1\xbbM\ \x87\xc2y\xa9\xac0\x90\xe3h\x83\x96\xc48\xa7\xd8\x07\ \x96@\xc29C\xccw\xe7d_R\x9e\xc7\xf2\x85I\ \x16\x94(\x89{\xa4x,\xcay;]\xa7\xb30\x8b\ \x0d\xb0\xbd\xe2,/\xca\x08$\xb6I\xae\xc0N!\xbf\ \xddeb&\xd9p\xa4o\x92\x0e\xa3v\x0f\xd2\xf9o\ \xaf\xdf\xf3\x82\ \x00\x00\x1f\xb9\ \x00\ \x00r\xd1x\x9c\xd5=\x09t\x1c\xc5\x95%kt\x9f\ >0\xbe -c\x84,lI>1\x8a,#\xcb\ \x92%,\xc9\xc2\xf2\x091\xa25S#5\xee\xe9\x1e\ w\xf7\xe809\x09I6\x1b6/\x0b1W\x08\x8b\ C\x0e\x12;\x8f\xf0\x92\xb0\x81\x5c\x10\xae\x84\x90c\xd9\ ,\xc9nH\x16'\x81M\xf2 \x0b\x01\xde\x0b\xf1\xbe\ \xec\xfe:\xba\xbb\xba\xa7\x8f\x11v\xbc\xbbQ\xe4\x9a\xd1\ L\xfd\xff\xeb\xd7\xbf\xebW\xd3\xf1\xb5\xd4\xa2\xa7\xfe\xf3\ \xce\xa3?hX\xf6\xedk\x8e}\xf3\x17\x9fC\x08\x95\ `s\xb4gd+Be?\x867oG\xa8\xf8W\ l,_\xc5\xc6\xab\x0d6\xa6nCh\xa8\x1d\xc6f\ \x94\xf8z\x02\xa1K\xbe\x87\x12?\x82q\xd3\x87P\xe2\ \xc7\x17\xc2\xf8\x10J\xfc\xfaa\x80\xb3\x09%^jC\ \xe8\xd2nT\xd2\xb6\x03\xde\xa7\xd9x\xe9\x13\xa8\xe4F\ \xf8\xfe\xe8\xfbP\xc9\xb1\x12\x84\xb6|\x93\x8d\xd7\xbc\x82\ J\x8e_\x83P\xff\x01T\xf2\xa3'\x11\xea>\x07\x9d\ \x7f\xf1_\xe0\xfdK\xa8\x99\xe0i\xdb\x8e\x9a\x09\xfc\xb6\ \xf7\xa1f\x02\xb7\xed\xeb\xe8b\xf2\xbd5Mh\xfb-\ \x8f!\xb4n3\xea\x9b\xba\x14\xa1\xf5\x7f\xc7\xc6\x9e\xd7\ \xd1\xc0\xedc@\xcf\x08\x1a)\xb9\x00\xe8M\xa3\xbd7\ \x1eE\xa8\xaf\x08\xedS\x8e\xc0\xba\xaef#\xde\x8c\xf6\ \xdd\xf2&\xbc\xbf\x99\x8dXG\xfb\xbf\xf1U\x846\xdf\ \x82n\xfdT=\xacy#\xfa\xce\x17\x81'\xf3\xb3E\ E/>\x83\xd0\xd6\xef\xb0\xf1\xda\x8b\x8a\x16\x1d\xff\x09\ B\x1b_+\x1a{\xe7G\x11Z\xd8T\xa4\x1c\xff\x12\ \xac\xf3\xb6\xa2\x8fdk\x11\xda}^\xd1\xcdo^\x0e\ \xdf{O\xd1\xa9\xb5\xdb\xe0\xf3\xbb\xe6\xcc\xbf\xf9n\x84\ *J\xe7\x8c\x008Ty\xe1\x9cd\xff\x15\x08\xd5^\ 6'W\xb5\x01\xe8|\x95\x8d\x07\xee\x99s4\x09\xf4\ .;4\xe7\x8e7\xb2\x80\xf7\x87sN,\xedB\xe8\ \xa2\xcf\xcf\xf9\x1a\xa1\xab\xed\xd59?\xaf\x01\xfe\x8e\xfd\ j\xce\xab\xab\x00\xcf\x8a\x9f\xcey\xf3\xf1\xc7a\xbf\x8e\ \x17W\x9c\xd4\x10\x1a\xfe\xf7\xe2\xca+\x8a\x10\x1a\xf8h\ q\xcd\x9a\xab\x11\xaa\xfaS\xf1\xb2\xc7\x9b\x11\xea}\xa5\ \xb8\xe3\xfd\xc5@\xdf\x8b\xc5;z\x7f\x0d\xef\x8f\xb2\xf1\ @E\xf1h?\xf0\xbf\xeb\x9e\xe2\x1b\xee\x84y\xcbo\ .\xbe\xe9\x99\x1f\x22te[\xf1C\xcf=\x82P\xcb\ \xc5\xc5\xcf=\x07|\xaf9Y\xfc\xc2\x17\x81\xae\xe6/\ \x16\xbf\xf4\xf7\xefE\xe8\xc2#\x89\x83\xfd\xeb`\x1fW\ &\xf0\x897@\x0e\xfe\x928\xf2%\xc0\xb7\xf7\x11\x18\ \x81\x9eu3\x89\xf7\x96~\x06\xa1\xb7O%n|\xda\ BHy\x22q[\xff7\x80\x9f/\xb3q\xef\x1bl\ L\xaeK\xdcu\xc3\xbf \xd8\x8c\xc4\xb1\x0c\xcco\x18\ K|\x7fI?B\x17\x8c$\x9e\xdd\x07\xeb<\xf0\xc7\ \xc4\xef\x12\xc7a\xfe\xe6\x92\x8a\x0f\xca@\xcf\xdd%\xf3\ \x9f\xde\x8dP\xeb#%m\x9f\x99\x8f\xd0\xca\xda\x925\ \xe4\xfd%\x1fd\xe3\x81d\xc9h\x8b\x04|\xb9\xbcd\ \xf4^\x90\xa7s\x0e\x94(\x1d GkS%\x93K\ \xef\x02~\xdf]r\xe3\x09\xe0s\xdf}%\xc7\xca\x01\ \xbe\xbc\xbc\xe4\x9e;;A\x8eN\xb21=]r\xef\ \xfe\xd7\x80\x9f\x15%_\xf8\xc8\xa3\xc0\x97\x05l\x94\xf7\ \x97\xfc\xe4\xd2+\x11\x1a\x7f\xbd\xb4B\xff\x0a\xc8\xf1d\ \xe9\xd2\xa9o!4\xf1\x8f\xa5\xab\xb7\xc2>\xac\xb9\x92\ \x8d\xf8\xc5\xd2K\xaf\x1f\x02|\x0f\xb0q\xbc\xb4\xb4c\ 3\xc8\xd1\xd8\xbd\xa5\xdb\x9b\x80\xcf\x1b\xee+\x1d\xdc\xb2\ \x02\xa1\xf3n*=\xb8\xe6\x97\x08\xcd\x99S:\xfd\xe4\ \xfd\x08\xad~7\x1b{:Jo\xf9\x8fO\x03\xdc\x1d\ \xa5w\xec r\x92-\xbd\xe3\x8dn\xd0\x8f\x07K\xef\ l\x82\xfd\xb9jm\xe9\xe3+a?\xb7\xaf/}\xfa\ \xd9{@N\xaf(}\xe1m \xffme\xa5/\xac\ \x81q\xe3\x03eU\x1f\x83\xf5\xce5\xcb\x164\x9f\x8f\ P\xe7\xf3e\x8b?\x9e\x83qy\xd9\xc6\x1f\x01?J\ ?Q\xd6\xd1?\x17\xa1E\x93l\xec\xbe\xbf\xec\xaaF\ \xf8|\xf1;\xcbR\xdaC\x08%>\x5c\xf6\x89\x83\xa0\ _W/.\xbbs\x0d\xc8\xcbX[\xd9\x9f\xde\x84u\ ^uWy\xe2\xfb\xaf\x03\xfd\x89\xf2=?\x03>6\ \xddU>\xbe\xfaS\x08U\x7f\xa0\xfc\xfa\x1d\x80g\xe0\ \xd5\xf2\xe3\xbf\xaa\x00\xfd{\x9c\x8d\xfbV\x97\x9fX<\ \x0d\xe3?\x94?\xd4y\x18\xa1%\x7f(\x7f\xf2\x19\xa0\ \x7f\xf5\xcf+.\xae\xbb\x0c\xa1\xb7%*:k\x80\x0f\ ]\xa7*\xba\x86\xe6!$=U\xb1\xef\xa7 \x07\x9b\ \x9f\xaa\xb8\xfa\xc3\xff\x0c\xe3\x82\x8akJA\xde/[\ _1^\x04\x0a#?Z\x91y\x0a\xf4a\xd5]\x15\ \xef:\x01zs\xeeT\xc5\xbbka\xfd\xad\x83\x157\ ?\x03\xeb\xedm\xae\xb8\xa5\x17\xe8^z\xbc\xe2\x96=\ \xbfK_\xaax\xf8\xfb{\x10\xea\xa8a\xe3\xd5\x9f\ \xaexl\xe7\xcd\x80\xe7\xfd\x15\x8f\x8d\xff7\xc8\xcd\x7f\ U\x96\xbd\x0c\xf2\xb6\xf3+\x95\xd5\x1f\x82}\x1bz\xbd\ r\xf9\x95\xfb\x10j\x7f\xb0r\xf4\xa7\xf0\xbe\xf2\x89\xca\ \xd1\xd7N\x81\x1c\x7f\xa9RI\x7f\x0f\xa1\x8b\x9ff\xe3\ \x96?V\x9a\x9d \x0f\x897*?\xf2(\xb1WR\ \xe5\xad\x08\xf4\xa1\xe2\x07\x95\x9f:\x00\xf4]S_y\ \xef\x1d\xbf\x01\xba\x7fV\xf9p\xd3\xc7\x80\xee\x1b\xabV\ }\xae\x01\xe6WV\xf5\x1e\xfe\x03B\xf5s\xab\xf6\x1c\ \x06\xbdZ5\xaf\xea\x1a\x03\xe6\x1f\xac\xae\x1a\xbf\x11\xf4\ vuc\x95v?|\xbeg\xbaj2\xf1\x0a\xe8}\ M\xd5\x91G@\x8eK\xffTu\xdd\x13`_\x9a\x0e\ V}x\xea\xe3\xc0\xdf\x166\xf6\xdcZu\xcfs\xd5\ o\x9f\xac\xfa\xee\x93\xa0\x07\xfb\x1f\xacz\xfe\x18\x8c\ \x1b^a\xe3\xfe\xe9\xaa7\x8f~\x19\xf8~i\xd5\xa9\ \x07/\x01y=U]\xf4\xe2\xf5`\xbf\xd4\xea%\x0f\ \x82\xfc_\xf6\x9e\xea\xa6\xc5`W;o\xa8^\xfb\xf0\ \x08\xc8\xbb\x5c\x8d\xebZ`}:\x1b\xfb~[m\xd6\ \x83\xdev\xed\xa8\xbe\xe50\xe8IU\x17\x1b\x17\xec\xa9\ \xbe\x1d\xc3z\x97\xad\xae\xfe$\x887*\x7f\xac\xfa\x0b\ '\xca\xc0.tT\x7f\xf5\x83\xf0\xf7\xed\x9fd\xe3\xc1\ \x07\xaa\x7f\xf1\x1d\x90\x9f\x8e\xa7\xd9x\xf5o\xaa\x9f_\ \x02zu\xf0P\xf5\xa9\xe7\xff\x16\xe4\xff\xf75\x89G\ \x930\x0e\xd7\x94\x9e|\x1e\xec\xc8\xfd5s\xbb[a\ _\x0e\xd7\xbc\xe3\x0d\x0cr\xbc\xbe\xe6\xf0m\xa0\x1f`\ yn\x7f\x13\xfcRb\x1e\x1bk\xe6\xb0\xb1c\x98\x8d\ }\x1b\xd8\x98z\xb2VR\x96\x83}\xf8}mK\x0a\ \xf4\xe7\xed\x0f\xd4^\xd2\x0f\xfbTr+\x8c`\xe7\xc6\ o\xab\x1d\xbd\xe1$\xf0\x11\xd5N\xdf\x0b\xdf/\xbd\x90\ \x8d\xc9\x89\xda;\x87@\x8e\x16\xbdX\xfb\xd8\xe5\xc0\xf7\ \x8a\xfd\xb5\xff\xf6\x13\x90\xa7\x1dGk_X\x03t5\ .\xad\xfd\xed\xc3\xb7\xc3z\xbf[\xfb\xdaZ\xd0\xcf\x86\ g\xd8\xb8\xed\xbc\xbaJ\xc2\xff\xe4\xcf\xeb6>\x00\xfb\ |\xce}u[\x0c\xe0O\xe3g\xeb\x0e\xfe\x01\xec\xc8\ E\xdb\xd9\xb8\xed\xb9:\xe5>\xb0K\xd7|\xa0\xee\xba\ \xf3\x17\x80\x9e\xfd\xac\xee]sAN\xaa\x8e\xd6]\x7f\ 7\xec\xeb\x82\xcf\xd7\xddy\xeb\xb9\xb0\xae\xeb\xeb>\xbb\ \x17\xf8v\xe5\xa9\xba\xcf=\x00\xfb\xb2\xe4\xe6\xba\x13W\ \x01\xbd\xe7\xbf\x13F\x90\x0b\xa9\xac\xee\xcb+@\x8f\xce\ -gc\xf7\xb6\xba\x7f\xda\x02\xdc\xe9\xffh\xdd\xb3/\ \x00\x9fF\xce\xa9\xfb\xd7b\xd8\xb7\x15Eu\xbf\xbc\x0e\ \xd6\xb1\x7fy\xddk\xc5 \xc7\xe8\x94\x02N\xe8Y\xd8\ \x01t\x13\xea@2\x92\xd0\x042\x10Fi\xb4\x19^\ Y\xf0\x93E&jG\xad\xf0\x93\x85\xbf\x1b\xf0\x0e\xc3\ +\x1d\xa9H\x81\xd7)\x94A-h\x1c^[\xf0\xfd\ \x1c\x1a\x83w\x0a|\xdayZ\xb3;\xe0\xfb2\xea,\ '\x1b\x5cJ\x96\xd1!K\x13\x06No\x9e\xb0\xac\xac\ \xd9\xde\xda\x9a\xc5\x86\x89\xb3\xba\xaa\x98\xa9L\xcb\xb8b\ M\xe4\xc6Z\x14\xbd3\xfa\xe3\x8eV\xb9\x13d\x11U\ \xc9cz\xce\x1a\xcd)\xa3\x96QD\x96~G\xec\xd2\ -\xf8\xbb\x0a\xbf\xe3\xf0\x0d\x99\x12\x9d\x81w\xe1\x8b\xca\ _\xfel!\xf8Y0\xe8g\x81\x85U\ ,G\xcd/G\xfd \xff\xedHrf$\xfa\x87C\ \xbf]M\xb1\x11\xa6\x01\xeb\xdd\x19\x03\xf0\xad\x90\x19\xe7\ \xf3\xc5\x8fs\x86\x13\x8b\xa9\xa3CT%\xc4\x05\xd7\x0e\ \x90\xc5&u\xfd\x90\x82\xcdP\xfc\x8b\xd0 :I\x85\ H\xf7\x8a\x95\x03\xa7zP7p\x8c\xf8\xc4X\x92\xc0\ \x19\xc3\xa0\x17\xc4JX\x1e\xee\x96\x0c\xeb\x86\xd5\x1e2\ \xa9\x12&\x11K9\x8df\x84\x09\x86>=\x13\xba\x97\ \xbb\xa8\xe7\xc2T\x8d\xb9q\x14\x0d\xeb.\x9c\xc6\x86\x11\ \xb1\x9b+\xa8\xf1a\xc6\x06;\x82\x96\x03\x8e\xe5(\xff\ \x15\x0f\xf5\xd5{LlH`\xc94+\x14\xe2F\xb0\ \xa3c\xa08C\xd4\xd3\x8dQ\xca\x18\x5c\x95\xaa2q\ 3\x13\x00w\x92\xc7=\xe4\xbb\xa24\xcd\xeb\x18\xeb\xec\ UT,ir\x06w\xb4\x8eu2L\x8b\xe44x\ \xb5\xd1\x14\x97\xf2Q\xd3Hz\x84\x86!\xddM\xb5U\ \x06\x13\x15\x0c\xbc\x06\x80\x8f(G\x0a\x86\xbb\x04H&\ ?\x9e\xedg\x7fs\x15F\x92\xa4\x9d;\xe0\x1f\x02n\ \x81\x0f\x9c\xe8\x0e\xbb(7\x98\xdd$6\xd3\xc7\x0d\x97\ H\x80\x97\xc5\x9aD\xb9\x10\x03u\x13_\xf81\xeel\ ]\xe3 \xf1X#K\x1d\x86\xc5Mg\x83\xcd\x16\x07\ \xdb\x12`\x89c;\xba\xf5LV\xc5\x16N5\x10\x0e\ E\xa3\xb6y.(x(\xcf\x89\xbe\xbb<\x0f\x87\xd9\ \xccan\xe7\xe2\x97\x12\x8c@&dO\xeb\xc9\x9e\xca\ \x93X\x92\xcdBP\xf4R\xc9\x94(8\xe2\xeb\x0d\x8e\ \x82y~L?!\xfa@\x02\x97k\xe9{\x8dj\xf2\ $\x15-[SZ\x1c\xf4\xe7o\xd3\xb5\x8b,\xc9\x9c\ \xd0\xa7\xc0\xfb\x82\xd3\xcf`\xd3\x04\x15\x015\x91\x15\xad\ %\x9a\x98\xcb\ \xfd6\x1a\xa1{\x91\xf3\xec\xc3a*\xf9lT\xb8\x97\ \x11!\x1b\x80\xdf\xfd\xb6\xad':\xdaBy\xe3\xa5\xdb\ ow\x0cP\xdb\x0e\x08\xdeA8:w\x13\xbd!~\ D\x9a\x90Mi\x0c\x83$\x83c\x81\xa8n\x0c\xa7\xc1\ ;7H\x01\xff\xeb\x02\xaf=\xa3\xe7$3\xc7_L\ \xc9\x9aEBL\x98))\x16S\xbf-\x1d\xad\x1c\x85\ c\xcfB\x19\xfe\xad\x10\x86\x1f\xe3,\x97y\x10\x81\xa9\ \xc9 \xae\xf65*G\x98\x0a(\x89\xd95*e'\ \xa9&\xeb\x88\xa5\x92\xad\xa4\xc0\ \xf948\x1fSJ\x1bz\x860\xd7\x80\x8d1RR\ J1\x0fu\x8c\x19\x9d\xc3=\xbb\x06\xbb\x86z\x86v\ \x0f\x1ch\x98\x05\x87_\x8a\x14\xe90\xfe\x8eQq5\ \x1c\xde\x12ses\xcd\xe63\xe6Z\xec\xcd\x9a4\xc7\ \xac\xcb\xf4\xbb\x0a\x7fm\xf3\x9a\x89\xad\xea\xfbTB\xc7\ \x81\xd7:\xcb4\xf8\xe7A;g\xa2\xaf\x83\xea\xc4\xef\ \xc7\x07b\xf6\xc3\xc0\x19}2x?d\xb2]\xb6M\ U,\x9c1%Ec^\xe6p\x0e\xe70\xd9\x0b\xba\ E\xcb\xbb\xe0\x9b\xb6\xf55\x97\x83.\x99\xd6lv\xa6\ \x91\xefL7\x0f\x8f\xa7\x85\xfc+\xc8\xe7.\x805u\ \xeb\x9a\x86\x934l\x16\xfcn(\x8a\xe5\x1c\x85?N\ I\xb9n\xdd\x01?_\x88Ip\xaa\x10\xe8[\x9d\x00\ P\xa1\x82\x90\xa5v\xc9p\xb6_sl&y\xafP\ \x87\x90\x0a\x09(\x96\x01\xf6\x1e\xd3R2\x90\xabB\xd2\ \xaad\xb0\xa4\xe2\xb4U\x08\x19\xa7\x11\x13\x85\xc2\xbc\xd2\ \x09\xf1X\xe0\x92\xa5f\x96\xc9\xae\xa8\x1bA\x92\x9c\x15\ \x5c{\x9aV\x10\x88v\xe4\x07\x81\xabI\x0c\xa5\x1b\xc6\ L\x83t\x00LiR&!\x0d\x17\xcc\x14N\xcb9\ \xd5b\x12\xd7\x10/K.\x0fL\x1ev\x06\xb3\xb9\x8e\ \xe0\xb4d+W\x90\xf8\xb4\x0b\x11\xbe)\xc4E,\x80\ #\xe1\x9a?\x0drp\xbaY8`\xa4\x05\x0eH\x8a\ $PA\x5c\x08\xe2\x15\xe0\x1b\xaf\xf0\xf8\xbf$U\x0d\ \x8b\x1a|\x16\xa6nqP\xac\xb45}\x9b\xeeqJ\ I]\xb3\x14-\x87]\x87\x14\x8du\x158\x00\x83.\ c-\xf5\xac\xba\xe3\xe1\x0d^\x0e\x224p\xef\xee\xc6\ \x19]\x86\x22\xaf\x053\x9d\x924\x9dl\xa0\x99\xd5\xb5\ T4\xa66\x10\xacY\xe0\x12\xa2\x9a\x85\x81\xd8b\xc2\ \x9a\x8f\xcd\x0aY\x0b\x0d\xad\x02\xc2An\xfb%\xba\x09\ \x16\xb7\xbf\xb6\x87\xf0\x87#\xb6/XK\x03$\x16\xe6\ h\xdc\x87\xb8\xcb\xe9u\x96\xc3\x84\x9f\xad\x06B\x10)\ \x0b\xd6\x1a6\xadA\xa8xJ\x96\xa1\x80\x7f\xa4A\x06\ \xb1\xc9k%\x13\xc3\x1e\xa7\xe2\xa2\xba\xf5>n\x9bB\ \xecf;\x18fx\x93\x8e\xf2\xb8$\xce\xb7I4\x93\ \xcc\xf8\xe28v\xf7\xd2\x18{\x92\xb2\xccuv\x065\ \x12\xc4\xac\xec5a\xa2B\xd5&.\xfa\xbe\xa8{\ \x02'\x0f\xb1\x90@\xc3\xd6\x94n\x1c\x92\x1a\xa5]\xd8\ \xb4d\xc3_\x11\x8e\xf2\x05\xb1\xd9j@a\xcbNN\ \xe3\x5cY>l\x16\xea\xdbG\x114\x13v\xeb\x0d\x0e\ \xfc\x91\xe4\x04N\xe5T\x1c\xa30A\xc4\xbb\x0c\xf4\x02\ \xafs\x81\x13\x06\xbd\x05\xb6\xa4(;0\x85/B\xae\ \x17 \xeb\xd9l\x1c\xd1j`\x85\x00\x0b\x89\xd08W\ @\x9dWu\x99a\x9dD\xbfs\x82\x1f\x95:\x9c\x1c\ \x87\x91\xf2d\x8d\x93\xe8e\xfa\xca\xabRM\x0e\x91\x0a\ \x8d\x5c\xb2\x86>\x0e\x8a\x05!\xfe\x8c4\xa9\xa4\xb0\x0e\ a\xa6\x06yj\x8c\x10\xd7\x83/ag\x08\x04\xe1j\ \xb1\xf6\xd2c\x18\xba!\xad\x8e\xb1\xe1\x22\x80\x16\xf2\xe3\ \x03\xd0\xd2\xd2\x12\x0d\xa0V\x00 \xfa\xb02:=\xce\ \x854\xa1\x9d\xc0\xb2\x1c0\xd0\xae\x1f\xd91ehQ\ \xb2\x0f\xb8\x03\x81\xa2S\x94\x0c\x07\xde\x07\xe9\x01\x13?\ \x92\x82\x1cq\xaa\x19vj\x22\x81I$;+\x0b\x86\ Q\xa7\xde+ME\xd6\x09\xb5\x1d\xe4\xe7\x0e*\x9a\x92\ Q\x8e`\xe2\xb8\xcc\x19\x13\xe2N0w\xf2L\x1c\x8f\ \x07\x01\xee$?\xba\x10\xbdR\xc5\xa0>\xa9h\xe3R\ \x9cUh\xe4\x01\x8eh\x13\x99;g\xfe\x96\x1d\x5c\x08\ p\x87\xc0\xeb\xf4\xea\xb98\x0f7\xcc\xe1\x12\x883\x14\ ~\x8e\xaf\xdd>f\xb1#\xc3,\xe7\x06\xcbi\x15\xc7\ \x1d)\xbcL\xc0\xe8q\x03\x8a\xc5\x84\x02\xac\xe9\xb9\xf1\ \x09H\x950\x96\xcc\xac\x9c\xc4 \xe9\xedq\xd1\xea1\ 4\x10\x9a\xf0\x88N\xd1U}\xf2\xb7\xdf\xd1\xc0\xdc\xf2\ \xf8\x84\xf3v\xba\xe9\x04$\xcf\xc4\x13\x9b\xb9d\x12\xb4\ ,\x9dSc\x14\xeb\xa6\xd3\xa7\x03\xb1c>\xf6\xf98\ \x0f@\x83O\x83Xub\x9c\xc7R6\xdf\xb3\xd4\x1b\ f(v\xb1\xd6\xdc\x17\xb9.iX\xc5\xb2\x09\x0c\x07\ \xe3\x07\x09\x11\x96\xd2\xba\xaa\xeaSD\xcc\xec#&\xb0\ -\x86i\xc5\xe9\xe6\xc6X\x06X@\xf0\xa4o\xd9-\ \x85\xb1?\xc6\xaa,\x88t\xb5\x95\x85z\xd3\x81\x90\x00\ I\xcbK\x17\xbc\xb1\x85\xc15\x8d,\xdf\x89I\x1c\xf4\ \x17\x08\xc1\x0e\xe4\x03te<\xea v\x81F\x22q\ 1l0]\x93\x14#\x93\x11l\xa7/\x81\xf5D\xf8\ \xbf9\x91\xb3,\xb2\xad$\x0f\x8e\xf3q\xc1\xf8X\xce\ w\xd2\xf1i,\x1fL\x09\x95\xab \xbe\xb0\xd0s\x84\ [N\xdb2\xd8r\xeb\xea\xdf*/\xbd\x961C\xa8\ e!?a\x96'\x82\xfc\xbf\xb8\x80\x8b\xe3\x16P0\ \xfd\xef\x08\xa1\xdf\x8d\xef\xf3\x83[\x9bvQ\xbb\xdc\xbf\ \x09\xa1\xb2\x9bb\x09\xf4\x1a\xd8\x09\x84%\x99\xc6\xc6\xae\ \xf2\xa91\x0ek\x1e\xcdP\xb3<\xad\xf3\x86\x05\xb5\xdc\ \xbc\xec\x93\x15+68\xe8\xa41\xb6L\x13\x0e\xb1\xa4\ T\x98\x05t-^#G\x0a\x11R.\x83C\xacZ\ \x9c=\xdb\x9bg\x8eY\x10\x90\x1f\xe4\x89\xa4\xfak[\ ~\xb3\xecrf\x85hx\x9d\xda\x94\x13\xd8Q\x9b\x1b\ \xc3\xaf\xa1\x10\x8f\x11d\x82g\xe31\x9a\xcf\x94O\xe8\ <-\x97\xd6\x1e\xcc\xab\xb7\xb6\x9da\xbc:]\xef\x1a\ \xc1+gS\x0b\xe2U\x13H\x5c\x8e\xca\x98k\xd6\xfd\ 9\xb9\xea\x91\xa0\xb9\x1c5\x18\x1a\xf1\x8c,\x14\x83D\ \x83\x14\xb7\xa6\xe5\xcb\x88\x04KV{\x05)Q\xd9\x09\ Q\x8c\xb1Z\xe1\x03\x1bxZ\xea\xa6[\x0ct\xd29\ \x1f\x8d\x0b\x86m\xd0\xba?\xe1\xd8E\x8e\x80bm\xca\ ZjS\xbc\xe6R\xf3\x19L\xd78zQ\x9c\xb3\xcb\ \xb6\x8ad;\xa9\xa3\x8e\xc5\xd7D\xf1\x89i\xac\x11S\ \x09\x987\xdb\xa4\xbf\x8fVE'=\x9d4\xc1uu\ \x96\x02\xa8t\xe1vv$;\xf5x7\x07^2\x82\ \xb5\x94db\x959\x00[pI\xfbS|>(\x92\ \x224\x94Q\x90q\xf37\xd1\x5cG<=fZ9\ \xe9\x08\xbd&\x18QV\x90$\x0eXu\xe5i\x84\x9c\ \x17\x13\x04\xd2>\x8a!n{\x82\x10Ff\x90\x14A\ A\x19\xa4FkR*/\x8b\x85\x1f\xa8h\xbe\xecL\ C\xf9\xe5WE\x90Q\x83\xbb|\x0b\x89'\xe7B\xe0\ 1\xa2\x83\x9bc\xc7\x1a\xbc\xeaf\xf1\xea\xac\x01\xdb)\ z\xf2\x18u[\x08\x09\xb6A\x05I\xe3\xec\xa1\x85o\ aW\xc9\x81\xeeXL@p9\xaf\x91\x88\xd6\xd6*\ \xe8 \xc8og\xdd5.&\xc6\xc8s\x8e\xc3}d\ \xcc\x8a:\x04J0_\x91\x88A<\xd8\xf2\xd3\xe3Z\ \xf9\x0bFN\xd7\xbc7\x16f\xde\xdd\x9c|\xb7m\xd5\ \xa3\xe16\x03\xaf\x0bs\x1c./+\x1d\xd81\xcc[\ VP\xdc[Up\x5cK\x8a\xb6\xbd \xe0\x19\x1a\xa0\ \x8c;\xaa\xe0\xc6\xe5\x0aU\x01B\xb4\xdd\xe3\xea\xe2Y\ \x94Ng\xb2\x98\x94?h\x0e\xa5h`6U5\xd6\ \x85,\x02\xa4i~\xa8\xac\xf2\xca\x8e\x17pEZ\xd1\ \x14s\x22\x16R\x8b\xa7|\xc6\xc2\xbe\x0c/G)\xdc\ \xe3M\x07\xd4\x81\xaa3\xb9i\x221\x98\xd4\xb8\xe2\xdc\ \x15)\xaa\xb0\x10\x84\xb5'd\x84\x02\xe3Z\xd4\x86\xf2\ *\xef\xae\x8a\xd0b2\xaf3\x91Rz\x9b]K\x8f\ S\xfa\xc0\xd3tw\x7f\x85\xe3l\xda\xc6!@\x12\xb3\ \x80\xbc\x82\xb1\xcb\xe0F\xbb~\x19>\xbf\x1e\xe6\xf7\xd0\ b\x91\x9f}%\x8d=)\xc5\x8a\x9e\xd9\x85\x82\x1a\xc0\ J\x1aI\xebW\xf8\xccj:s\x86\xa6\x1b\xb20\xab\ \x0f\xab\xd9\xe8YN\xc0\xe3\xf6\xbf6\xd2\xc8&|Z\ 9\xb5\x01X\xb0\xa6%\x8d{\x15<\x15>\xa3/\xe0\ \x000\xac\x03\xd0\x96G\x99.\x86v\x1b\x22)\xb0G\ \xad+\x97Rt\xda\x96\x00A+95l\x97\xec\xb3\ \xc8\xd9\x92a\xbb\xeb\x08%\x08$\x83\x9c\x1f\x0e2\x9d\ (\x8c\x84\xa0\xa3\xd0 \xc0\xeeQ\xe8[_T8o\ \xdd\xda|\x18o\xf7\xf2Z|\xc1\xbc\x9d\x97\x7fg\xc0\ \x15\x0fz; J\x0e\xbbhP\xe0\x95\xf9\xd2.\x08\ W'#\xe4p\x9b\xaf\xf3<\xc7Kt\xdeC>\xb7\ \x1f*\xb0\x9bM8)M\xa5\xa4!<\xe5\xb6\xac\xd9\ -\xc9\xc1\xd8Wq#A\xaai\xee\x89HH\xfa\xec\ &$]\xa4\xf7\xcd\xb1C\xe1\xe0I\x83q\x96\x9a\xf9\ \xa4\xa7\x18V\xd2\x95\xcd\xb2:F\xd8>t\xfb\x13A\ 7\xd3\xe8\xe69f\xf8\xf44\xda\xeai (\xb4\xb5\ &\xacq&\xaeIQ\xea\x86\xd4\xcf\xa0\xe1\x90\xd3\xcd\ \xe2\xc4#\xa4g%\x9c\xd4\x05\xb47\xc5\x97\xa0\x09k\ \x15\xce\x06\xa3\x00\xf8\x9a[\x5cg!t\xb3D\xc9`\ 7?K\xb1%PFb\x7f\xe8\xec\xb8\xb1\xb8\xdb\xc0\ \xb0E\x92\x06b\xe8p\xe1p\xb45\xae\x0fuV\xe5\ \xf1\xbej \xef\x080?\xb0\xac\xe4\xa6\xc4\x0d=B\ \xb6\xdbA\xbc\xdcQ\xa11\xdd\xb2\xf4\x8c\xa4\xa7+i\ \xccI6\x94E\x99Q\xbb\x12\xd0\x0f$\x5c\x0c*\xc0\ \x83Ws\xff\xebm\xcdOD;\xdf&\xb0\xa4:\x95\ {{y\xfeX\xcb\xef\xce\xcb{ 1\xdc\xadd\x22\ 6\xa7\xd2\x0d\xb4\x5c\x0d\xee\xb1\xa3\xa7\xb09#\x1c\xa9\ H\xfbt\x14\xed\xb5!aC\x22:jXQHK\ \xbe\x1b\xfb\xd0\xee\xf3!9z\xbd\xf9QH\x22:\x08\ \x91h,AlK\x92\x97oRT\xa8^\xa6\xa7\x97\ \x96\xe0F\xaa\x06\x94\x8cbI#Y\x1c\xb7\xf9\x11\xf7\ K\x82'\xa9`\xf6Hs\xb7W\x8d\x89\x00\xd82\x1e\ n\xfa\x82+\x13v\xb7g\x92\x9e\x16\x91\xfdt\x12^\ \xb7\xc7j\x90tS%s\x90\xdcj\x96:\xe3\xd6-\ x\x06\x0c\xa2N\xce\xc5u\x0dK\x86\x1e\x11^i \ 19z#\xe9,P/\xd4\xdd/\x8e\xa6?\x97-\ \x88\xfaz\xda\x95-\x07D\x00\x95\xe405.\x0aX\ \x81\x86i\xachz\xea.\xa1\xfewX\xce\x99\xee\xad\ \xab(34L\xcd\x81\xdd\xc9I[\xff='q\xa4\ kK\x1e\x8f\xa0\xec\xect\xd3\x07\xe3^D/\x0e\xe5\ \xdf\x04\x12\xfc\xdb\xb0A\xae\x02a-\x89#\xfc[=\ \xbf\x80\xe4\x1c\x13\xb8\xd6o\x98W\xf8\xc3'/\xe4\x93\ \xb34\xdbf\xaa\x8d=\xe7\x99\x06\xe9|\x85\x84;\x02\ He@\x8aR\x12\x93\xa1,\xf7E1\x01-\xbfn\ \xf1y\x17kjt{h\xc3\xe1\xbe\xd5\x0b\x04u\xfc\ \x02\x81\xacA\xceoFah\xf2\x9c\x1c\x15\x22\xd1\x00\ \x9b\x1e\x0e\xc5\x8b\xf4\xb0\xafd\xd8Jm\xae\xd8\x84\xc2\ \xcc\xbf\xc2\xeb\xc9b\x1f\x7ft\x7f\xc8\x12RZl\xa5\ \x1d*Bw\x88\xa4@\xce\x1ee\xf8\xbbh-f\xdc\ \x83\x1c\xf3\xab\x05Y\xd1\xf3\x8cL\xe4,\xba\xc0(\xb3\ /\xdc\xf4r\xcd>\xb9\xda\x15%\xa0\x85W\x09\x83!\ ,\xcb\x8b\x1a\xdc\x8a\xb9`\xc8h\xafWL\xac\xb0\x82\ \x0a\x97Xl\x8f\x12\xdbz\x06\xb2\x10\xa9\xad\xf7\x00N\ yj\xdb\x04H\x9c7u\xf2J75c\xa9i\xf8\ \xb4\xc6\xbcbe\xb4\x10\xd7\xd0\xb2d\xbc\x08\xaf\xc8\x83\ \x1b\xc5\xa3:^\xec\x8cg\xd1&\x1f\xdcVJ\xa3p\ ;8v\x05\x0b\x08\xaeVvu\xb8\xa0\x85l\x8d\xef\ \x9bs\xd9\xb3\xb7\x91\xe6\xe3\xbd\xb47.\xda\xee\xc5@\ uky{\x0b\x02Y\xea+\xf5$\xa2+=\x7f\x95\ \xde\xe1y\xf6ar^\x8d\xd1\x8b\xcc\xad\xbe\xbe\xf5\xc6\ \xd90\x5c\xffOZI\xc2\xc8?S\x87\xb2a\xf0\xcf\ @\xf5>\x0c\xf4\x19+\xb4\xd4:\x08fSf\x09\x9a\ \xb5\xde\x17\x07\xb8\xdd\x09\x85\x90\xb6\xc0\x09\xe3\xfa\xb5\xb4\ ndh\xafX\x18\xaa\xa6\x80\xa7\x1fD\x17\xb2\xdc>\ `\xe1\x0a{\x10\xe8\x85\x817o\xdc\xb3\xa2*7\xd7\ n\x0f\x83\xb1v\xd6\xf7k\x5c\xf8\x0b\x02\xae\xd4\x84\x22\ j\x86\x5c\xf5\xcf\xc2a\x97W\xb7\xc4\xdbI.\x82s\ \x87r\x991\x10\x02=m\xeb\x0ba\x07;\xe0\x0a\xc2\ Q-\xa6\x12\xae(\xd0\x94!l\xce\xd9\x09\xf2\x830\ \xd7\xfbCE\xd7=\xb3\x900|\x99B\xe0\x15\x12d\ \x05\xeb\x8a\xa7j\xedf\x02v\xa1:|\xa2\xc7\xbb\x0a\ \xd1\x19\xf8\xcc\xb0I\xabfq\xb1\xc7\xa5\xa5\xces\x9b\ '\x94\xa4\xa2\xf2\xd0\xab\x9d\xde\xae\x87\x90\xdb\x0f(\xe2\ \xda\xa5s\x99\xd0\x0f\xdb\x7f\xa2NR\xca\x1c?\x1cc\ \xa9\xb8\xce\xaf\xb0\xd8]\x98vJ\xcc\xae\xb1h\x8e`\ \xf9M\xa1\xf7\xc6Fh\xa7F\xd0\xe5D\x87s\xe2%\ \xd1\xfcF\x0e\xde]\xeb\xbdAH.\x1b\xdaS\xe8\xc9\ }\x92>\xd3\x04\xfc\x94|\x08K8\x9d&\x9d\xa1\xf4\ \xb27q\xe7\x04\x22\xf1^.P\xcf\xcd\xa7\xb9&\xa6\ m\x9d>\xebo\xe5\xb1Q<\xee`lb\xd99a\ \x1c\xbbr-\xb6\x8b3m\xf6^x6\xb9\xff\xdd\xc3\ \xbf\xa9#v\xd9<\xff\x16\xdc\xa8\xff\xa6\xa69\x01\x19\ A\x12\x14\xc5\xb9\x96\x0c\xb6!\xf2V\xf2\x1e\xf0\xa12\ D4\x13\xc4\x10i8\xff\x0ef\xc8\xc2\x9b\x0b\x97E\ 7\xa8\xc9\xdf\xb8\x86p\x14E\x03\xb0^\xf2x\xaa\x0c\ \x00\xea\xa4\xaf1\xe5U+\xe72)\xfd\xcf\xd0\xd7Y\ \xf8Wr\xba#\x93<\x15\xb4/\x83\xb3\xccM\xcb\xb3\ \xcf\xac\xcb\xd0}\xe8\x09\x8btX\xb2\xe4^\x1bq\x8f\ nL\xfa\xcdI\x1e\x1a\x92\xbf_\x0e1\xd2N\xb0\xfc\ \xab\x81\x15\xc3\xa8\x1b(\xdb\x0fI\xec\x80\xf3\xbe\x85\x96\ \x0fe\xaa6\x06W\xa3,U/\xbbA\xdf\xa4G\x5c\ k 0]\x0bn\x9b\xde\x15A\x1b\xd1\x06\xf8Y\x07\ \xbf-\x94\xa5A7\x22\xdb\xe9\xf76\xc1\xbc5\x88\x1d\ \x91e\x1d\x15w\xf9\xd2\xea\xf2\xcf\xd9\x84\xa3\x1d\x13V\ F\xed\xec\x98\xc0r\xaa\x15tDO\xcdtvd;\ %\xfa@\xa64D<\x12\xad\x05h\xcc7\x81\xdcH\ \x97\x8f\xec\x1cZ\xbdk\xb8\xbbu\xff\xe0\x00\x19%\x13\ \x1b\x93\xf0\x19\xc4y\xa4b\x0eBf\xe9-\xd2\xb0n\ \x9a\xca\x98\x8a\xa5\xbd\xb2\x9a#\x0f\xb8Y\xd3\xb6v\xbd\ \xb4Z\xda\xb8a\xc3\xba\x0d\xd26v'\xb3]\xda\xb8\ \xa9m\x8d\xd4\xd1\x9a%\xf2EQ\xb7Rr\x88\x18\xd4\ \xd8b\xe0J\xd9\xb5\xb3\x12\x81^'\xe2a\xdb\xd9\x07\ ?\xed\xb0!\x83\xb3b\xd0\xfa`\x06\xf5\xd2PH\xea\ \xebk\x1f\x1c,\x98\xfe\x87fE?;\xefI\xf3\xae\ H&\x88a\xc2\xeb\x8d^\xedb\xa9\x12\x16\xdd\xd1\x82\ +\x11D\xf2i\xcb\xac\xf8\xb13\x98\x1f#\xd8\x11\x12\ \x08`\xd8\xedB%-t\xeb\xc8\x8a\x8aS-\x85\xb2\ \xaah\xe2\x0c\xb1\xca\xf2\x04|)'\xc8\xb3[u\xed\ \x1e\x0f\xff\xbdJ\x89\xb3\xd2\x08dnK\x88qs\x9d\ \x9b\xffNg\xd86\xb0Mb\xb4\xe6[\x94>\x08+\ v\x03&6s\xd2IY\xec\x22\x9e\x98\xa8\xe6\x84\xea\ \xc2\x06\xb0\x04\xebf\xb9\xb1'\xc27\x96\x9c\x86\xf1\x9e\ \x16\xa2\xe6S\xb2b\x81\x13\xb1\xa6\x88G10\xdd\xec\ \x167\x12\xcc\xb0H\x90=\x1d\x80~>#\x09\xedc\ \xd2\xd4\x04L\xa30\xa5\xbe\xdd\xbb\x87%\xdb\x80\x90\xaf\ \xe6\x0c\x0d\xbe!K\xd2\x86\xb6u<\xab6q\xc1R\ \x83>\xfb\xbf,5-\xb3\xb4\xbe\x97E\xf0\x1c\x92\x0c\ \xf2\x94BE\xb3Y\xdfR\xb8\xa1\xfc\xe5\xac\xf8\xd0\x13\ \xe0\x89$\xc1_\xba-\xc6\xcc\x1f&yt\xf32O\ \x96X\x0f\x05+\x9e\xa4)7\xdc\x0c\xd0\xe5TP\x7f\ \x95\xdb2\xcfOSf)\xb3W\x05\xf3\x8f\x06?i\ \x0cq\xbe\x81A\x1cgh\x8d\x86\xde\xf5\x05n\xd2v\ -\xfe\x0c\x0b\xd2\x09CK\xc0\x85\x8b\xd8c\xb3d\xad\ \xca\xc3\xba\xe84\x904\xf3\xfc\xd9\xd3\xccc\x22\xef\xdd\ '\x99\x97\xf70\xf2\xf6\xec\xfaM\xca\xec\x18\x98\x0cf\ \xe0\x1e\x93\xb0&\x03.Z\xc9\xaaX\xccG\xe9]\xaa\ \x09\xacf%\x93\x9cl\x92c3\xcaP[\xbf\x0bg\ $\xeb\xa3\xf1\x17\xe7i\x1f\x0d+0\x04\xcc)\xec9\ \x88\xf9\xf3\x0a\xee3\x09\x98[\xeb}\x86\xa2\x80\x91\xe6\ \x0f!\xb3\xfaB\x9e\xbch\xc0\x96F=\xdb\xc2\x16\x92\ \xfc\x0bm\x8b\xf93\x18y)\x90?\xd5\x22+[\x13\ !$4R\xc5fj\x9c\x112\xd3$\xcf\xdc\xfc\x8f\ 1\xad\xed\xd6U\x88\xef\xcc\xe4\x04\xce\xf0d4\x00\xea\ \xec\xfaP\x02\xc9\x0a\x8a\x81\xf38!4\x86\xb0\xa5\x86\ \xc1;C5\xa7\xc0\xa5\xce\xa2\xb9#`\xfe\xe9t,\ \x04\x80[H\xabWYd?\x09 \xed{Fii\ \xaf\xee<\xd70\x7f\xf6{\x03/q\x17\xd0\xf3O\x09\ Vy\x8a\xca\x9a\xe6\x88\x0c\xb1*\xa4\xf7\xa6\xf6\x18M\ N\xc5\xdab\xd0\x0d\xc9\x95\xf4\xe8\x8d\xde\x1d`\x15y\ \x12(&U\x1dR\xcf\xb1\x9ce\xe9\x1a\xbcQ\x92\x87\ Z\x0c\xd5\xc8~\xe7\xd0O\x14\xe0\xb2\xfe\xa4S1\ \x0b\x98\xb6\x09r\xd4A'\xad\xf6^/\xf3;&\xe1\ \x80_\xc8X\xe7\xed\xc08k\x1f\x1a\xcaS\xf2!\xdc\ \x10\x82\xeb7\xbe\x02`\x06\x82\xc0iZW\x14\x03\x0a\ \xb7\xdf\xcf\x14\x1c.\x11\xb7,me`\x96\xbe\x9d\xd7\ h\x98\x871)\x85*\xf5>M\x90p\xba\xe1#\xd9\ \xbfIj\xe2\xdc\xf3\x14\x82c\x92\xdf\xafb\x95\x19E\ \x08oE\xec\xfe\xf3\x1cV\x13we\xe4\x08ZI}\ \x88\x80\xdf\xe1\xcb\xc4\xa0<\xaddr\x19!\x03 O\ C3\xd9\x13s\xb3\xc4\x0d\xb7w\x8c\x19\xe0`\xcc\x8c\ \xac\xaa\x9dM\xfdii\xcc\xd0\xa7\xc8\xd38ML\xa2\ J\xc7\xd5\xb0\xc7*\xb0\xd9\x90_\xc94\x0eZ\xd9\xd1\ \xca&\x86p\xbb\xd9\xd1\x8c\x983`AX\xe6\x0f\xe9\ \x96\x92V\x92\xec\xee\xb35\x93\x0d7y\xcb\xa8\x1e\xfb\ \xc1\xf9M_\x8d\x080\xcc\xa4\x9c\xe9\xc2p\xa0}\x0d\ B\xe1\xcf`\x84'\xef\x0ey\xd3\xb6P\xc0qO\x91\ \x0d2\xa0\xb3hK\x09\x98?\xfb\xbe\x90@\xff0L\ \xcd\x9e\xddrcQ\x0fc_\x86q\x9b\x1f\xc5G4\ \xd2\xbb\xa0\xa4\xaf\xf1\x10\x9e\x09\x83\x1b\xd8\xf9vE\x8e\ u\xbe\x05|\x7fU\xc0\xbe\xe4\xd7\x9cX\xa5H\xd8\x1d\ Ra\x11J0\xa1\xbb\xd3\x0e\xde\xfeZ\xba\xb4\x9cc\ \xe1\x83ST\x99\xf7M\xe4\x9f\xfc/\xde\x95\xd3\xc42\ *( \xad\xd0\xe5\xb2\xa1<\xe8\xb2\xeb\x99B\x81\x9d\ W\x1d#\xe2>\xbb\x06\xea\xf2\xbc\xc2\x9e\x15\xc6\xee\x98\ \x96\x89@y\x15\x1f\xa7+\xf8I2'\x94\x8f\xb1=\ \x04\x81\x98zx*\xa4z0\x95\x8dX3j8\xaa\ M\xbe\xe3\xa8\xa0<\xb3)/\xc7\x5c)\x1a\xb1\xdd<\ Kl\xe29\xe2\xcaPd[C\xc3$\x95\x978\xff\ \xecD\x8b)!Z\x0c:\xe1_ \x9e\xc6\xc7\x04Q\ \xf5\x10\xee\x11\xd9\xcb\xf1\xa6<\xe1$f\xaf\xae\xe6\x22\ \x22\xcd\x15\x01\xcfj\xf7\xf7l\x0b\xd1+\x7fB;\xed\ \x9d`0+-<\xed}\x0e\x7f\x01\xd9\x83\x7f\xd2Y\ x\x84\xba\x1f\xe5\x0a\x1ew\xe6\xf7:\x0aM\xeenk\ \xc46\xccZ\x19\xa5.5p\x05K\x00\x9c\x82\x0c\x07\ \x14\x8b\xcf\xe8S\xd0\x1d \xc5\xfd\xc3\xedAsk=\ \x8f\x02tWSB:T\xcd\xe0\x19\x91^\xc2\xff\xf5\ \xb3s\x22\x99Od\xdc\xe3\xcd\xfd3\xa2\x9fm\xee\xff\ \xb6D\xbb%\x0a\xd9\xbd\xca\x91\xc8\xbd;\xebw\x91\x96\ \xd2\x00l\x94=\xd7j4\xe0\xa4\xf3\xac^K:\x0d\ j\xfeJ\xf7\x89b)z\xab\xff\x01\x08\xe1\xaa\xf3\xfc\ \x19\xcb~.\xbd\xff\x01k\xfe3\x8d\xbc\x1dw\xc3Q\ \xbe\xc9\xf4\x9c\xa2=\x12\xecz y,\xa0\xff-\xff\ 2H\x86:\x07\xc5\xe3\x0c\xea{\xb1\x95\x9c\x90\x06q\ J\x91\xa5\x01~\x09&\x14W\x9f\x80\xcby\xd4\x16\x0f\ G\x82ZT\x5ca\xb2q\xcb\xbe\xc7\x05,\xa4\xf8\x89\ \xf40\x12H\x9b\x0a\x7f^@(\x15[\xa9\xc0$i\ :4\x86\xd8\xc9\xab\xe6K\x8a\x82R\xa2IH\xe3T\ \xe4}h\xe5\xdbx\xeb\x11='\x85\x84eRV\x95\ \x94\x90\xc7D\x12\xd2\x1c`(\xdc\x0e\xdd\xb4\xb8\xdbB\ \xa3 3\x192\xdf\xdcH\x04\xb3k\xdd\xcbk\xb3\x9b\ \xb5(\x0a\xca%4\x042}\x8a\x11\xc5\xbf!^\xa2\ \xa8\xe8\x7f\x00\xdfN\x0e\xd9\ \x00\x00$\xa0\ \x00\ \x00\x7f*x\x9c\xcd}\x09x\x1b\xc7y\xe8H\x5c\x82\ \xf7!\x8a\x96%Y\x96\x96\x94B\x1d\x96H\x10\x22E\ \x0a\x02A\x91\x90(R<-\xca\x92b\xd9\xa6\x96\xc0\ \x92\x84\x05`!`!\x8av\xd3\xcfMS7i\xfc\ \xb5i\x1c\xdb\xb1\x9f\xd3\xd6N\xdc\x1cV\x9e\x9b\xa3~\ I\xdc\xc3i\x92\xda/w\x1c7\xcd\xe1&NS7\ \xef5i\xdd\xbe$}q\xdd\xbc\xbc\x7f\xfe\x99\xdd\x9d\ \x05\xf6\x00-+_MS\x03\x02;\xff\xcc\xfc\xf7\xff\ \xcf?\x83\xc8'\x12\x1b?\xff\xf2\xc3\xf7}\xa9m\xcb\ _\x9e{\xe4\xcf\xff\xee\xfd\x84\x90\xb5\xb9\xc20!\xd5\ /\x12Ry\x88\x10i\x03k\xeb.\xb3v\xa9\x83\xb5\ \xd9>B\xa6\xc2\x84hw\x10\xe9)\x89\x90\xe8\x0f\x88\ \xf4\x15h\x07\xdfO\xa4\xaf\xbe\x01\xdao\x13\xe9[\xef\ \xa4f\x86H?x\x1a\xda\x97\x89\xf4\xe3 !\x87\ \xc7Iep\x9c\x90\xda,k\x87v\x92\xca{\xa0_\ \x12\xdaG*\x099\xf6>\xd6\x9e\x7f\x1b\xa9|\xfc\x1c\ !7n'\x95_y\x86\x90\xe3?'[o\xf8\x7f\ \xf0\xf7\xc7\xc9\x1e:^_\x17\xd9C\xc7\xe9+\x90=\ \x14n\xdf\x07\xc9\x0d\xf4\xb9\xfe-$t\xf1_\x08Q\ ~D\x8e\xdd\xffYB\xc2\xdb\xc8\xe8\xf2AB\x0e%\ Y;\xf9\x189~\xe0>BZ&\xc9\xc4\x83\xf30\ \xcf\x0bd\xf2\xc1Y\x98\xdf\xaf\x93\xd9\xca\xed\xb0\x9e\xf7\ \x91S\xf7\xc0\xe7\xd3\xcf\x90\xd3\xc9;`\xdd\xcf\xb36\ \xfber\xfa\xfeW\x08\xa9\xafdm\xf6?\xc9\x99?\ \xfbSB\x8e|\x9d<\xf0h3\xe0\xe4)\xf2?\x9e\ Z\x0bx;K\xfe\xea\xc3_%d\xd3\xf4\x9a5\xff\ \xf8\x1c\xcc\xfb\x09\xd6\x16~m\xcd\xc6\xc7\x9f\x07<5\ \xad\x99\xff\xb5\xdf%dK\xc3\x9a\xe4\xe3\x7f\x02xx\ t\xcd\xdb\xb3\x8d\x84\x9c\xfd\xe5\x9a{_9\x0e\xcf=\ \xbb\xe6\xd5\xd0\x11\xf8\xfc\xf1\xb5\xeb\xef\xfd#B\x1a\x1e\ Z;\x0b\xe0H\xe3\xc7\xd6\xc6\xc7n$\xa4u\xe7\xda\ B]/\xe0\xb1\x8e\xb5\xf3\xf3k\xef\x8bW\xc0\xdfw\ A\x0b\xf3o\xbf\x7f\xedC?\xcb\xc2\xf8O\xac\xbd|\ \xdd\x10!\x9d3k?A\xe7\xd9\xf7\xfd\xb5\xdfi\x00\ :\xa4\xbf\xb7\xf6\xdf\xf6\xc2x{\xbe\xbb\xf6\x95\xcf}\ \x8e\x90\x8a\xefU\xd4|?C\xc8\x99\xefU\xd4\xde\xb8\ \x86\x90\x93\x1f\xadh\xe8\xbe\x8d\x90\xe6\x5c\xc5\xa6w\xff\ \x14\xf0\xf4[\x15[>\xb7\x07h\xfd\xfb\x15\x91\xdf\x84\ qj\xff\xbdb|\xe4\x07\x94\xf6\xac=\xf7C\xd6j\ ;+\xe6\xc6\x80nc\xef\xacx\xcb\xc3\x00g\xd7\xed\ \x15\xef|\xee\xcb0\xbf\xafW|\xea\x85O\x13\xd2\xf3\ \xdf+^x\x01\xe8\xb5\xfe\xab\x15/}\x18\xe6\xd9=\ S\xf1\xe3\xdf\xbf\x8b\x90\x1b\x96\xa5[\xc7\xf6\x03_}\ IR/\xff\x0c\xe8\xd1!-\xd2\xb6\xa6Z\xba\xe3O\ `\x1e\xb7\xbd\x07Z\x98gxN\xba+\xf0\x18!\xc3\ \xcfJ\xf7|Q\x07<\xed\x94\xde=\xf6g\x84\x04t\ \xd6\xde\xf67\xac\xcd\x84\xa4?x\xcb\xdf\x1027&\ =\x92\x86\xfe;\x87\xa4/l\x1e#dw\xbb\xf4\x85\ 3\xb7\x03=GX\xab=/}\xe34\xe0c\xfe\x0f\ \xa5\xff-=N\x88\xfePe\xcd\xdd\x0a!\xbd\x9b*\ \xd7\x7f\xf1$!\x07>\x5c\x19\x9c\x82\xcf\xa7wU\x06\ \x1f[OH\xd7\xa7+\xbb\xe9\xfb\xd1GY\xab\x0cT\ \xceu\xca\x80\xc7\xbe\xca\xb9\x0f\x00\x9f^w\xa42\x19\ \x01\xfe<8U\xa9\xdf\x0f\xf4\xaa\xef\xaf\xbcx\xdd\x1f\ \x00\xbd~\xaf\xf27\xefR\x81\x8e\xed\x95\xf7\x5c\x06z\ \xcdh\x95\x8fT\x03\xdc\xf3OU\xbe\xf7\xe1(\xf0\xeb\ 3\xac\xbd\xf0r\xe5\x07\xce\xfc\x04\xe8QS\xf9\xa1\xb7\ \x7f\x06\xf0X\xc1\xda\xf3\xffV\xf9\xfc\xc1\x9b\x09\xc9/\ \x06j\xb4\x8f\x03\x9d\xbf\x16\xb8n\xf9/`\xbe-\x81\ 7T\x01}\x0e\xbd\x18\xd8M\xdf\xaf\xbd>\xb0o\x18\ \xe8\xda?\xc5\xda\x0b\xe7\x03\x07\xdf<\x05\xf3\xf9c\xd6\ \xe6~#\x10\x19\x00>M?\x128\xb6\x0b\xe8\x14\xf9\ V`rp\x07!\xdb\x1f\x0b\xdc\xda\xfd]\x90\xfa\xb5\ \x01\xfd.\xe0\x97\x03\xc3\x81K\xcf|\x04\xe8\xb5\x8e\xb5\ \x93U\x81\xfb\x7f\xf8>\x18\xff\xc9\xc0C\xe3\x94\x0f\x7f\ \x1ax\xe8g1Bn\x7fS\xe0\xe1]@\xe7\xc4\xdd\ \x81'\xff\x02\xd6_\xb59\xf0\xb9\xdd\x94O\xbe\x16\xf8\ \xe27\xde\x0br\xf1\xae\xc0\x0b\xb3\xd0V]\x0c\xbc\xb4\ \x0d\xe4\xf0\xc0\xcb\x81\x97\xba\xa1\x1dx\xbe\xaa\xee\x1d\x80\ \xa7k\x13U\xad{\xb6\x122\xf2\x95\xaaM\xef*\x10\ r\xf4\xd3U\xd7\xbf\x08pROU\x1d\xf8\x0a\xb4\xd5\ \xa4\xea \xbe\xbfX\x15\x19[G\xc8\xd6\x02k\xc7\xef\ \xae:\xdb\x01\xefo{\xb0*\x91\xf9\x14\xe8\xa7'\xaa\ \xfe\xdb\xad \xff\x8b_\xaaz\xb8\x1b\xf83=X\xf5\ \xf3W\x00?\xea\xf1j\xe9\x0b\x80\x9f\xc8h\xf5M\xdf\ \x04:tMW/\xee{\x14\xf8\xfa\x17\xd5o\x1e\x87\ qo\xba\xbe\xfa\xf1\xbf\xaf\x01\xfc=\xc2\xda\xb9\x86\xea\ \xcb\x9b.A\xfb\x1b\xd5\x9f\x8a^ \xa4mS\xf53\ \xcf\xc1\xfaz\x16jnh:L\xc8\x8e\x1f\xd6D\x1b\ \x00_c\xff\xa7fh\xaa\x85\x90\x8e\xc7jN\xd4\xfe\ \x13\xd0\xeb\xc6\x9a\xd3\x7f\x0b\xfcv\xb4\xae\xe6\xb6\xb7}\ \x1d\xd6}\xba\xe6\x5c\x00\xe4m\xb4\xadf\x9e\xb6\x0d\xa7\ j\x16\xd7\x80\x00\xa7n\xaeI\x7f\x1e\xe4r\xff\xce\x9a\ 7\x9d\x00\xfaW\x7f\xb0\xe6M\x97A\x9e\xaf\xbf\xbd\xe6\ \xd7\x1b\x01O\xbd\xcf\xd6\xdc\xfb\x1c\xe0e\xf2;5\xf7\ \x8f\xc0z\xda\x9e\xaf\xb9\xff&\x90\x9f\xf6kj\x9e\xfe\ \xc2M\x84\xc4nf\xed\xd2T\xcdg\xa7\xef\x85\xf1o\ \xab\xf9\xec\xe2/\x09\x09>^[\xf5\xcf\xc0\xe7\xa7?\ ^[\xff\xdb@\xf7S\xff^\xdb~\xf3i\x90\x93\x96\ \xda\xa39\x90\x93\xdb\x9f\xad\x9d\xfb[x\xbfi\xb8v\ \xee'\xaf\x82\x1c\xbd\xbb6\xb9\xf0?\x09\x09\xbd\x91\xb5\ \xc7\xbeU\x9b\x8f\x02\x9fU\xd6\xd5\xbe\xfd3\x80\xf7\x99\ \x7f\xaa}\x80\x80\x5c6\x9e\xad}\xf4\x8d0\xdf\xe4\x87\ j?\xf0\xd0?\xc0z\x9e\xa9}z\x17\xe8\xf3\xd4\x1b\ \xea\xf6\xbe\xbf\x0d\xe4\xf7\x83u#\x17@\xcf^\xf3\xd3\ \xba\x9b.\x80|\x87\x1e\xab;\x97\x83\xfe\x0b_\xae[\ \xbc\x07\xf4\xc9\xfe\xbf\xac\xcb|\x04>\xbfu\xb8\xee\xa2\ \xf4\xaf\x84l\xfcq\xdd\x1d\x9f\x06y\xa9y\xa2\xee\xce\ \xbf\x06\xfd\xd7U_\xf7\xb6\xe5w\x01\xfe7\xb3v\xf2\ \xe6\xba\xf7\xbeP\x0f|\xbb\xb7\xee\xd9g@\xde\xce\xdd\ [\xf7\xe2#\xd0\x0eld\xed\xb9\x13u/\x7f\x13\xf8\ x\xdf\x97\xeb^\xb9\xefc\x84\xc8\xb7\xd5\xbd\xfaI\xb0\ AC\xb7\xd4\xaf\xf9\xc77\x83\x9e\x8d\xd7o\xfe$\xc8\ \xd7\xe8R\xfd\xaeM`\x1fF\xae\xad\x0f=\x0dz\xbd\ \xe2=\xf53\xdf9\x0b\xeb\x9b\xa8\x9f?\x0b\xfac$\ _\xaf6u\xc2\xba\x13\xac\x9d\xb9\x5c\x9fo\x06<\x8d\ \x85\xeb\xef\xbf\x00ti\xfa$k7\xef\xa8\x7fP\x05\ <\xb4\x9f\xa9\x7f\xcf\x14\x95\xe7\xb7\xd6\x7f\xe8r\x15\xe0\ \xfb\x9f\xeb\xff\xf4nx\x7fZa\xed\xe2R\xfd\xdf\xfd\ \x15\xf0\xdd\x91&\xd6.\xbd\xb5\xfe\xc5\xcd \xc7\x8b\xdb\ \xeb_}\xf1w@\xbe~\xd4 }&\x0e\xed\xad\x0d\ \x81\xef\x83MM\x9enX\x17\xeb\x028{\x1b\xb6u\ \x8e\x02\xdcg\x1b\xb6\xfd!\xf0\x8drgCt\x06\xd6\ \xb5\xee\xef\x1bn\xf9\x19\xe8\x8b\x81[\x1a.\xbc\x1b\xe4\ \x128\xe8\xc1W\xc0\x1eK\x11\xd6\xae[`m\xec\x01\ \xd6N\xbf\xc2\xda\xec-\x0d\xef\xdb\x01t\x5c\x1fo\xf8\ h\xfd&B\xe2\x7f\xde('\xdb\x81\xaf\xe6\x1a;\x13\ \xbf\xb1\xba\xc6\xbe1\xf8<\xb0\x11Z\xd0\xd7\xf9\xca\ \xc6\xb9\xb7|\x1f\xec\xc3\x13\x8d\x97>\x00\xfd\x03\x97Y\ \x9bYl|x\x0a\xf8q\xeb\xf7\x1a?\xfa\xaf\xb0>\ \xb5\xa5\xf1\xb3\xc7\x81~\x0d?o\xfc\xf6\xf3\xc0\x9f\xb3\ \xcb\x8d/u\xc3:\xf6nl\xfc_O?\x08\xf8\xf9\ Q\xe3OB\xa0'v~\x84\xb5\xe3\xdfm\xaa\xa5t\ \xcc<\xd7t\xe0I\xe0\x97\xeb\x1ej\x1a\xcc\x01>\xf7\ >\xd5t\xeb\xbf\x80\x9e\xdbw3k'\x1ehJ>\ \x01z\xf4\xf6\xfdMwnm\x05y\xfe\xbfMoZ\ \x07\xfc\xd6\xdc\xd0\xf4\xe6?\x02\xfe\xd8|\xa9\xe9\xe1\x07\ \xae\x85\xf546\xfd\xf1)\x98G\xfc\xee\xa6\xf7?\x09\ t\x95?\xd1t\xf9,\xcc{G\x1aZ\xe0\xaf7\xfc\ C\xd3\xc7v\x80\xbc^_\xc3\xda\xf1\x9dM_\x1b\x04\ \xac\xddx[\xd37^\x02\xfc\x9dmh\xfaV\x05\xd0\ y\xf77\x9b\xbe{'\xac\xe3\x9c\xd4\xf4\x93\x0a\x90\x07\ \xf2j\x92\x90\x8b\xd7\x02\xc5\xc8;I\x84(D&K\ $GT\xb2@\x06\xe0\x95\x0e?Y\x92'a\xd2\x05\ ?Yx?\x07\x7f\xa9\xf0J#)\x92\x84\xd7\x09\x92\ &\x9dd\x11^\xeb\xf0|\x81\xcc\xc3_I\xf84z\ E\xbd#\xf0\xbcB\xa2\xd5\x94\xf0\x01\xf8\x1d\x8b(\xf2\ RN]\x18X\xd2\xf5l>\xdc\xd5\x95Usy5\ \xab\xa5\x92\xf9D\xbas1\xa9/\x15\xe6;\x93Z\xd4\ \xfb\xe3H\x97\x12\x05\xde%u\xca\xbcV\xd0\xe7\x0a\xc9\ 9=\xb7\x86.\xfd!\xdf\xa5\xeb\xf0~\x0a~\x17\xe1\ \x09\x05'\x9d\x86\xbf\xdc\x17U\xba\xfc\xd5B(F\xc1\ d1\x0at5\xa5.\xe6\x94tgZ\xb5\xad7\xea\ \xf7\xc0\x15\xa1a\x19i\xa5\xe3\xa4;I\x1c\xa6\x9c^\ %\x1aV\x07\xc1\x1f\x0d\xcbI]Ws\x9dq-\xed\ \x82\x06\x97\x07\x5c\xd1\xb0Q\xda\x0aH\x98)\x9d\x909\ \x89\xe6!\xdaE\x9e1\xa19\xc2\xd9\x22\xad\x93\x0eI\ Ai\xbf\x14\x95z\xa0=,\x0d\xc0\xab!iX\x9a\ a\x01V\xfc|F[N\xa9\x89\xc5\xb4\x9a\xd1\xf3\ a\x979\xc9\x00\xa1\x0f`\x04\xa5n\x802,\x1d\x93\ \xfa\xa5\xb0\xd4o\xc2\xa9=\xa2^TS\x1a]\xa1#\ \x84f\xe9:\xe81\x22\xf5\xc2,\xfa\xe0\xd5\xb4\xd9\xb3\ j\x22\x19W3y\xd5\xb1\x9bD\xa6\xc9\xb8\xf9\xe8\xda\ \xe9q\xc7\xa7\xfa\xa5-\x08\xb8\x17\x16z\x00\xfe=L\ d\x18\x84.\xfd\xb0\x14\x83WQ)\xec\x83\xd2\xeb,\ d\xcaG\xb4\xe5LJS\x12\xf2\xa4\x92Q\x16\xd5\x9c\ \xe3\x90{\xa4\xad\x80\xcb(`#(M\xc3p\xdde\ \xe0\xbae6\xab\xc6\x93JJ\xd6\x97\x94\xcc\xf9\xbc\xac\ k\xce\xd8\xde m\xa3\x8b\x80\xdf\x10\xc2+\xc6u\xdd\ \xc9\x9c\x92\xc9\xa7\x14]sAvDj\xe5S\x0bA\ W:\x09\x19&3$\x8d\xc3$\xc3R\x0c\xfe\xea\x81\ W\xd3\xf8n\x18\x9e\xa2\x03\x84\xa0\x1d\xb0\x11f\xddP\ \x22a!c\x22\x999O\x07kP\x12\x89\x14\xbc\xb6\ \xe1\xa2t\xb8\x10\xfcR\xd0\xc3\xb0\x0a\x8a\x95\xc3\xf0\xc9\ \x94\x80\x0b\x04\xaekr\x5c\xd1\xd5E-\xb7\x12\x96]\ \x81S\xd6\x1b\x92F\x01\xc0a\xa4\xf2\x00\xac\xa3\x17\xc0\ \x0f\x22\xa2\x83R\x04\xde\x1d\x86W\xe3\x02S'.*\ \x99\xb8\x9a\x90\xa7\xb3zR\xcb\xe4]`7\x03\x11\x87\ \xb1\xff\x00\x9b\xb8\x09!\x10\xa3\xfdS.\xfd\x0eH\x1b\ \x81\xab\x84~|6\x83E\xd8\x15yP$\xe0\x86\x18\ 0\xc0\xa2j!wDK%\x18\xa39\x8c\xb6\xcba\ \xb4~\xf8\x9b\x8ep\x04F8HY\x0f\xf4\x9bl1\ \x1a\x87\xbf\x90L\xa9rFI\xab\xae\xd8\x9d\x00\x0c\x0c\ \x22^{\xe0\xf7\x90\x09\x7f\x00qN\xb1\x1a\x05\xf80\ w\xe4\x95~|\xaf\x17\xc6\xa6\xec\x0dd\xc5u\xd3g\ \xc2\xf4Ss\xfc-GT]\x8d\xeb\xf2\xecJ^W\ \xd3\xf2LN\xbb\xb4\x22\xcf\xaa\xba\x9e\xcc,\xba\xd1b\ \x170=\xc3`\xd0\x1d\x83\xb6U\xae+B\x9f\xeb\x22\ \xb7J\xd7\x0a`,\x82E\xe1/P\x17&\xc0F\x8b\ \xd9\x81+\xdd\xc8\xd1)\xb5\x99\xa2\x14\xf4\x16%\xdbt\ \x9bL\xe8\x14\xa0\xc7d[\x90\x1e\x8c\xbe\x14\xb3Q\x00\ v\xacD:\xab\x8ff@\x80\x92i\xd5\x05N5\x19\ %'\xe1g\xc6\xec!\x8d\x9e<9\xe3\xf2t\xad\xf1\ 4\x995\x9f\xaf\xa4\xcf\xcf\xbat\xd8\xc0q\x1a\x85\xd5\ GQO\x85m\xab\xad\x1eU\x15/\x9aT\x931\x18\ L\xec!\x8d\xcd\xb8>\xdd\x01l\xba\x1f\x85\x9d\x22\xe1\ \x98\xa0\xd4\xc2\xa8[\xb8\xae\xb54\xe4D2\x9d\xd4\xe5\ |VU\x13. \xebE2Z\x93\xf0Ps;\x9c\ \xd8\x08=\x08\x8d\x9c\x07k\xa2R/\xc3b\xa6\x09J\ \xea\xb8\xa6\x9dO\xaay\xd7\x85\xb5\x83\x91\xa6(\x9c\x00\ \xfd\xe6\xa4\xd3\x00\xb5&\xc4\xfaI-\xa7\xfah\xb4N\ i3\xc2\xa3H\xeaE\xa4\x84\xb8\x94RC\x12\x86O\ \xa6\xf0\x13\x8a\xc6\x83\xc2l7L\x15\xd2\xf3jN\xd6\ \x16`\xca\x99\x0c\x08/\x1d$\xec2\x8a\xa3Uv\xe2\ *\x90iJ\x9eaa\xa4\xca\x19-\xa7\xbb\x01\xae\x87\ \x0e\xa5\xea\xa4\x12\x15\x88\xab\xbclC\x9c!\x16\xed\xfa\ \xc8\xc6^\xcdL\x0be\x95|~Y\xcb%\x5c)\xd2\ JN\xa0\xf7I}\x85\x1c\xfe+B\xa9=\xa1.\xa8\ \xb9\x9c\x07cw \x97P|G\x04}=\x09-\xb8\ M8\xbf\x98\x8dU[N\xa8i\x15q\xaf/\x81\xf3\ \x91U\xf4%7\xe4\x90Y\xc0{\x8c\x8cCk)\xad\ \xc0\xectl|\xb6\xd7\xa5\xcfF\x9b6\x19@\x05\x15\ \xa4\xf6\xc2Z\xd1\xac\xae\xe4t/M\x12D*R\x1e\ \xedCQgF\x9d\xfeM\xc5\x8f\xf2\x91\x8crA\xb9\ j\xd8\x86\xad\xfa\x9b\xf2\xb0.\xf0\xa12\xba+\xbev\ \x80\x8f=O\xa2`\xe3\x8a-\x1a\xf5\xbd\xe1\x13\xbbe\ \x8b\xccGG\x0c\xab\x16\xe9\x9a\x8f2\xb8\x1b\x95\x05P\ \xd8s\x09\xaea\xe7\xf2\xb9\xb8\xc8\x22|\x08\xe6\xc3F\ \xd0At\x02\xde\x00\xc0g\x93w\x94\x0d\xb7\x19\xc4\x9f\ \xfe\x800\xb0W\x96\xf6\x93eyz\x1c\xfe\xa1@Z\ \x8b\x80\xd8\x5c}\xc0e\x98\xfa.\x9cO\xf8\xea\xad)\ \x01\x9c\xac\x9a\x91q\xcd>\xd0z\xf82\xaf\xb5\xd9\xcc\ \xb7\xa2!t)G\x91JA\xd2f \xc0\x1ci\ 3,\xde\xb4P1-\x9dM\x81\x0dO\xb4Q\x5cx\ \x0fk`W\xb4\x8an\xd8\xa5\xda\xd5\xc2\xae;\xcc\xbd\ &\xcc\xa8t\xd4\xd4\xfb\x0cE\xd4\xca\x86\x1dGh\xa6\ \xf4S.\xaa\xb2\x92/g\x90#\xd2\xf5\x5c\xe7F\x11\ h\x1fL\x9fq\xb7)\xb1hb\xa2\xe8\xdc\x8eq\xad\ \xd9\x8b\xef\x0d0I \x9d\xe6\xe0[\x8fh\x99\x9d`\ r\x96\xb4e&\xc9i5\x9f\x07\xd6\x07\xf6W\x92\x99\ N\x9f\xf5\x960\x82\xe8N\xba\xb9\x91\xad\xc8\x1a\x0eN\ \xa4\xfb@W?R\xf2\xe0OX\xe41\xeeCZ\x06\ \xdc\x8e]\xaa\x01\x0e\xc0L\x0e\xa3\xae\x12\xf5TK,\ \xa5*9yB[\x94'\x19f\xd1\x066\xa7\xb4\xc5\ \xb9\xe5d\x06\xc6\x13\x86jD!0\xf1iY\x92X\ Jc\x91\xa6s\xbf\xe3\xc0q\xd4\xa3\x18\xc4`#*\ \xb0C\x08 1\x17\x99\x85 Qd\x84\x10F~1\ \x10[\x86J\xba\x14\xe6\xa8[\x13\xdf\x1c\xd3\xb2\xd4\xfb\ M\x81QU1\xe6\x89\xa5\x92\xd9yM\xc9%\xdc'\ \xd2.m\xb0\xb0\xe0C\x91F\x81\x22\x80\x1ew\xa0\x94\ \x00\xdd\x9cuWO\x80V0}95\xbfT&\x09\ :Px\x19hc0+^\xe8FDF\x04\xe7\xbb\ \xfe\x04,\x01\x0c\xd1X>_\xf0\xa0\xd0\x1eS\xf2\xdb\ \x01X\x8c21\xae\x22\x86+`\x0eO\x8c:O\xa4\ \xcd\x04}\x0d\xd5\x06\xed\xb2\x92\xca\x81O\xba\x22\xab\x97\ \x92y=\xdf\x86\xcc\x9a\x06\xd9\xe4c\xd8u\xfb\xe7\x99\ \x06\x82\x7f\xe3\x80\xf4\x0cO\x18E\xa5}0B\xd0\x16\ N\x07\x91\x07\xc6\xd1d\xd1h\xc0\x88\x84\x0fqU+\ s\xfd\xc5\x5c\xbc6\xf8\xbbE\x1a\xc7\xb9\x87x\x94\x0f\ \x01-h<\x19\x84\x83\xa9\x9c\xa3\x98a\xa1H\xeb\xb5\ A4\xd0\xd8+\xdd\x88\xff\x8eaK\xa1\xf7\x91A\xc4\ \x8bm\xae%*>\x07\xfa1\x12\x07c\xac\xe6\xa2'\ \xa9\x8a\xa2\xa6X^R\xf2\xf2\xbc\x0a\x8a\x04l3\xf0\ \xe7\xbc\xba\x00nf\x9b\xec\xf0\xdf\x10\xb8\x9f+ZA\ \xce\x17\xf8\x8be%\xa3S\x86\x86\x9e2\xb8\xdb\xa8\xe9\ \x06#]|\x08\xd3t\xb8\x22\xf9\x8b>H\xa6\x82\xd8\ \x8b\x0b\x1c\xe1\xac\x19\xc3\xf4\x0a\xc6\xa96\xcdu\xc0\x96\ \x190|\x08\x8a\xe6!\x14\xde Z>\x16\xb1\x1e\xe0\ \x8c\x126c\xd8\x1e\xd4J\xccp\xcd\xe3\x0c\xd6I\xd7\ \x80\x0ai\x91\xb6\xe2\xbf\xb2\xd4,\xb5\x83\xb5\xd8\xca\xed\ \xa67\x9a\xef,F3\xcd\x8a)\xd4\xa1\x96\x97\x93\xa9\ \x94\x9cP\xa9iuB\xb0lhM\xa0\x03\x8d\xdd\xf3\ \xf2BNKST\xe7\x80L\xb9\x84\x9cH\xe6\xcfG\ \xe6s\xd1\x99\xa3'&\x87\xa6\x8eN\x9d\x9cxc\xdb\ *\xf0\xfd\xed+\xc4w\x08\xb0\xd4\x8b\xb6\x91K/\xf5\ \xf8\x10\xcb\xc5q:S\x8d\xcc\xeb=\x88\x90\x8fqf\ \x07\x5c\x9bX\xee\x07\xc6\xa5\xa24h\xe2_&\x8f\x03\ \xbe\xd9(\xc50\x9f*\x0b\xfb\xbf\xe5\x83\xfd\x9c\x9a\xd6\ .:c_\xa1\xc41LZRW\xd3y9\x99a\ \xc6\xfcBA-\xa8\x14\xf3H\x90\xf6!x\xd20~\ \xf9v\x90\xa3\xbc\xbe\x1a:t\x08\xee\x0db\x04-2\ S\xbfN\x8eM+\xac)f\x85e\x82s\xe3:\xc4\ \x8e\x12g\x90\x89H\xd4q\x80\xf5\x82\xf3\xa7&\xca\x81\ \x1f\xe4\xf0\xb7\x02\xdc~d\x12\xca\x10\xdc*\x9a!\x87\ \xd3X[`\xac\xa3y\x887\x144\x87\x10w\xc8)\ uA/g\xd0+p5]a^4\xe3\x8f>T\ \xb1\x03\x5c\xf1Z\x8az\x00\x17E\x17w\x00\xa3\xf2^\ \xbb\x5c0\xcb&\xf07O.\xe1S\x11\x8c\x9c\x8c\xec\ \xcd\x94\x83\xdf\xbd\x8f:\xadZ.\xb7\xd2&\xbf\x11T\ j\x5c\xa1^$g\xd2\x84\xba\xa0\x14R:\xe3\xbe6\ \x7f\xbe\xb2\xf03\x8c\x8eK\x0c\xb4\x9f\x13~\x9a\xe8\x98\ \xba\xa2\x17\xcab\xa5\x1e\x13\xaa-\xd9\x82\xab4\xd6\x8c\ \x89/\xc7\xb16\xc0X\x98\xaf\x86\xb8Y\x06AT\xcb\ \x19r\xa2DE1R\xd8-#s%z\x10\xc5\x07\ 8)\x1c\xec\xa09\x95\xdd\x86^8\xa2\xd9\xccW\x5c\ \xcb\xe8\xc9LA\xb5L\x97\xf7\xecd2\x04p\x93D\ !!\x93=\xa2\xe8y\xf4\xe2\xec\xac\xf0\xed\x9a\xa1\x5c\ R\x09\x81\xdaN\xc8\x19\x8d\x925\x9f\xd52\x09o\xe8\ \xed~\xd0\x05\xcff\x83#|\x1f\xd7\xe6a\xff\x01\xe0\ \x9du\xc8\xe3\x13\x1c\xd5\xc3H\xe9A\xee\x00\x833L\ \x9fq\xf2Jm\xd1\x11%\xd18\xf2\x22\x85<\x84\x16\ \xc5\x90\x13\xd0\xfc8>\xe8z\x1a\xe6@\x9f\x1e\x0a\xd5\ \x5c\xda\x88\xb94&\x10le\xe0\x9e\xd0\x14I\x12\xc8\ \xd4&l\x80\xc9z.\x09\xd6\x12\x1d\x10\xaa\xb3Cr\ ^\x05\xaa&\xfc\xbc\xbcNLm\xb0\xc5Msom\ \x08\xa6>\x0d\xca`\x829\x0f\x02\xb2\xac\xc9\xad7&\ \x97\xe7\xd92\xd5\x0f\xe9\xb7\xf3\xcc\x16\xf3\xf9\x0c\xb4r\ \xc7\xc4%AG\xdf\xef\x17\xc4\xac\x0fc\xc2\x98\x19@\ \xf5\xfa\x04\x06;cKj\xfcv\xa0\xc5\x06\xa0\x93\xfe\x14\x81\xe8\xec\xec\xf4\x06\ \xd1h\x03a\xe5\xa1\xab\xb0\xbb\x9f!\x92\xd1\xea\xd9\xd3\ 2\xce{\x8e\xf5\xa3\x80\x17p6\xcd\xec\xbc;\xd0\x10\ \x00\x1dD\x8d3l\xe5\x17J6\xd8\xc6\xd1q\x1eF\ \xea\x1d4\x87\xb9v2\x99I\xa6\x93w\xa8\xd4p\xe5\ \xd9\xfe\x9a\x9eSV\xbcG\xb4v\x94#\x187r\xfd\ bB\xad\x99\xd4.&3\x8b\xb2\x9f.h\xe5)\xb3\ \x01\x0c\xb0z\x98GiA\x99\x02\x1b4\xa2\x15\xfc,\ \xdca\x0a\x05\xed\xf6\x10\xc7\x00u\x9f\x06x\xba-\x84\ \xf1.\xd5\x86\xd6&c\x84\x87l\xc8\xaf\x02\x117\xd1\ \x11\xd5\x8cVX\x5c\x82PIU\xe5|V\x89\xab\xc0\ \xb1a\x1f\x97\x06\xb7=\xed\xa1\x0e3\x84V$\x1f\xc3\ \xc0\xa4\x17\x98g\x00\x83\x18K:\xae\x9f\xb6B\x0a\x08\ \x9e\xa9\xe5\xcd\x17\xe2q\x90\x8f\x85B\xcaG$\xeey\ -#\xc3{\xdb\xd0\xfd\xa4\xca*\x06\x98g\xb8\xd8[\ \xa2j\x0c\xcfh\x08\x95N\x0f<;\x05\xd4\x8e\xa1\x1e\ \xf0\xda\x8d\x1f\xf5\x5c\x91<\x93R\x95< \x17\xd4\x15\ \x84C\xaa\xbc\xa0\xa5R\xda2e\x18c\xfb\x1e\xf4A\ .\xaf\xfbz\x92\xafa\xf1\x9d\xe5\xa1\xddG\x0b\xb4z\ \x1a\xca\xdarm\xe1\x8c\x8b\xcbS\x14\x22\x94\xd8s\xf4\ M\xb9\xd6\x0e\x8b>\x859\x85\xed\x823\x031\x00\xae\ \x8e\xfb\x16T\xd2\xd1\xdf\xf0\xb1\xa4.s\xa3\x99Kc\ \x1e\xa6#\xe6\x98\xce\x85\xff\xf3K\x05\xdc\xa5\xc78\xd8\ {\xbc\x84\xcbx\xa5.\xdf\x90\x10\xe6Z\x98\xf0v2\ \xfb\x99\x93i\xces\xaf}\x9ezn\x85\xce\x929\xef\ \x14I6\xcf\xf0\xbf\xd2\xc4o\xf0\x9b\xf8\x15\xcf\xdb&\ 1H\xf0(\xa6'E\xb5p\xc8\xc3\xc5\xa4\x0c\xa9\x94\ 0\xe4na\xde9\xd5tse\x05=_K\xf0R\ >\xa6g\x97\xa3\xea2fC?\xe9ajK\xc8g\ 3usZI\xea\xbe\xe6\xfd\x8c\xabf\x0ca}G\ \xd4\x96\xf1~-\xba\xb1\x83O\x07\xfc\x9fBZu\xd1\ \x7f\xbe\x01-\x98|\xc1\xdf\x5c\x95\xe2\xb6\xbby1A\ #\xee\x10\x15\xb3\x99\xb92\x9d5\xd4\xc9>\xf8\x9b\xba\ \x82\x89yam\xcf\xebe3N]e\xd3\xb7\xc3\x7f\ \xa2\xbfJ\xe2\x96\x85A\x93\xd4ea0\xec\x8a\xc1A\ \xcc\xf8\xb2\xfd\x18\xfa\x891\xcd\xd2\xdd\xcdu|2\xa0\ \xbe\xc4\x0dM\x0f\x17\xcf\x9djE\x02\xe9\xa8\xd5\xac\x91\ 7\xf1\x91\x0b\xd9\x04\x90C\x88Z}f\xb0\x0bw\x1b\ \xc5\x9c\x9ccT&h\xea\xc6\x1bi\x9a\xcd\x08\xca|\ \x94\xf1\x8e\x12\xf0\x0e\x9b\xecV\xc8\xc7@\xc7\xcdmu\ \xbf\xb0g=\xa6%\xb0\xb0\xaa8\xec9A7\xb1|\ \xf5b\x8f\xe9\xf1{\xa9}+\xb7a\x1f\xe4\x9a\x13\x86\ \xc6\xa7\xec\x86\xce\x87\xef\x88As\xc4\xe2<\xc5\x84O\ \x9e\xa2e\xb5)\x89\x08n\x97\x0f\xa2\x1f)\x94\x9c\x82\ \xfd\xee\xe6\x9bm\xc6N\x90\xc3\xbe\x84\xb51;\xabf\ \x12r\xde\xd8\x985\x84\x8a\xd6\xe5\xfaG\xa5E\xc3[\ a%\x02\xf5\x83\xb0\x07\xc5\x83\x15\x1d\x18\x11\xe0~L\ D\x84\xcc\xbde\xfa\xb9\x18]5\xcf\xd2\xd2\x02\x0aR\ >\x8d0\xfd\x18\xb4t\x08\x8f\xe8\x15\x81\x97\x15\xbd\xde\ \x82\xd1[\x983\xe8a\x8e\xe8\xd2-!\xd1\xb1\xefw\ pS\x8c\xac\xd6\x00\xc6vl\x17Tp\x9bf50\ \xb6l\x13\x86\xe7\x00u\x9eE\xce\x01\xb1D\xff\xc3G\ \x98\xb6\xe06\xcba\xe4E\xfb\x9e\xfe\xa0\x80\xdd\xaaY\ \xba\xf9<\xef\xe3\xcc\x1c.S\xd3\x1b\x1be\xc5\xecg\ \xado\x13U3\xb6\x1d'n\xaf}Vsul\xcd\ \xf6\xd9+52,B\xf50&V\x96\xe0\xa4aC\ \xfcRv>\x10\x05l\xd6\x9a0}\xd0\xd7Z\xeaw\ \x0a`\xea\xca\xf6\xc5\xf7\x90\x05\xf8I\xe3\xb9\x91E\x93\ \xd9c\xa5\x16F\x80\xbeqa!\x9dUi\x92\x05\xa3\ \xbbd\x06\x94^*\xe5k\x0cZK,\x8b\x98\xa9\xab\ YHf\x92\xf9%_(t\xc9B*\x0e$5\x86\ %|T*\x06q\xaaX2)d[\xc5b\xe3\xfa\ t\xe1\x12\xe5\x09\x95\xe6\xcc\xbc\x07\xea\xe7I\xed`Q\ B+X\x92\xfb\x0f\xda\xb3\xff\x96h`\xc2\x9a\xe7\xb6\ h2?hd\xf3\xfdh\xb2Bt\xb2\x0f\xe2\xa4\x14\ \xd0\xa5L\x9a\xac\xe8\xfb\x12\xa9\xecji\xd2RRz\ `i\x92:a\x17\x1f\xebX\x04(\x02\x04^(*\ \xe4o-\x9av\x18\xe9W\xf7\xfe[\xa0\xbf\xcc\xb7\xde\ \xc2\xc5\xba\xcd\xaaw\xea8\x9aH\xea\xeePj\x01\xca\ \x8e\xa2\x92\xc3\xca\x0eZl\xe8\xde\xa7\x11\xfal\xb3r\ \xccB\xbfQ5\x95u\xef\xd7\x8cU\xdc\x82\xcfd\x95\ \xb0v\xa0{\xe4\xde\xb5\x1a\xba\xb6\xd04\xb50\xd8\xa9\ \xa4\xba\xec\xde#,\xec\xb0\x0f\xa1\xa1\x9a6\x1d\x9f \ \xc6\xee\xfd\xf0\x9e\xed\xf4\x84cE\xe4P!\x91\xd4\xd8\ 9\x8a\ \xe1N\x87\xb4\xbd\xa8\xbc\x94\x16R\xc7\x8aM\xb5\x95\x9c\ ?\xc1\xcaE\xadJe/\xd8\xab;\x96\xd1\xc4\x8fe\ (\x19\xe1d\x86#\xe4v\x17\xc8V\xde\xc1\x11j\xd2\ \x1b\xea.\xb07\xa5\xfbx\x13%r\x11\x13a\xe3F\ \x9d\xbf`8ea\xb9\xc5!n\xa7`\x1a0QJ\ \x8f\xc0x\xdb\xb0S\xa5\xb0!\x0cb^\x89\xbd\xf2\xa7\ \x8f\xfb9\xcc\x09.\xad\x03\x02KF\x8c: \x0b\x83\ \x9b\xe9<\xba\xd0\x12\x09U@r2\xaee\xbc\x0ck\ \x8bP\x0c`O\x5c\xd7\xcc.\x15tD\x9a\x97\xf1\x11\ \x8ePZ\xc6\x87\x9e\x99\xf4\xd2f\xab\xcd\xbf\xbai\x84\ 2\x8f\xb2z\xbb={\xf8\xf9\x5c\xdb\xf6\x84\x8f\x805\ \xf33\xb2e\xc8W\xb3\x09~\xac\xc8E\xacB ~\ \xb6\xdd,\xdc\xb6\x22T\x16\x99{;\x1a\xc5)`/\ \x01i\xc0d\xaf\xbfx\xecu\x81\xeb\x8d\xab&\x9eJ\ \xf6GU\xbf#\xfc\xae\xe2;9\xd0\xdb\xbb\xbfW>\xc2\x8e\xea\x86\xe5\x03\xfd\ \xc1n9\xd2\x95\xa5\xdc\x83Cw\xe1t(q\x1b\x0c\ \xe2Z<\xb4\xb4\x1a\xc2J;L\x17\x0a4\x16\x19\x85\ \x9f0\x90hrU\xe8\xe9qF\xcf\x08zY\xf2\xe8\ hxr\xb2\xec\xd9\x7fjU\xb3\xa7\xeeT\x0f\xa6W\ \x18S\x86\x1d\xdd\x11V\x93:\x8e\xfa;\x8cV\xa3\x17\ 5q\x7f\x89O\x17\x14j\xa7a\ \xe8\xa8\xdc\xd3b\xa7\x98\x0d\xb9at\x97\xfbQ\x8a\x9d\ \xfd/s\x0b\x90\xb0;n\xe8\xd6\xbeq\xb2\xc5\x88O\ \xa6\x85\x00\xdd\x0c*\x90h\xecr\x8d\x1e4\x94\xc6\xd5\ \x826\x0dB\x8c\x0a\xfd\x10\xba\xeec,\x08\x14\xa3Y\ \xe8\xd9\x0b\xf2\xbf\x7f\x95\x04\xbd\xecNP\xba\xd3\xc7K\ \x89\xa8p/+I\x1d\x0c\x83\xbeL\xadDNE\x22\ wZ\x1ed\x9ay\x90\xec\xda\x08\xfc|E\x16\xaa\xf5\ \xe4\xe5%\xe8\x860ezS\xa2l\xa8\x0d\xfah!\ \x97\x81'\x14Y\xee\x0d\xee\xe7\x81w^-\x9b[\xc8\ ;^\x07n\x19FQ\x8b\x00\xd6\xa9?n\xb98\xd6\ q\xeb\xa0t\x94\xd2\x7fU\xd8=\xec\x81]\x88]\xe8\ \xbd\xc4\xc9\x8c\x81\xe4\xce\xf2\x15\xe1_\xafj\xc5\xc6\x85\ %Gp%a3\xa2\x14O`1\xd5`\xddX,\ \x9e\xb44.\x84aW\x93\x88G\xd2\xa2\xd2\x00?x\ f\xcf\xc3\xf6\xae\x92\x0b\xcf:\xe3\x09]\x94\x05\x15\xfc\ \xfc\x9c\x0a\x0c\xb6\x82\x89\x19<\x98\x0dX\xc3\xba7~\ ]\x09\xad\xf4\xc1\xbcn\xf9L\xf3\x8dU\xa1p\xa3\xcd\ y\xb3\x0a\x90\x98\xbb\xd0\xcb\xb7)\xe9\xa7\xf4\x8e\xbf\xa3\ .\x81b\xe9\xa1\xb7\x08:\x8c\x13D\xe6\x9e\xb2\x91\xc6\ p\xc8\xe3\xad\x12\xa5qg\x94\xde\x94\xa7\xc8J\x83\xf1\ MfS\xaa\x18\xa5\xe2A\xba%5\x95e\x17\x81\xd2\ \x1d,\xaa\x9cq\x00@\xb7\x0a\xec\xbe\xac+\x1e\x84\xd2\ \x16\xb6L7\x98\xafC\xb2\xca\x91_\xca.Mq\xe8\ \xdd\x03~\xbc-\x99\x813\xa2\xe5Aa^\xb9\x1f\x92\ \xd8y\xed\x08?6#\x96 m>\x9aQ\xa8[<\ \xa5\xe9\xc9\x85d\x9c\x1d\xd0\x9d\xa5\xa7\xc0\xddf\x1bu\ \x1cO\xdc\x05\x1b\xe09\xd6 \x12\xcer\xfe0Ua\ \xe5\xa6\xf8\xc8N\x1b`\x8eH*\xb7\xac\xc4\xa1s\xbd\ \xb4\x0b\xe5\xf0\x88\xed2\xdb\xc0\x88f^m\xea\xe0\xdc\ \x9b%%\xd6\x9e\x97\xcb)\x8f\x22Gw\x00\xa3\xb7 \ \xb7ra\xde\xa7\x9f\x97U3o\x8b\x95\xaaP\xae\xb4\ r\xcd\xbbqC\x10\xcf\x88\xb0\x9d\x03\xea\xb3\xc6\xe9\x9d\ \x87\xf2|A\xd7\x810\xf1T2~\x1e\x1cW\x97)\ 7\x02\x8eXMQ\xd8\x96\x11\xaa\x1a\x8b\x9bi?\x87\ n9\xe9\x1as\xee\xac0\x83r\xb2q'\xa2y\xb3\ %\xae\xb2\xdc`\xb9\x5c.\xe8\x1d[\x90\xe7s\xda2\ \xbdj\x96]\xf7\x95Q\x13{\xe5\x92\x0c\x0buK\xec\ \xf7%8,\xe4\x8cp'h\x1f:\xa8\x87L'\xd7\ \xee\x0eXy!\x1a\xcf\x187\x9e\xa1\xa3\x8d\x1b\xe0\x07\ \xd1\xf9\xe8Ew<\x22\xde`;\xae\xaaYc&\xca\ \xb2r^mse\xb9.\xbc\x93\xd4~\xb1v\xed\x04\ \xe8\xd4\x028\xa6\xae\xc4\xf8\x0fp\xe8\x83\xbc\xb48\x82\ q\xd1\x84\xc9nn!\x04\xcb(3\xe1\x13\xef^?\ \xcaY7\xc8+\x7fs\xdc\x9b\xc8\x83mV\x80P\xd4\ \xd3\xd8\xe5I\xfc\x1e\xee\x96\x1au<\x03\xfc\xf8\x0fe\ \x0b\xe1\x08\x95\x83\xd7Q:\xb3\x81\xa2\x0bKv\xa3\xa7\ \xcc\xc5\xc4\xd2\xd2\xa4r)\x99.\xa4\x85\x18\x8e^\ v\x98g_9\x90\xa5\xeeW82\x9f\x037\x22\x9f\ VR\xa9\xe8.\x81\x89\xf2*\x8d\x0fL\x87\x82\xddw\ \xc2zC\x84\xac\xa0\x9f\xbb;\xd2\xc5:\xba\xd0@\x96\ \xdai\x91\xb7\x9b\xf2\x14$k\xbdMo\xea+Yw\ \xc2n\x00O\xbf\x14\x98e\xd2\x1aDPn\xca\xf7\xf5\ \xdf\x06p\x18\xa4\xc3\xe3\x1ar+\xb8\x17\xbe\x0db\xca\ \x1ej\xbb\x02v\xbey\xdcI\x8f\x95U\xf3\xe4\xd0s\ \xf5\x85G\x8e\x9e\xc3\xf5\xa8\xc1#\xb6\x0c\x5c\x88g\xc8\ D}.\xd6s\xe1\xa1mZ_{^]q\x83\xec\ X\x7fyc\x81\xd5_:2\xe2\xf5\xce\xb9?\x9e\xd5\ \x13h@3_Bj\xcc\x95\x06SB\x05E\xd8,\ nq\xdb\xdf=\xcc\xbf;b\x18\xdd\x1e\xe3\x08\x97\xa5\ I-jn:Q\xc8\x88\x0a\x1b\x84\x0d\x95x!\xeb\ \xba\xb66\x87\xec\xb4\x80]ak\x85g\x85\xcb\x864\ \xed\x02\xa9\xc6\x80\xe4F\xa0%\xa1\xf0G4\xfcT\xb2\ \x82\xa8\xc9\xf6\xb3\x8d\x5c\x9b\xf9\xb7\xef8\x14\x1f\xf8\xea\ \xf7\xfc6\x91>,I23S\xc6!c9\x91T\ R\xda\x22KS\x98\x9f\xd2\xf0\x93\x9f\x18s5;\x9e\ E>\x8e\xc2&\xde\xac.xG\xb4\x8f+\x1b\xf9V\ \xbb\xb8\xf6\xa1\x9b4\xe2\xf7\xeaT\xcd\xea+)\xf7\x81\ \xf6\x82..J\x85\x80\xcdrJ\x86\xec\x16\xf5\xf2I\ \x9e\xce\xd8\xc5\x93\x19\xbb=\x04B\x5c\xbf\xe5\xcbRS\ \x16r\xf1c\xa8\x9aeE\xa81\xb3h\x95>m\xbb\ \xf6\xf3\xa4\xa6\xa5\xe6\x95\x1c:\xb5y9\xef\x85\xcd\xbd\ Nq\x85o\x8dJ\xabX\xa3\xe2\x13c\xb4J\xebQ\ \xa5Fp]\xc5\xdfmT}JK\x15<\x82\xb1\x0e\ \x97\xef\x08\xb2\x1f>\x10B<\xfe\xfd@XC\xc4\xa0\ \xd6\xea\xea%\xfbWJ\x95\x11\x5c\x17w\xba\x8a_\xdd\ S<\xd4\x1e\x87J&\xeb\x1aq\xdb\xd9\x14\xabh\xe8\ \x88\xca\xca\x8e\xe5\xa1\x94\xe3\xfc_\x87\xf8\xb1\x18d\xe9\ W\xb1T\x8c\xcd\x84\x9d\x9e\x14\x8b\xcf\x85\xaf\xe7\xa0u\ \x07\x8e\x90\xaf\xc2\xb7\x91\x14\x0f\xe1\xe8\x10\x14?t\xf5\ K\x0c\x8aG\xf4\xfe\xe6\x93R\xbcz\x7f\xedI\xf1\xf3\ \x1b\xf8\xc6\xe9a+\xa9i\xe3\xa2\xdaYO\x1e\xfa\x15\ \x1c\x8e\xbc\x0e\xbd\xe69vK\xe0\x9cCA\xc2\xaf\xfc\ \x9c\xa4\xef\x8c~\x05G\x1b}\xe7pe_v&\x5c\ \xdf\xb0~E7\xbej\xa5\xb8\x18\xcc\xb6\x89h\xd1[\ `\xd4\x06NX\xdc\x12\x0c{\x82\xdb\xc191\x8a2\ \x15\xe1\x11D\x10\xb7zJ\x8f_5\x8f\xa8z|I\ \x9eT\xc151\x8f\xf1\xb9\xc2>\xce\xbfw&f\xbf\ \x10\xb5\xa4\x94\x8c\x9a\xd3h\x11\xdbX3\xb1_l\xb2\ \x01g@\xf9\x83M\x82\x96\x97\xf1\x9bM\x5c\xe71\x02\ k\x0cqx\xd6F\xdca$\x10=\xe31\xe0y\x12\ \xd4d\x1ds\x0e\xdbxA \x16\x19@\x0c\xf6V\xfa\xe8\xba5\xbf\xd8]\ \xf7\xcb\xd6\xb5\xd2/\xf6\xd6\xae\xff\xff\x99\x84\x98\xb9\ \x00\x00S\x9b\ <\ \xb8d\x18\xca\xef\x9c\x95\xcd!\x1c\xbf`\xa1\xbd\xdd\xa7\ \x00\x00\x00\x05zh_TWB\x00\x00\x07\xc0\x00\x00\ \x05;\x00\x00\x03\xb8\x00\x00\x05;\x00\x00\x06\xce\x00\x00\ \x05;\x00\x00B\xd3\x00\x00\x05;\x00\x00GW\x00\x00\ N:\x00\x00G\x01\x00\x04\xbb\x04\x00\x00(\x11\x00\x04\ \xcf\x04\x00\x00(\xa1\x00\x04\xd0%\x00\x00(\xce\x00\x04\ \xe3\xc0\x00\x00\x05\xf8\x00\x04\xec0\x00\x00)1\x00\x05\ 0K\x00\x00\x06*\x00\x050K\x00\x00)\x92\x00\x05\ \x8c\x04\x00\x00C\x98\x00\x05\xa1\x05\x00\x00-\xa1\x00\x05\ \xa1\x05\x00\x00D\xbf\x00\x05\xab`\x00\x004\x95\x00\x05\ \xcf\xc7\x00\x000\x1d\x00\x1e+\xfe\x00\x004\xfc\x00*\ \xbb\x04\x00\x00\x22\x9b\x00*\xd0%\x00\x00\x22\xd3\x00*\ \xec0\x00\x00#\x0b\x00+\xcf\xc7\x00\x00#|\x00G\ \x96\xc4\x00\x00%\x05\x00Hw9\x00\x00%\xe5\x00H\ w9\x00\x002\x1a\x00L\x99b\x00\x00(s\x00S\ \x05#\x00\x00G/\x00V\x8c\x95\x00\x003}\x00W\ iz\x00\x00\x06\xf6\x00Wiz\x00\x00G\xd6\x00W\ \x96\xf9\x00\x00\x07%\x00W\x96\xf9\x00\x00H\x02\x00X\ \xbc\xb5\x00\x00,6\x00\x97\xa2\x10\x00\x00\x04\xa0\x00\xc2\ \xad\xd0\x00\x00\x0e\x0c\x01\x01\xe6\xd2\x00\x00/\xe0\x01\x01\ \xe6\xd2\x00\x00K8\x01\x18\xab\xd4\x00\x00'\x83\x01b\ |\x8e\x00\x00\x102\x01i\xab\xb0\x00\x00\x06T\x01\x8b\ p\x0e\x00\x00;\xd6\x01\x93\xf9J\x00\x00Kx\x01\xfb\ 2D\x00\x00\x10\xb6\x02\x13\x93\xa0\x00\x00\x07\x8c\x02S\ \xd0\x00\x00\x00\x08g\x02cIQ\x00\x00\x0bX\x02u\ \x0b5\x00\x00(\xfb\x02u\x0b5\x00\x00?\xc0\x02\x95\ c#\x00\x00\x15\x07\x02\x9a\xf5p\x00\x00\x0e`\x02\xac\ \x1bA\x00\x00\x1c\x91\x02\xb8\xbc\xb5\x00\x00#C\x02\xdb\ \x0d\xc0\x00\x00F+\x02\xf1,\x0e\x00\x00\x1a\xcb\x02\xf9\ \xc5\xc5\x00\x00\x03\x89\x03\x09\xe1n\x00\x009\xaa\x03\x0a\ Q\x01\x00\x006M\x03\x0d1^\x00\x00\x09\xce\x03\x1c\ \xc5*\x00\x002\xc0\x03<\x83\x03\x00\x00\x06\x98\x03K\ F\xe3\x00\x002\x85\x03KF\xe3\x00\x00?T\x03_\ I\x05\x00\x00/\x13\x03\x84\x9c\x01\x00\x00\x19%\x03\x92\ \xd2\xce\x00\x00@!\x03\xba\xdc\xc1\x00\x00!\x17\x03\xdc\ \xdc%\x00\x00\x0b\x1f\x03\xe5\xad#\x00\x00\x1e\xd9\x03\xec\ \x91\x80\x00\x00\x1b(\x04]I3\x00\x00C^\x04e\ \xac\xf5\x00\x00(>\x04z\xb0^\x00\x00=\xb8\x04z\ \xb0\xc5\x00\x00%3\x04\x80\x06\xa5\x00\x00*\x99\x04\x8c\ \xcct\x00\x00J\xf9\x04\x98I\xbc\x00\x00\x05\x17\x04\x98\ I\xbc\x00\x00=\xe4\x04\x98I\xbc\x00\x00Fb\x04\x9e\ \x84\xd5\x00\x00>>\x04\xa1m^\x00\x00\x18:\x04\xcb\ \x1aI\x00\x00\x19\xa5\x04\xd6W\xc0\x00\x00?\xf3\x04\xe9\ \x04\xab\x00\x00J\x9e\x05\x09\x86a\x00\x00!n\x05\x13\ \xccT\x00\x00\x22)\x050\xa5\x13\x00\x00\x1d\xb2\x051\ \xccT\x00\x00'\xdc\x051\xccT\x00\x00?\x8e\x05_\ . \x00\x00\x1al\x05_\xa8`\x00\x00\x0f\x8b\x05i\ <\xfe\x00\x00$b\x05v\x1b\x9e\x00\x00\x0b\xaa\x05\x8c\ \xac5\x00\x004\x07\x05\xa1\x08\xc0\x00\x00D\xe9\x05\xa3\ \x9c>\x00\x00$\x0f\x05\xa3\x9c>\x00\x00H\xc3\x05\xa8\ X\xf3\x00\x00\x03\x09\x05\xaa\x8b\xc3\x00\x00.\xaa\x05\xaa\ \x8b\xc3\x00\x00E\x17\x05\xd49Z\x00\x00I\xc7\x06\x09\ o\xb4\x00\x00)^\x06\x1bw\xbe\x00\x00JJ\x06-\ B\x0e\x00\x00#\xb4\x06-B\x0e\x00\x00H]\x069\ \x82N\x00\x00$\xaa\x069\x82N\x00\x00I!\x06<\ =\x10\x00\x00E\xfb\x06G(\x05\x00\x00&\xa1\x06M\ ?$\x00\x00\x15\xca\x06]1\xde\x00\x00\x02\x02\x06x\ \xc7\xb1\x00\x00 \xa0\x06x\xc7\xb1\x00\x001\xaa\x06\x96\ \xe7\xa4\x00\x00J\x06\x06\x9aK\x00\x00\x00\x08\x9c\x06\x9a\ \xf5C\x00\x00D\x8e\x06\x9c(\x01\x00\x00@\xb7\x06\xc5\ )*\x00\x002\xf6\x06\xcc\xd6\xa3\x00\x00,\x03\x06\xe5\ \x1f\xc4\x00\x00\x22_\x06\xe51\xc4\x00\x00'R\x07\x14\ *\x1e\x00\x00-\x1c\x07\x19\x94u\x00\x00,\xa4\x076\ \xcf`\x00\x00\x05\x89\x07\x10\x08\xac\ \x19x\x00\x00>j\x08\xba>q\x00\x00\x13\xf0\x08\xc7\ \xd2\x01\x00\x00 \xdb\x09+\x0f@\x00\x00\x16\x9e\x09>\ \x0d$\x00\x00/Q\x09AN\x12\x00\x00\x17\xc2\x09W\ \xd7\xd5\x00\x00,d\x09^\x89\xd3\x00\x00+\xd2\x09`\ \x06\xb5\x00\x00.\x02\x09g\x01\xd0\x00\x00Er\x09m\ \xcap\x00\x00 \x0c\x09}\xacQ\x00\x00\x11]\x09~\ \x0e\xa3\x00\x00!\xe3\x09\x93\xd2\xfe\x00\x002F\x09\x96\ F0\x00\x00\x14W\x09\x96U\xce\x00\x00\x14\x92\x09\xc0\ \xcbU\x00\x00+\x09\x09\xc0\xcbU\x00\x00B\xfb\x09\xc4\ O\x93\x00\x00\x17{\x09\xc4g\xff\x00\x00\x1e`\x0a\x07\ \xed^\x00\x008\xcf\x0a\x0c\x87\x0e\x00\x008\x1d\x0a\x22\ ZW\x00\x00*-\x0a_\xd7\x0e\x00\x00\x08\xda\x0a_\ \xf3\xfb\x00\x00%d\x0aif\xc9\x00\x00\x1f\x80\x0ai\ f\xc9\x00\x00-\xce\x0as>\xc3\x00\x00\x04q\x0a\x8b\ \xc3`\x00\x004d\x0a\x97\x00\x80\x00\x00\x08\x19\x0a\xa2\ Yp\x00\x00D\x03\x0a\xa8\x9a\xe4\x00\x00.x\x0a\xc0\ (\x90\x00\x00EC\x0b,\xa7!\x00\x00\x1f\x16\x0bF\ q\xee\x00\x00\x0c\xc7\x0bUq\xc1\x00\x00\x1f\xb8\x0b`\ r`\x00\x00A\xe3\x0bg\x8cn\x00\x00 j\x0bn\ \xb1\xee\x00\x00<\xc9\x0bv\x04\xf0\x00\x00\x0d\xb9\x0bz\ \xc1 \x00\x00\x05\xc8\x0b{\xc6\x8e\x00\x00\x1d\x19\x0b\x89\ w\x94\x00\x00%\xac\x0b\x89w\x94\x00\x001\xe3\x0b\xa3\ \xdc\x0c\x00\x00H0\x0b\xc8\xc7\x13\x00\x00?&\x0b\xe0\ \xa1\x13\x00\x00&\xd2\x0b\xe0\xa1\x13\x00\x00>\xf5\x0b\xf9\ \x95\xb3\x00\x00\x13m\x0b\xfb\xb97\x00\x00)\xbf\x0c\x01\ \xe6\x82\x00\x00/\x98\x0c\x1a\xb95\x00\x00.9\x0c(\ \x19\x04\x00\x00,\xe0\x0c2\xc0S\x00\x00\x03Y\x0ce\ \x0f.\x00\x00-o\x0ce\x0f.\x00\x0044\x0cs\ \x10t\x00\x00.\xd9\x0c\x96q\xc0\x00\x00\x095\x0c\x96\ q\xc0\x00\x00\x0e\xc3\x0c\x99e\x80\x00\x00\x14\xd1\x0c\x9d\ N\x00\x00\x00\x07V\x0c\xaa\xac\x07\x00\x00\x1e\x96\x0c\xb5\ \x86\x80\x00\x003;\x0c\xb5\x86\x80\x00\x00BU\x0c\xdd\ \xc2\x03\x00\x00+\x9e\x0c\xdd\xc2\x03\x00\x00C-\x0c\xe0\ \x1a\xf3\x00\x00B\x22\x0c\xfb\xe0\x8a\x00\x00\x16\x02\x0d\x04\ \xc3c\x00\x00\x15\x92\x0d\x06\xe1\xe0\x00\x00C\xc2\x0d\x11\ C/\x00\x00\x1e\x0b\x0d\x5c\xf5e\x00\x00'\x06\x0dq\ \x98\xde\x00\x00\x00\x00\x0d\x99\xf9B\x00\x00\x03\xde\x0d\x99\ \xf9B\x00\x00\x0an\x0d\x99\xf9B\x00\x00+>\x0d\x99\ \xf9B\x00\x003\xa9\x0d\x99\xf9B\x00\x00G|\x0e \ i\x22\x00\x00!\xa6\x0e.d\xa4\x00\x00*\xce\x0e7\ I\xc3\x00\x00\x04\xdd\x0e7I\xe3\x00\x00I\x87\x0e_\ \x84\xe1\x00\x00\x1c\xd4\x0ex\xa8B\x00\x00\x05C\x0ex\ \xa8B\x00\x00F\x8b\x0e\x9cN\xa3\x00\x00\x12d\x0e\xc4\ J\xf0\x00\x00\x07\xc6\x0e\xe51\xe0\x00\x00\x1b\x8d\x0e\xe8\ \xc0\x99\x00\x00\x15D\x0e\xf32\xb1\x00\x00\x18\xa4\x0e\xf3\ 2\xb1\x00\x000\xeb\x0f\x0a\xdc\x0c\x00\x00F\xce\x0f6\ \xb6\x90\x00\x00\x0f\xd9\x0f?r\xc0\x00\x00\x1b\xea\x0f]\ \xee>\x00\x00\x1cO\x0f]\xee>\x00\x001j\x0fi\ \xafT\x00\x00D^\x0f{\x1e\x14\x00\x00\x13(\x0f}\ \x11p\x00\x00\x09\x7f\x0f\x82\xa0\x8e\x00\x00\x0f\x0d\x0f\x9c\ \x97\x17\x00\x00\x0a\xd2\x0f\xa6V\x80\x00\x00@\x88\x0f\xa7\ \xb6\x04\x00\x00\x13\xad\x0f\xac[\xe1\x00\x00\x16N\x0f\xac\ [\xee\x00\x00\x17+\x0f\xb3$q\x00\x00\x11\x08\x0f\xb3\ $q\x00\x000J\x0f\xd1?\x00\x00\x004\xc0\x0f\xd6\ \xe5\xde\x00\x00;\x16\x0f\xd9\x03.\x00\x00\x1a)\x0f\xde\ {\xf0\x00\x00>\xbf\x0f\xf3\x03\x0e\x00\x00\x00\xfbi\x00\ \x00K\xb7\x03\x00\x00\x00\x92\x00<\x00a\x00 \x00h\ \x00r\x00e\x00f\x00=\x00h\x00t\x00t\x00p\ \x00s\x00:\x00/\x00/\x00p\x00e\x00r\x00s\ \x00e\x00p\x00o\x00l\x00i\x00s\x00d\x00m\ \x00.\x00g\x00i\x00t\x00h\x00u\x00b\x00.\ \x00i\x00o\x00>\x00h\x00t\x00t\x00p\x00s\ \x00:\x00/\x00/\x00p\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\x00d\x00m\x00.\ \x00g\x00i\x00t\x00h\x00u\x00b\x00.\x00i\ \x00o\x00<\x00/\x00a\x00>\x08\x00\x00\x00\x00\x06\ \x00\x00\x00Ihttps\ ://persepolisdm.\ github.io\x07\x00\x00\ \x00\x0babout_ui_tr\x01\x03\x00\ \x00\x00\x9a\x00<\x00a\x00 \x00h\x00r\x00e\x00\ f\x00=\x00h\x00t\x00t\x00p\x00s\x00:\x00\ /\x00/\x00t\x00e\x00l\x00e\x00g\x00r\x00\ a\x00m\x00.\x00m\x00e\x00/\x00p\x00e\x00\ r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00\ d\x00m\x00>\x00h\x00t\x00t\x00p\x00s\x00\ :\x00/\x00/\x00t\x00e\x00l\x00e\x00g\x00\ r\x00a\x00m\x00.\x00m\x00e\x00/\x00p\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00d\x00m\x00<\x00/\x00a\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00M\ https://telegram\ .me/persepolisdm\ \x07\x00\x00\x00\x0babout_u\ i_tr\x01\x03\x00\x00\x00\x9a\x00<\x00a\x00 \ \x00h\x00r\x00e\x00f\x00=\x00h\x00t\x00t\ \x00p\x00s\x00:\x00/\x00/\x00t\x00w\x00i\ \x00t\x00t\x00e\x00r\x00.\x00c\x00o\x00m\ \x00/\x00p\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\x00d\x00m\x00>\x00h\x00t\ \x00t\x00p\x00s\x00:\x00/\x00/\x00t\x00w\ \x00i\x00t\x00t\x00e\x00r\x00.\x00c\x00o\ \x00m\x00/\x00p\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x00d\x00m\x00<\x00/\ \x00a\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00Mhttps://t\ witter.com/perse\ polisdm\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x00A\x00b\x00o\x00u\x00t\x00 \x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10About\ Persepolis\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x06\x95\x8bv|\x80\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0aDevelopers\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x08c\x88k\x0ah\x9dk>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x07License\x07\x00\x00\x00\x0ba\ bout_ui_tr\x01\x03\x00\x00\x00\x04\ \x00O\x00K\x08\x00\x00\x00\x00\x06\x00\x00\x00\x02OK\ \x07\x00\x00\x00\x0babout_ui_tr\ \x01\x03\x00\x00\x00 \x00P\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\x00 N\x0b\x8f\x09\ {\xa1t\x06Vh\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1b\ Persepolis Downl\ oad Manager\x07\x00\x00\x00\x0b\ about_ui_tr\x01\x03\x00\x00\x00\ \x06\x81\xf4\x8b\x1d\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x12Special thanks \ to:\x07\x00\x00\x00\x0babout_ui\ _tr\x01\x03\x00\x00\x00\x04\x8bo\x80\x05\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0bTranslato\ rs\x07\x00\x00\x00\x0babout_ui_\ tr\x01\x03\x00\x00\x00\x0aR\xa0Qe\x98^R%\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11Add \ to category: \x07\x00\x00\ \x00\x0daddlink_ui_tr\x01\ \x03\x00\x00\x00\x08\x902\x96\x8e\x90x\x98\x05\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x10Advanced \ Options\x07\x00\x00\x00\x0daddl\ ink_ui_tr\x01\x03\x00\x00\x00\x04S\ \xd6m\x88\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Can\ cel\x07\x00\x00\x00\x0daddlink_\ ui_tr\x01\x03\x00\x00\x00\x0ef\xf4e9N\ \x0b\x8f\x09\x8c\xc7e\x99Y>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x16Change Downlo\ ad Folder\x07\x00\x00\x00\x0dad\ dlink_ui_tr\x01\x03\x00\x00\x00\ \x0cN\x0b\x8f\x09\x8c\xc7e\x99Y>\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x11Download \ Folder: \x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x06\ j\x19\x98-\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08\ Header: \x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x0c\ \x00I\x00P\x00 OMW@\xff\x1a\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x04IP: \x07\x00\x00\x00\x0da\ ddlink_ui_tr\x01\x03\x00\x00\ \x00\x04\x90#}P\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04\ Link\x07\x00\x00\x00\x0daddlink\ _ui_tr\x01\x03\x00\x00\x00\x14\x8f\x09Qe\ \x00 \x00C\x00o\x00o\x00k\x00i\x00e\xff\x1a\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eLoad c\ ookies: \x07\x00\x00\x00\x0dadd\ link_ui_tr\x01\x03\x00\x00\x00\x08\ f\xf4Y\x1a\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0cMore Options\x07\x00\ \x00\x00\x0daddlink_ui_tr\ \x01\x03\x00\x00\x00\x04\x00O\x00K\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x02OK\x07\x00\x00\x00\x0daddli\ nk_ui_tr\x01\x03\x00\x00\x00\x08\x90#\ c\xa5W\xe0\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ Port:\x07\x00\x00\x00\x0daddlin\ k_ui_tr\x01\x03\x00\x00\x00\x0a\x00P\x00\ r\x00o\x00x\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x05Proxy\x07\x00\x00\x00\x0daddli\ nk_ui_tr\x01\x03\x00\x00\x00\x0aS\xc3\ qgOMW@\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x0aReferrer: \x07\x00\x00\x00\ \x0daddlink_ui_tr\x01\x03\ \x00\x00\x00\x0cO\x7fu(\x80\x05N\xe3t\x06\xff\x1a\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cUser a\ gent: \x07\x00\x00\x00\x0daddli\ nk_ui_tr\x01\x03\x00\x00\x00\x14\x00<\ \x00b\x00>j\x94T\x0d\x00<\x00/\x00b\x00>\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12F\ ile name: \x07\x00\ \x00\x00\x18after_downloa\ d_src_ui_tr\x01\x03\x00\x00\x00\ \x14\x00<\x00b\x00>Y'\x5c\x0f\x00<\x00/\x00\ b\x00>\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d<\ b>Size: \x07\x00\x00\x00\ \x18after_download_\ src_ui_tr\x01\x03\x00\x00\x00\x04\x00\ O\x00K\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08 \ OK \x07\x00\x00\x00\x14after_\ download_ui_tr\x01\x03\ \x00\x00\x00\x08\x95\x8bU_j\x94hH\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0d Open Fil\ e \x07\x00\x00\x00\x14after_do\ wnload_ui_tr\x01\x03\x00\x00\ \x00\x18\x00<\x00b\x00>N\x0b\x8f\x09[\x8cb\x10\ \xff\x01\x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x1aDownload \ Completed!\x07\x00\ \x00\x00\x14after_downloa\ d_ui_tr\x01\x03\x00\x00\x00\x14\x00<\x00\ b\x00>\x90#}P\x00<\x00/\x00b\x00>\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0dLi\ nk: \x07\x00\x00\x00\x14aft\ er_download_ui_t\ r\x01\x03\x00\x00\x00\x16\x00<\x00b\x00>S\xe6[\ Xp\xba\x00<\x00/\x00b\x00>\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x10Save a\ s: \x07\x00\x00\x00\x14afte\ r_download_ui_tr\ \x01\x03\x00\x00\x00\x0eN\x0dQ\x8d\x98oy:kd\ \x8a\x0a`o\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1eDo\ n't show this me\ ssage again.\x07\x00\x00\x00\ \x14after_download_\ ui_tr\x01\x03\x00\x00\x00\x0e\x95\x8bU_N\ \x0b\x8f\x09\x8c\xc7e\x99Y>\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x14Open Download\ Folder\x07\x00\x00\x00\x14afte\ r_download_ui_tr\ \x01\x03\x00\x00\x00 \x00P\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\x00 N\x0b\x8f\x09\ {\xa1t\x06Vh\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1b\ Persepolis Downl\ oad Manager\x07\x00\x00\x00\x14\ after_download_u\ i_tr\x01\x03\x00\x00\x00\x1a\x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \ e\xe5\x8a\x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0ePe\ rsepolis Log\x07\x00\x00\x00\ \x10log_window_ui_t\ r\x01\x03\x00\x00\x00\x08V\xdeX1UO\x98L\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0cReport \ Issue\x07\x00\x00\x00\x10log_wi\ ndow_ui_tr\x01\x03\x00\x00\x00\x14\ \x00<\x00/\x00b\x00>\x00\x22\x00 ]\xf2[X\ W(\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15\x22 already exis\ ts!\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x82\x00<\x00b\x00>\x00<\x00c\x00e\x00n\ \x00t\x00e\x00r\x00>]\xf2}\x93e\xb0X\x9e\ \x90Nkd\x90#}PN\x86\xff\x01\x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \ \x00 \x00 `\xa8x\xba[\x9a\x89\x81Q\x8dR\xa0\ QeN\x00k!U\xce\xff\x1f\x00<\x00/\x00c\ \x00e\x00n\x00t\x00e\x00r\x00>\x00<\x00/\ \x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00r
This li\ nk has been adde\ d before! \ Are\ you sure you wa\ nt to add it aga\ in?
\ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00N\x00\ <\x00b\x00>\x00<\x00c\x00e\x00n\x00t\x00\ e\x00r\x00>kdd\xcdO\x5c\x5c\x07l8N\ ER*\x96d]\xf2N\x0b\x8f\x09v\x84j\x94h\ H\xff\x01\x00<\x00/\x00c\x00e\x00n\x00t\x00\ e\x00r\x00>\x00<\x00/\x00b\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00{This operation\ will delete \ \ downloaded file\ s from your hard\ disk
PERMANE\ NTLY!\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x16\x00<\x00b\x00>\x90#c\xa5ex\x00<\x00\ /\x00b\x00>\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x14Connections<\ /b>: \x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x18\x00<\x00b\x00>]\xf2N\x0b\x8f\x09\ \x00<\x00/\x00b\x00>\xff\x1a\x00 \x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x13Downloa\ ded: \x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x1e\x00<\x00b\x00>\x98\x10\ \x8a\x08Ri\x99\x18fB\x95\x93\x00<\x00/\x00b\ \x00>\xff\x1a\x00 \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1c\ Estimated tim\ e left: \x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x14\x00<\x00b\x00\ >\x90#}P\x00<\x00/\x00b\x00>\xff\x1a\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0dLink\ : \x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00(\x00<\x00b\x00>b\xb1kI\xff\ \x01`\xa8N\x0d\x80\xfdy\xfb\x96d\x98\x10\x8a-O\ GR\x17\xff\x01\x00<\x00/\x00b\x00>\x08\x00\x00\ \x00\x00\x06\x00\x00\x00-Sorry!\ You can't remov\ e default queue!\ \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x16\x00<\x00b\x00>r\xc0aK\x00<\x00\ /\x00b\x00>\xff\x1a\x00 \x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0fStatus\ : \x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x1a\x00<\x00b\x00>P\xb3\x8f8\x90\x1f^\xa6\x00\ <\x00/\x00b\x00>\xff\x1a\x00 \x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x16Transfer\ rate: \x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x002\x00<\x00c\x00e\ \x00n\x00t\x00e\x00r\x00>`\xa8x\xba[\x9a\ \x89\x81~|~\x8cU\xce\xff\x1f\x00<\x00/\x00c\ \x00e\x00n\x00t\x00e\x00r\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00)
Do\ you want to con\ tinue?
\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x14\x00A\ \x00r\x00i\x00a\x002\x00 Y1S\xbbV\xde\ a\xc9\x08\x00\x00\x00\x00\x06\x00\x00\x00\x15Aria\ 2 did not respon\ d\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x16\ \x00A\x00r\x00i\x00a\x002\x00 Y1S\xbb\ V\xdea\xc9\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Aria2 did not re\ spond!\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00H\x00A\x00r\x00i\x00a\x002\x00\ Y1S\xbbV\xdea\xc9\xff\x01\x8a\xcbz\x0dP\ \x19\xff\x01\x00P\x00e\x00r\x00s\x00e\x00p\x00\ o\x00l\x00i\x00s\x00 \x5c\x07W(\x00 \x00\ 2\x00 y\xd2_\x8c\x91\xcd\x8af\xff\x01\x08\x00\x00\ \x00\x00\x06\x00\x00\x00FAria2 did\ n't respond! be \ patient! Persepo\ lis tries again \ in 2 seconds!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x14\x00A\x00r\ \x00i\x00a\x002\x00 g*\x90#c\xa5\xff\x01\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x13Aria2 \ disconnected!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x002\x8a\xcbj\xa2\ g\xe5`\xa8v\x84}\xb2\x8d\xef\x90#}\xdaN&\ \x91\xcde\xb0U_R\xd5\x00 \x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x08\x00\ \x00\x00\x00\x06\x00\x00\x00'Check yo\ ur network & Res\ tart Persepolis\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x08N\x0b\ \x8f\x09[\x8cb\x10\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11\ Download Complet\ e\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x0a\ N\x0b\x8f\x09]\xf2c\x92z\x0b\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x12Download Sch\ eduled\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x08N\x0b\x8f\x09\x95\x8bY\xcb\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0fDownload \ Starts\x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x0aN\x0b\x8f\x09]\xf2P\x5ckb\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x10Downloa\ d Stopped\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x16_qrGd\x1c\x5c\x0b\ ]\xe5QwkcW(N\x0b\x8f\x09\xff\x01\x08\x00\ \x00\x00\x00\x06\x00\x00\x00(Download\ is in progress \ by video finder!\ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00\x0a\x93\ /\x8a\xa4\x00 \x00-\x00 \x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x08Error - \x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00\x0ev|u\x1f\x93/\ \x8a\xa4\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x08Error...\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x06\x93/\x8a\xa4\xff\x1a\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x07Error: \ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00\x08\x96\ \xb1\x85\xcf\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0cHide options\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x0eg\x00\x5c\x0f\ S\x16\x81\xf3|\xfb}qS#\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x17Minimize to \ system tray\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00\x06]\xf2[\x8cb\x10\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Moving\ is\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x06b~N\x0dR0\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x09Not Found\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00\x0azz\x95\x93N\x0d\ \x8d\xb3\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19No\ t enough free sp\ ace in:\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x0ad\xcdO\x5cY1eW\xff\x01\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x1dOperat\ ion was not succ\ essful!\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x1cd\xcdO\x5cY1eW\xff\x01\ \x8a\xcbQHP\x5ckbN\xe5N\x0b\x98^R%\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00HOper\ ation was not su\ ccessful! Please\ stop the follow\ ing category fir\ st: \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x0ad\xcdO\x5cY1eW0\x02\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x1dOperation\ was not success\ ful.\x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x14\x00P\x00e\x00r\x00s\x00e\x00p\x00\ o\x00l\x00i\x00s\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0aPersepolis\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00,\x00P\x00e\x00r\ \x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00 \ q!l\xd5\x90#c\xa5\x81\xf3\x00 \x00A\x00r\ \x00i\x00a\x002\x08\x00\x00\x00\x00\x06\x00\x00\x00#\ Persepolis can n\ ot connect to Ar\ ia2\x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00&\x00P\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\x00 \x5c\x07W(\x00 \x002\ \x000\x00 y\xd2_\x8c\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x1bPersepolis is \ shutting down\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00,\x00P\x00e\ \x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\ \x00 kcW(V\x17\x8af\x90#c\xa5\xff\x01\ \x8a\xcbz\x0dP\x19\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\ \x00,Persepolis is \ trying to connec\ t! be patient!\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x00,\x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00 kcW(V\x17\x8af\x90#c\xa5\xff\ \x01\x8a\xcbz\x0dP\x19\xff\x01\x08\x00\x00\x00\x00\x06\x00\ \x00\x00+Persepolis is\ trying to conne\ ct!be patient!\x07\x00\ \x00\x00\x14mainwindow_sr\ c_ui_tr\x01\x03\x00\x00\x002\x00P\x00\ e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00\ s\x00 ]\xf2b\x10R\x9f\x91\xcde\xb0\x90#c\ \xa5\x81\xf3\x00 \x00a\x00r\x00i\x00a\x002\x08\ \x00\x00\x00\x00\x06\x00\x00\x00)Persepo\ lis reconnected \ aria2 successful\ ly\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x0c\x8a\xcbz\x0dP\x19\x00.\x00.\x00.\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0ePlease Wa\ it...\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x10\x8a\xcb~|~\x8cN\xe5N\x0b\x98^\ R%\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00&Pl\ ease resume the \ following catego\ ry: \x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x10\x8a\xcbQHP\x5ckbN\x0b\x8f\x09\x90\ 2^\xa6\x08\x00\x00\x00\x00\x06\x00\x00\x00$Ple\ ase stop downloa\ d progress first\ .\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x12\ \x8a\xcbQHP\x5ckbN\xe5N\x0b\x98^R%\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00*Plea\ se stop the foll\ owing category f\ irst: \x07\x00\x00\x00\x14mainw\ indow_src_ui_tr\x01\ \x03\x00\x00\x00\x10\x8a\xcbP\x5ckbN\xe5N\x0b\x98\ ^R%\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00$P\ lease stop the f\ ollowing categor\ y: \x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x12\x8a\xcbQHP\x5ckbN\xe5N\x0bN\x0b\ \x8f\x09\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00*Pl\ ease stop the fo\ llowing download\ first: \x07\x00\x00\x00\x14mai\ nwindow_src_ui_t\ r\x01\x03\x00\x00\x00\x08\x8a\xcb\x91\xcd\x8af0\x02\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x11Please \ try again.\x07\x00\x00\x00\x14m\ ainwindow_src_ui\ _tr\x01\x03\x00\x00\x00\x0cOGR\x17]\xf2P\ \x5ckb\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eQ\ ueue Stopped!\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00\x0cOGR\x17\ ]\xf2[\x8cb\x10\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Queue complete\ d!\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x0a\x5c1}\xd2\x00.\x00.\x00.\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x08Ready...\x07\x00\x00\ \x00\x14mainwindow_src\ _ui_tr\x01\x03\x00\x00\x00 kcW(\ \x91\xcde\xb0\x90#c\xa5\x81\xf3\x00 \x00A\x00r\ \x00i\x00a\x002\x00.\x00.\x00.\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x15Reconnecti\ ng Aria2...\x07\x00\x00\x00\x14\ mainwindow_src_u\ i_tr\x01\x03\x00\x00\x00\x1e\x91\xcde\xb0U_\ R\xd5\x00 \x00P\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x12Restart Persep\ olis\x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x12\x5c\x07b@\x90xv\x84N\x0b\x8f\x09P\ \xb3\x90\x01\x81\xf3\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aS\ end selected dow\ nloads to\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x06P\xb3\x90\x01\x81\xf3\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x07Send to\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x0a\x98o\ y:N;\x89\x96z\x97\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x10Show main Wind\ ow\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x08\x98oy:\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0cShow options\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x16g\xd0\ N\x9b\x98\x05v\xeeN&g*P\xb3\x8f8b\x10\ R\x9f\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00+So\ me items didn't \ transferred succ\ essfully!\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x08c\x92^\x8fe\xb9_\x0f\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Sort b\ y\x07\x00\x00\x00\x14mainwindow\ _src_ui_tr\x01\x03\x00\x00\x00\x12\ \x8a\xcbQHP\x5ckbb@g\x09N\x0b\x8f\x09\ \xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x19Stop\ all downloads f\ irst!\x07\x00\x00\x00\x14mainwi\ ndow_src_ui_tr\x01\x03\ \x00\x00\x00\x12\x8a\xcbQHP\x5ckbN\xe5N\x0b\ N\x0b\x8f\x09\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00#\ Stop the followi\ ng download firs\ t: \x07\x00\x00\x00\x14mainwind\ ow_src_ui_tr\x01\x03\x00\x00\ \x00\x04\x91\xcd\x8af\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09\ Try again\x07\x00\x00\x00\x14ma\ inwindow_src_ui_\ tr\x01\x03\x00\x00\x00\x08\x8a\xcb\x91\xcd\x8af\xff\x01\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aTry ag\ ain!\x07\x00\x00\x00\x14mainwin\ dow_src_ui_tr\x01\x03\x00\ \x00\x00\x08\x8a\xcbz\x0dP\x19\xff\x01\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x0bbe patient!\ \x07\x00\x00\x00\x14mainwindow_\ src_ui_tr\x01\x03\x00\x00\x00\x16g\ *[\x89\x88\xdd\x00 \x00f\x00f\x00m\x00p\x00\ e\x00g\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x18f\ fmpeg is not ins\ talled!\x07\x00\x00\x00\x14main\ window_src_ui_tr\ \x01\x03\x00\x00\x00\x06y\xfbR\xd5\xff\x01\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x09finished!\x07\ \x00\x00\x00\x14mainwindow_s\ rc_ui_tr\x01\x03\x00\x00\x00\x08Y\x1a\ ]\xe5\x93/\x8a\xa4\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0c\ muxing error\x07\x00\x00\x00\ \x14mainwindow_src_\ ui_tr\x01\x03\x00\x00\x00\x04\x95\xdcj_\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x19your sy\ stem in 20 secon\ ds\x07\x00\x00\x00\x14mainwindo\ w_src_ui_tr\x01\x03\x00\x00\x00\ \x06]\xf2N\x0b\x8f\x09\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0b downloaded\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x0eN\x0b\x8f\x09\x00 \x00(\x00\ &\x00D\x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x09&\ Download\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x0e}\xe8\x8f/\x00 \x00(\x00&\x00E\x00\ )\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05&Edit\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0ej\x94hH\x00\ \x00(\x00&\x00F\x00)\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x05&File\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x0eSTR\xa9\x00 \x00(\x00&\x00H\x00\ )\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05&Help\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0eOGR\x17\x00\ \x00(\x00&\x00Q\x00)\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x06&Queue\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x0ej\xa2\x89\x96\x00 \x00(\x00&\x00V\ \x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05&Vie\ w\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x1c\x00<\x00b\ \x00>\x97\xf3\x8a\x0aj\x94hHr\xc0aK\xff\x1a\ \x00<\x00/\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x1aAudio file \ status: \x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x18\x00<\x00b\x00>Y\x1a]\ \xe5r\xc0aK\xff\x1a\x00<\x00/\x00b\x00>\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x16Muxi\ ng status: \x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x14\x00<\x00b\x00>\ r\xc0aK\xff\x1a\x00<\x00/\x00b\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0fStatu\ s: \x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x1c\x00<\x00b\x00>\x89\x96\x8a\x0aj\x94hH\ r\xc0aK\xff\x1a\x00<\x00/\x00b\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x1aVideo\ file status: \x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x04\x95\xdce\ \xbc\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05About\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x06\x902\x88LN\ -\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Activ\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x0eR\xa0Qe\ e\xb0N\x0b\x8f\x09\x90#}P\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x15Add New Down\ load Link\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x06N\x0b\x8f\x09_\x8c\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0eAfter downlo\ ad\x07\x00\x00\x00\x10mainwindo\ w_ui_tr\x01\x03\x00\x00\x00\x04YWu\ (\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Apply\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x04\x98^R%\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x08Categor\ y\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x18n\x05\x96d\ N\x0b\x8f\x09R\x17\x88hN-v\x84b@g\x09\ \x98\x05v\xee\x08\x00\x00\x00\x00\x06\x00\x00\x00 Cl\ ear all items in\ download list\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04[\x8cb\x10\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x08Complete\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x04\x90#}\xda\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0bConnecti\ ons\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x0e^\xfa\ z\xcbe\xb0N\x0b\x8f\x09OGR\x17\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x19Create new\ download queue\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x04N\x0b\x8f\x09\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x08Download\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x12\x7fn^\x95\x98\ \x05v\xeeQ*QH\x00\x0aN\x0b\x8f\x09\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x22Download \ bottom of\x0a the l\ ist first\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x06]\xf2N\x0b\x8f\x09\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0aDownloaded\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04}\xe8\x8f/\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x04Edit\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x08}Pg_fB\x95\x93\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x08End Time\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x04\x93/\x8a\xa4\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x05Error\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04\x96\xe2\x95\x8b\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x04Exit\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x04j\x94hH\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x04File\x07\x00\x00\x00\x10mai\ nwindow_ui_tr\x01\x03\x00\ \x00\x00\x08j\x94hHT\x0dz1\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x09File Name\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04STR\xa9\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x04Help\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x04\x96P\x90\x1f\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0bLimit Speed\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x04\x90#}P\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x04Link\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x1c\x5c\x07v\xeeRM\x90xS\ \xd6v\x84\x98\x05v\xeeT\x11N\x0by\xfbR\xd5N\ \x00R\x17\x08\x00\x00\x00\x00\x06\x00\x00\x00-Mov\ e currently sele\ cted items down \ by one row\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x1c\x5c\x07v\xeeRM\x90xS\xd6v\ \x84\x98\x05v\xeeT\x11N\x0ay\xfbR\xd5N\x00R\ \x17\x08\x00\x00\x00\x00\x06\x00\x00\x00+Move \ currently select\ ed items up by o\ ne row\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x06\x95\x92\x7fnN-\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0aNot Active\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x08f\xabP\x5cN\x0b\x8f\x09\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0ePause Do\ wnload\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x06v~R\x06k\xd4\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x0aPercentage\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00 \x00P\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\x00 N\x0b\x8f\x09\ {\xa1t\x06Vh\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1b\ Persepolis Downl\ oad Manager\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x04\x90x\x98\x05\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0bPreferences\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x04\x902^\xa6\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x08Progress\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x04\x5cl`'\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x0aPropert\ ies\x07\x00\x00\x00\x10mainwind\ ow_ui_tr\x01\x03\x00\x00\x00\x04OG\ R\x17\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Queu\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x0ay\xfb\x96d\ kdOGR\x17\x08\x00\x00\x00\x00\x06\x00\x00\x00\x11\ Remove this queu\ e\x07\x00\x00\x00\x10mainwindow\ _ui_tr\x01\x03\x00\x00\x00\x08V\xdeX1\ UO\x98L\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fRe\ port an issue\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x08~|~\x8cN\x0b\x8f\x09\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fResume\ Download\x07\x00\x00\x00\x10ma\ inwindow_ui_tr\x01\x03\ \x00\x00\x00\x14\x98oy:\x00/\x96\xb1\x85\xcf|\xfb\ }qS#W\x16y:\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x1aShow/Hide syst\ em tray icon\x07\x00\x00\x00\ \x10mainwindow_ui_t\ r\x01\x03\x00\x00\x00\x04\x95\xdcj_\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x09Shut Down\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x04Y'\x5c\x0f\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x04Size\x07\x00\x00\x00\x10\ mainwindow_ui_tr\ \x01\x03\x00\x00\x00\x08c\x92^\x8fe\xb9_\x0f\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x07Sort by\x07\ \x00\x00\x00\x10mainwindow_u\ i_tr\x01\x03\x00\x00\x00\x08\x95\x8bY\xcbfB\ \x95\x93\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0aStar\ t Time\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x0a\x95\x8bY\xcbkdOGR\x17\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x10Start this \ queue\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x06\ ]\xf2\x95\x8bY\xcb\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07\ Started\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x04r\xc0aK\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06\ Status\x07\x00\x00\x00\x10mainw\ indow_ui_tr\x01\x03\x00\x00\x00\ \x08P\x5ckbN\x0b\x8f\x09\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0dStop Download\ \x07\x00\x00\x00\x10mainwindow_\ ui_tr\x01\x03\x00\x00\x00\x0aP\x5ckbk\ dOGR\x17\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fS\ top this queue\x07\x00\ \x00\x00\x10mainwindow_ui\ _tr\x01\x03\x00\x00\x00\x0eP\x5ckb\x00/S\ \xd6m\x88N\x0b\x8f\x09\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x14Stop/Cancel Dow\ nload\x07\x00\x00\x00\x10mainwi\ ndow_ui_tr\x01\x03\x00\x00\x00\x16\ _qrGd\x1c\x5c\x0b]\xe5Qw\x00 \x00(\ \x00&\x00I\x00)\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0d\ V&ideo Finder\x07\x00\x00\ \x00\x10mainwindow_ui_\ tr\x01\x03\x00\x00\x00\x0c_qrGd\x1c\x5c\x0b\ ]\xe5Qw\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0cVi\ deo Finder\x07\x00\x00\x00\x10m\ ainwindow_ui_tr\x01\ \x03\x00\x00\x00\x04j\xa2\x89\x96\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x04View\x07\x00\x00\x00\x10main\ window_ui_tr\x01\x03\x00\x00\ \x00\x16\x00A\x00r\x00i\x00a\x002\x00 Y1\ S\xbbV\xdea\xc9\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x16Aria2 did not \ respond!\x07\x00\x00\x00\x12pro\ gress_src_ui_tr\x01\ \x03\x00\x00\x00\x14\x00A\x00r\x00i\x00a\x002\x00\ g*\x90#c\xa5\xff\x01\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x13Aria2 disconn\ ected!\x07\x00\x00\x00\x12progr\ ess_src_ui_tr\x01\x03\x00\ \x00\x00,\x00P\x00e\x00r\x00s\x00e\x00p\x00\ o\x00l\x00i\x00s\x00 kcW(V\x17\x8a\ f\x90#c\xa5\xff\x01\x8a\xcbz\x0dP\x19\xff\x01\x08\ \x00\x00\x00\x00\x06\x00\x00\x00,Persepo\ lis is trying to\ connect! be pat\ ient!\x07\x00\x00\x00\x12progre\ ss_src_ui_tr\x01\x03\x00\x00\ \x00\x08\x8a\xcb\x91\xcd\x8af0\x02\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x11Please try a\ gain.\x07\x00\x00\x00\x12progre\ ss_src_ui_tr\x01\x03\x00\x00\ \x00\x08\x8a\xcb\x91\xcd\x8af\xff\x01\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0aTry again!\x07\x00\ \x00\x00\x12progress_src_\ ui_tr\x01\x03\x00\x00\x00\x06N\x0b\x8f\x09_\ \x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0eAfter\ download\x07\x00\x00\x00\x0epr\ ogress_ui_tr\x01\x03\x00\x00\ \x00\x04YWu(\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ Apply\x07\x00\x00\x00\x0eprogre\ ss_ui_tr\x01\x03\x00\x00\x00\x08N\x0b\ \x8f\x09\x8c\xc7\x8a\x0a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x14\ Download Informa\ tion\x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00\x08N\x0b\x8f\ \x09\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10D\ ownload Options\x07\ \x00\x00\x00\x0eprogress_ui_\ tr\x01\x03\x00\x00\x00\x08]\xf2N\x0b\x8f\x09\xff\x1a\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bDownlo\ aded:\x07\x00\x00\x00\x0eprogre\ ss_ui_tr\x01\x03\x00\x00\x00\x0e\x98\x10\ \x8a\x08Ri\x99\x18fB\x95\x93\xff\x1a\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x14Estimated \ time left:\x07\x00\x00\x00\x0ep\ rogress_ui_tr\x01\x03\x00\ \x00\x00\x08\x90#c\xa5ex\xff\x1a\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x17Number of c\ onnections: \x07\x00\x00\x00\ \x0eprogress_ui_tr\x01\ \x03\x00\x00\x00\x04f\xabP\x5c\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x05Pause\x07\x00\x00\x00\x0epro\ gress_ui_tr\x01\x03\x00\x00\x00\ \x00P\x00e\x00r\x00s\x00e\x00p\x00o\x00\ l\x00i\x00s\x00 N\x0b\x8f\x09{\xa1t\x06V\ h\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bPerse\ polis Download M\ anager\x07\x00\x00\x00\x0eprogr\ ess_ui_tr\x01\x03\x00\x00\x00\x04~\ |~\x8c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Res\ ume\x07\x00\x00\x00\x0eprogress\ _ui_tr\x01\x03\x00\x00\x00\x04\x95\xdcj_\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x09Shut D\ own\x07\x00\x00\x00\x0eprogress\ _ui_tr\x01\x03\x00\x00\x00\x06r\xc0aK\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Stat\ us: \x07\x00\x00\x00\x0eprogres\ s_ui_tr\x01\x03\x00\x00\x00\x04P\x5ck\ b\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04Stop\x07\ \x00\x00\x00\x0eprogress_ui_\ tr\x01\x03\x00\x00\x00\x0aP\xb3\x8f8\x90\x1f^\xa6\ \xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0fTran\ sfer rate: \x07\x00\x00\x00\x0e\ progress_ui_tr\x01\x03\ \x00\x00\x00\xb0\x00<\x00b\x00>\x00<\x00c\x00e\ \x00n\x00t\x00e\x00r\x00>\x8a\xcb\x91\xcde\xb0\ U_R\xd5\x00 \x00P\x00e\x00r\x00s\x00e\ \x00p\x00o\x00l\x00i\x00s\xff\x01\x00<\x00/\ \x00c\x00e\x00n\x00t\x00e\x00r\x00>\x00<\ \x00/\x00b\x00>\x00<\x00b\x00r\x00>\x00<\ \x00c\x00e\x00n\x00t\x00e\x00r\x00>g\xd0\ N\x9bf\xf4R\xd5W(\x91\xcde\xb0U_R\xd5\ \x00 \x00P\x00e\x00r\x00s\x00e\x00p\x00o\ \x00l\x00i\x00s\x00 _\x8cbMg\x03u\x1f\ eH\x00<\x00/\x00c\x00e\x00n\x00t\x00e\ \x00r\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00{
Restart\ Persepolis Plea\ se!
\
Some\ changes take ef\ fect after resta\ rting Persepolis\
\x07\x00\x00\x00\x11se\ tting_src_ui_tr\x01\ \x03\x00\x00\x00 \x91\xcde\xb0U_R\xd5\x00 \x00\ P\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00\ i\x00s\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13R\ estart Persepoli\ s!\x07\x00\x00\x00\x11setting_s\ rc_ui_tr\x01\x03\x00\x00\x00\xc0\x00<\ \x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\ \x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\ \x00y\x00>\x00<\x00p\x00>c\x07[\x9a\x00 \ \x00J\x00S\x00O\x00N\x00-\x00R\x00P\x00C\ \x00/\x00X\x00M\x00L\x00-\x00R\x00P\x00C\ \x00 O:g\x0dVhv\xe3\x80}v\x84W\xe0\ \x86_0\x02S\xefu(W\xe0\x86_\xff\x1a\x001\ \x000\x002\x004\x00 \x00-\x00 \x006\x005\ \x005\x003\x005\x00\xa0\x98\x10\x8a-W\xe0\x86_\ \xff\x1a\x006\x008\x000\x001\x00<\x00/\x00p\ \x00>\x00<\x00/\x00b\x00o\x00d\x00y\x00>\ \x00<\x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x95

S\ pecify a port nu\ mber for JSON-RP\ C/XML-RPC server\ to listen to. P\ ossible Values: \ 1024 - 65535 Def\ ault: 6801

<\ /body>\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x5c\x00<\x00h\x00t\x00m\x00l\x00\ >\x00<\x00h\x00e\x00a\x00d\x00/\x00>\x00\ <\x00b\x00o\x00d\x00y\x00>\x00<\x00p\x00\ >h<_\x0f\x00 R\x06\xff\x1ay\xd2\x00<\x00\ /\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00\ y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x004Format HH:MM\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00j\x00<\x00h\x00t\x00m\x00\ l\x00>\x00<\x00h\x00e\x00a\x00d\x00/\x00\ >\x00<\x00b\x00o\x00d\x00y\x00>\x00<\x00\ p\x00>\x8a-\x7fnN\x0b\x8f\x09Y1eW_\ \x8cv\x84\x91\xcd\x8afk!ex0\x02\x00<\x00\ /\x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00\ y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00OSet number of t\ ries if download\ failed.

\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x9e\x00<\x00h\x00t\x00m\x00l\x00>\x00<\ \x00h\x00e\x00a\x00d\x00/\x00>\x00<\x00b\ \x00o\x00d\x00y\x00>\x00<\x00p\x00>\x8a-\ \x7fn\x91\xcd\x8af\x95\x93\x96\x940\x02uv\x00 \ \x00H\x00T\x00T\x00P\x00 O:g\x0dVh\ V\xdeP\xb3\x00 \x005\x000\x003\x00 V\xde\ a\xc9fB\xff\x0cN\x0b\x8f\x09{\xa1t\x06Vh\ g\x03\x91\xcd\x8afN\x0b\x8f\x090\x02\x00<\x00/\ \x00p\x00>\x00<\x00/\x00b\x00o\x00d\x00y\ \x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\xac\

\ Set the seconds \ to wait between \ retries. Downloa\ d manager will \ retry downloads\ when the HTT\ P server retur\ ns a 503 respo\ nse.

<\ /html>\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00^\x00<\ \x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\ \x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\ \x00y\x00>\x00<\x00p\x00>\x8a-\x7fn\x90>\ fBy\xd2ex0\x02\x00<\x00/\x00p\x00>\ \x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\ \x00/\x00h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\ \x00\x06\x00\x00\x00@

Set \ timeout in secon\ ds.

<\ /html>\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00v\x00<\ \x00h\x00t\x00m\x00l\x00>\x00<\x00h\x00e\ \x00a\x00d\x00/\x00>\x00<\x00b\x00o\x00d\ \x00y\x00>\x00<\x00p\x00>kdR\x9f\x80\xfd\ W(`\xa8v\x84O\x5cim|\xfb}qS\xef\ \x80\xfdq!l\xd5kc^8\x90KO\x5c0\x02\ \x00<\x00/\x00p\x00>\x00<\x00/\x00b\x00o\ \x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\ \x00l\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00[

This feature\ may not work in\ your operating \ system.

\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ j\x00<\x00h\x00t\x00m\x00l\x00>\x00<\x00\ h\x00e\x00a\x00d\x00/\x00>\x00<\x00b\x00\ o\x00d\x00y\x00>\x00<\x00p\x00>O\x7fu\ (Y\x1aP\x0b\x90#}\xdaS\xefN\xe5R\xa0\x90\ \x1fN\x0b\x8f\x090\x02\x00<\x00/\x00p\x00>\x00\ <\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00\ /\x00h\x00t\x00m\x00l\x00>\x08\x00\x00\x00\x00\ \x06\x00\x00\x00c

Using\ multiple connec\ tions can help s\ peed up your dow\ nload.

\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x04\ d\xcdO\x5c\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Ac\ tion\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x04S\xd6m\x88\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Cancel\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x04\x98^R%\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x08Category\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x04f\xf4e9\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x06Change\x07\x00\x00\x00\x0ds\ etting_ui_tr\x01\x03\x00\x00\ \x00\x1af\xf4e9\x00 \x00A\x00r\x00i\x00a\ \x002\x00 \x98\x10\x8a-\x8d\xef_\x91\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x19Change Ari\ a2 default path\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x06\x91M\x82r\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0eColor sch\ eme: \x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x04\x90#}\ \xda\x08\x00\x00\x00\x00\x06\x00\x00\x00\x0bConne\ ctions\x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\x04\x98\x10\ \x8a-\x08\x00\x00\x00\x00\x06\x00\x00\x00\x08Defa\ ults\x07\x00\x00\x00\x0dsetting\ _ui_tr\x01\x03\x00\x00\x00\x08N\x0b\x8f\x09\ \x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\x10Do\ wnload Options\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x06]\xf2N\x0b\x8f\x09\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0aDownloaded\ \x07\x00\x00\x00\x0dsetting_ui_\ tr\x01\x03\x00\x00\x00\x08j\x94hHT\x0dz1\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x09File N\ ame\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x06[WW\x8b\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Font:\ \x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00\x1c\x82\xe5\x9e\xded\xca\x95\ \xdc\x95\x89c\x09\x92\x15\xff\x0c\x5c\x07\x96\xb1\x85\xcf\x89\ \x96z\x970\x02\x08\x00\x00\x00\x00\x06\x00\x00\x00)H\ ide main window \ if close button \ clicked.\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x06\ W\x16y:\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07\ Icons: \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x16\x96\ ;kb|\xfb}q\x902Qewaw j\ !_\x0f\xff\x01\x08\x00\x00\x00\x00\x06\x00\x00\x00\x12K\ eep system awake\ !\x07\x00\x00\x00\x0dsetting_ui\ _tr\x01\x03\x00\x00\x00Xd\xf7S\xd6g\x00Y\ '\x90#}Pex\xff\x1a\x00<\x00b\x00r\x00\ /\x00>\x00<\x00s\x00m\x00a\x00l\x00l\x00\ >\x00(\x82\xe5p\x0f\x89\xbdVhN\x00k!P\ \xb3\x90\x01Y\x1aP\x0b_qrG\x90#}P\x00\ )\x00<\x00/\x00s\x00m\x00a\x00l\x00l\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00hMaxim\ um number of lin\ ks to capture:(If br\ owser sends mult\ iple video links\ at a time)\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x0a\x90\x1aw\xe5\x98\ ^W\x8b\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x13N\ otification type\ : \x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x04\x90\x1aw\xe5\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0dNotifica\ tions\x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x08\x90#c\ \xa5ex\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x17N\ umber of connect\ ions: \x07\x00\x00\x00\x0dsetti\ ng_ui_tr\x01\x03\x00\x00\x00\x0aV\x17\ \x8afk!ex\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x11Number of trie\ s: \x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x04\x00O\x00K\x08\ \x00\x00\x00\x00\x06\x00\x00\x00\x02OK\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x06v~R\x06k\xd4\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0aPercentage\x07\x00\x00\ \x00\x0dsetting_ui_tr\x01\ \x03\x00\x00\x00\x04\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0bPreferences\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x0ac\x09N\x0be\xb0c\x09\x93u\ \x08\x00\x00\x00\x00\x06\x00\x00\x00\x0ePress \ new keys\x07\x00\x00\x00\x0dset\ ting_ui_tr\x01\x03\x00\x00\x00\x04\ \x90\x00Q\xfa\x08\x00\x00\x00\x00\x06\x00\x00\x00\x04Qu\ it\x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x0e\x00R\x00P\x00C\ \x00 W\xe0\x86_\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x11RPC port numbe\ r: \x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00 \x95\x8bj_f\ BU_R\xd5\x00 \x00P\x00e\x00r\x00s\x00\ e\x00p\x00o\x00l\x00i\x00s\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x19Run Persepo\ lis at startup\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x06_\xebcw\x93u\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x08Shortcut\x07\x00\ \x00\x00\x0dsetting_ui_tr\ \x01\x03\x00\x00\x00\x06_\xebcw\x93u\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x09Shortcuts\x07\ \x00\x00\x00\x0dsetting_ui_t\ r\x01\x03\x00\x00\x00\x04Y'\x5c\x0f\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x04Size\x07\x00\x00\x00\x0dse\ tting_ui_tr\x01\x03\x00\x00\x00\ \x06Y'\x5c\x0f\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x06Size: \x07\x00\x00\x00\x0dsett\ ing_ui_tr\x01\x03\x00\x00\x00\x04r\ \xc0aK\x08\x00\x00\x00\x00\x06\x00\x00\x00\x06Sta\ tus\x07\x00\x00\x00\x0dsetting_\ ui_tr\x01\x03\x00\x00\x00\x06j#_\x0f\xff\ \x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x07Style\ : \x07\x00\x00\x00\x0dsetting_u\ i_tr\x01\x03\x00\x00\x00\x0e\x90>fB\x00 \ \x00(y\xd2\x00)\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x13Timeout (secon\ ds): \x07\x00\x00\x00\x0dsettin\ g_ui_tr\x01\x03\x00\x00\x00\x10_qr\ Gd\x1c\x5c\x0b]\xe5Qw\x90x\x98\x05\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x14Video Fin\ der Options\x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x06\x97\xf3\x91\xcf\xff\x1a\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x08Volume: \x07\x00\x00\x00\x0d\ setting_ui_tr\x01\x03\x00\ \x00\x00\x0aR\xa0QeOGR\x17\xff\x1a\x08\x00\x00\ \x00\x00\x06\x00\x00\x00\x0eAdd to qu\ eue: \x07\x00\x00\x00\x0atext_u\ i_tr\x01\x03\x00\x00\x00\x04S\xd6m\x88\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x06Cancel\x07\x00\ \x00\x00\x0atext_ui_tr\x01\x03\x00\ \x00\x00\x0ef\xf4e9N\x0b\x8f\x09\x8c\xc7e\x99Y\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16Chang\ e Download Folde\ r\x07\x00\x00\x00\x0atext_ui_tr\ \x01\x03\x00\x00\x00\x08S\xd6m\x88Qh\x90x\x08\x00\ \x00\x00\x00\x06\x00\x00\x00\x0cDeselect\ All\x07\x00\x00\x00\x0atext_ui\ _tr\x01\x03\x00\x00\x00\x0c\x00I\x00P\x00 O\ MW@\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x03I\ P:\x07\x00\x00\x00\x0atext_ui_t\ r\x01\x03\x00\x00\x00\x04\x90#}P\x08\x00\x00\x00\x00\ \x06\x00\x00\x00\x05Links\x07\x00\x00\x00\x0at\ ext_ui_tr\x01\x03\x00\x00\x00\x04\x00\ O\x00K\x08\x00\x00\x00\x00\x06\x00\x00\x00\x02OK\x07\ \x00\x00\x00\x0atext_ui_tr\x01\x03\ \x00\x00\x00 \x00P\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x00 N\x0b\x8f\x09{\xa1\ t\x06Vh\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1bPe\ rsepolis Downloa\ d Manager\x07\x00\x00\x00\x0ate\ xt_ui_tr\x01\x03\x00\x00\x00\x08\x90#\ c\xa5W\xe0\xff\x1a\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05\ Port:\x07\x00\x00\x00\x0atext_u\ i_tr\x01\x03\x00\x00\x00\x0a\x00P\x00r\x00o\ \x00x\x00y\x08\x00\x00\x00\x00\x06\x00\x00\x00\x05Pr\ oxy\x07\x00\x00\x00\x0atext_ui_\ tr\x01\x03\x00\x00\x00\x04Qh\x90x\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0aSelect All\ \x07\x00\x00\x00\x0atext_ui_tr\x01\ \x03\x00\x00\x00\x1c\x00<\x00b\x00>\x97\xf3\x8a\x0aj\ \x94hHr\xc0aK\xff\x1a\x00<\x00/\x00b\x00\ >\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1aAu\ dio file status:\ \x07\x00\x00\x00\x1bvideo_\ finder_progress_\ ui_tr\x01\x03\x00\x00\x00\x18\x00<\x00b\x00\ >Y\x1a]\xe5r\xc0aK\xff\x1a\x00<\x00/\x00\ b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\x16\ Muxing status: <\ /b>\x07\x00\x00\x00\x1bvideo_fi\ nder_progress_ui\ _tr\x01\x03\x00\x00\x00\x1c\x00<\x00b\x00>\x89\ \x96\x8a\x0aj\x94hHr\xc0aK\xff\x1a\x00<\x00\ /\x00b\x00>\x08\x00\x00\x00\x00\x06\x00\x00\x00\x1a<\ b>Video file sta\ tus: \x07\x00\x00\x00\x1bvi\ deo_finder_progr\ ess_ui_tr\x01\x03\x00\x00\x00\x08\x90\ 2\x96\x8e\x90x\x98\x05\x08\x00\x00\x00\x00\x06\x00\x00\x00\ \x10Advanced option\ s\x07\x00\x00\x00\x13ytaddlink_\ src_ui_tr\x01\x03\x00\x00\x00\x0a\x97\ \xf3\x8a\x0ah<_\x0f\xff\x1a\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0dAudio format:\ \x07\x00\x00\x00\x13ytaddlink_s\ rc_ui_tr\x01\x03\x00\x00\x00\x0cd\xf7\ S\xd6Z\x92\x9a\xd4R\x17\x88h\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x10Fetch Media \ List\x07\x00\x00\x00\x13ytaddli\ nk_src_ui_tr\x01\x03\x00\x00\ \x00\x16kcW(d\xf7S\xd6Z\x92\x9a\xd4\x8c\xc7\ \x8a\x0a\x00.\x00.\x00.\x08\x00\x00\x00\x00\x06\x00\x00\ \x00\x16Fetching Media\ Info...\x07\x00\x00\x00\x13yta\ ddlink_src_ui_tr\ \x01\x03\x00\x00\x00\x14\x8a\xcb\x8f8Qeg\x09eH\ v\x84\x89\x96\x8a\x0a\x90#}P\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x1fPlease enter\ a valid video l\ ink\x07\x00\x00\x00\x13ytaddlin\ k_src_ui_tr\x01\x03\x00\x00\x00\ \x08\x90xd\xc7h<_\x0f\x08\x00\x00\x00\x00\x06\x00\ \x00\x00\x0fSelect a form\ at\x07\x00\x00\x00\x13ytaddlink\ _src_ui_tr\x01\x03\x00\x00\x00\x0c\ _qrGd\x1c\x5c\x0b]\xe5Qw\x08\x00\x00\x00\ \x00\x06\x00\x00\x00\x0cVideo Find\ er\x07\x00\x00\x00\x13ytaddlink\ _src_ui_tr\x01\x03\x00\x00\x00\x0a\ \x89\x96\x8a\x0ah<_\x0f\xff\x1a\x08\x00\x00\x00\x00\x06\ \x00\x00\x00\x0dVideo format\ :\x07\x00\x00\x00\x13ytaddlink_\ src_ui_tr\x01\ \x00\x00\x1d\xef\ \x00\ \x00h\x1fx\x9c\xd5<\x09t\x5c\xd5uO\xbb4\xa3\ \xcd\xb60\xb61\xe2I\x18!\xdb\xd2\xc86\xb6\x01!\ d\xcb\xb2\x15\x09k\xb3$\xaf\x18\xec?3o\xa4\x8f\ \xff\xcc\x1f\xff\xffG\x0bdkB\xb3\xc1Ih\x13\x1c\ \x92\x9a$\x90\xa6p\xc0i\x9bf\x83\x86\xa4\x84@R\ \x02)\x09II\xd2\x90\x9c8\x94\x108@\xc3!\xf4\ \x04hI\xef[\xfe6\xf3\x97\x91!\x9c\xd38\xe2\x8d\ 4\xff\xddw\xdf\xbd\xf7\xdd\xfd\xfd\x9e{\x92+\xbe\xff\ _'o\xfeA\xcb\xea\x7f9z\xdb7\x7fy\x07B\ \xa84k\xec@\xa8\xaa\x1d\xa1\x8a\xcb\x10*\xbf\x80\x8f\ \xd5c|\xdc{\x98\x8f\x87\xaeDh\xb4\x1b\xc6\x0aT\ \xfe\x8dr\x846=\x87\xca\x1f\x83\xf1\x22\x05\x95\xff\x10\ \xe6\x5ct+*\x7f\xea~\x80s\x04\x95?\xbf\x01\xa1\ \xcd\x18Ul\xd8\x0d\xbf\xdf\xc0\xc7\xcd_B\x15={\ a\xfc\x0d\xaa\xb8\xad\x02\xa1\xee\x1e>\xee{\x16U\xdc\ }\x14\xa1\xfe\x7fB\x15\x8f}\x0f\xa1\xcb?\x80\x9a\xd7\ \xbf\x81\xd0\xce>\xb4\x8e\xae\xd3\xf9\x1e\xb4\x8e\xc2\xef\xfc\ :ZG\xe1v\xbe\x84\xd6\xd3\xe7b\x87\xd1;N<\ \x08\xe3I48w)B]\xb7\xf2q\xfb\x18\x9a\xac\ 8\x1f\xf0\xecD\xfbn\xbc\x19\xa1\x1d\x83h\xbf|-\ \xecg\x8e\x8f\x87\xde@\xfbO\xbc\x0a\xbf\xdf\xc5\xc7+\ ;\xd0\x81\xfb\xbe\x8a\xd0%}\xe8\x93\xb77\xc2^u\ \xf4\xc0\x17\x7f\x88\xd0\xb2;JJ~\xfb8\xe0s9\ \x1f\x8f\xbe\xbfd\xc5\xdd?\x81}//\x89\xbf\xf3\xa3\ \x08-WK\xe4\xbb\xff\x11\xf6wo\x89\xfc\xfc\xd3\x08\ mX^\xf2\x83\x1b\xff\x1e\xa1\xab\xfaK^\xdf\xb4\x13\ \xa1\xb3+J\x97}\xfcs\x08\xd5\x9c_:\x09\xe0P\ \xa4\xbb41\xb4\x07\xa1\xfa\x92\xd2\x5ct\x0b\xd0\xeb'\ |\xdc3\x5czs\x02\xf0]]V\xfa\xe9W\xb2\x08\ 5\x95\x95\x9e:\xa7\x0f\xa1\x0b\xd3\xa5\xf7P\xbcb\x17\ \x96\xfe\xa2\x0e\xe8z\xe0\x9b\xa5/u\xd4#\xb4F*\ }\xf5\xa1\x87\x10*\xfb}Y\xcd\xe9\x0cBW\x5cZ\ \x16\xd9S\x82\xd0\xae\xdf\x97\xd5m\xbc\x1a\xa1\xe8Ke\ \xab\x1fZ\x87P_\x7fYG\xc5]\xf0\xdc\x17\xcaz\ \xde_\x06\xfb\x8d\x96\xed\x1ex\x0a\xe8\xf3<\x1f\xc7\xef\ +;2\x04\xf4\xbf\xec?\xcb\xae?\x09\xf3[&\xcb\ \x9e|\x12\xe8\x5cwW\xd9\xd3_\x04|\xd6\xed/{\ \xfe\xaf\xde\x8b\xd0\x05\x8d\xe5\xe4\xd4+\x80\xefy\xe57\ >j\x00\x1d\xd6\x94\xdf2t\x1fB\x95b\x1c}\x9c\ \x8f\x07\x97\x97\x7f\xe6\xfa\x7fGhl\xa0\xfc\xb64\xe0\ \x81\xd7\x95?\xb2j\x08\xa1\xd6\x86\xf2'\xf6\x03\xfe{\ n.\x7f\xb6\xfcn\x84\x8e\xdcP\xfe\xc7'v\x01\xdd\ ?_\xb1\xe1\x0b\xcb\x10j\xbf\xafb\xe3\xa3S@\xd7\ /\xf2q\xcf\xd2\x8a#1\x8c\xd0\xf9\x0fV\x1c\xb9\x13\ \xe4\xe2\xac[*f\xcf\xf9\x0c\xd0\xed\xaa\x8a\x1bO\x01\ \xbd\xfaAl\xaa\x01\xde\xfes+\xee<\xf02\xec\xaf\ \xa6\xe2\xae\x1b\xbe\x03\xfb8\xc8\xc7\xfd{+k\xd4\xaf\ \x80\x9cMV\x9e3\xf7-X\xaf\xac\xb2\xe7r\xe0\xeb\ \x81\xf7W\x8el[\x03t\xfeY\xe5U\x1b\x7f\x05R\ _Z9\xff\xbd/!\xd41\xcb\xc7m\xffPy\xe2\ \x99\xbfE\xe8\xea\xcfV~z7\xe5\xd7u\x95'\xdb\ \x81.\x13\xa8\xf2\xa1\xb5\x94\x9e\x7fQ\xf9\xe8\x13\x9fG\ \xe8\xe2\xd7*\x9f>\x0f\xe4\xaes[\xe5\xd3\x1ba\xdc\ \xf8\xf3\xaa\xe8M \xafKn\xaajZ\xd7\x8c\xd0\xa5\ \x0bU+?\x91\x03yz\xa4j\xebc\x80\x7f\xe5\xf7\ \xabz\x86\x96 \xb4\xe2\x97|\xecm\xaf\xba\xb2\x0d\xbe\ _\xf9TU2\xf3\xcfp\xde\x1e\xad\xfa\x9b\xab@\xae\ \xa7\xfe\xb7\xea\xe4F\xe0\xd3\x81\x96\xaa?\xbe\x0axO\ |\xa4\xba\xfc\x91?\x80\x5c\xddX\xbd\xf7g\xb0\xff\xf6\ \xa9\xea\xe9\xce\xdb\x11\xaa}w\xf5\xfbv\xc3:\x03\xfb\ \xab\xef\xfeM\x0d\xc8\xfdO\xf98\x16\xa9>\xb5r\x1e\ \xc6w\xd6\xaco\xd8\x8e\xd0\xb9\xa7jz\xeb`\xbf=\ [k\xfaF\x97\x22t\xde\x07j\xf6\xff\x14\xf8s\x89\ ^s\xf5\x87\x7f\x0c\xfb\xf8F\xcd\xd1J\x90\xaf\xee\xaf\ \xd6L\x97\x80\x80\xee\xbf\xbf\xe6]\xa7@>\xcf~\xbc\ \xe6\xdd\xf5\xb0\xcf\x8e\x87k>\xfe8\xeck\xfb\x07k\ N\x0c\x00~\xe7\xec\xae9\xb1\xf7\xdf`\xfcH\xcd\xfd\ \x8f\xc09\xdez'\x1f\xf7^_\xf3\xe0\xd8\xc7\x01\xfe\ \xb6\x9a\x07\xa7\xff\x84\xd0\xda;#U/\x00\xff\x87\x1a\ #\xb5\x1f\x04y\x1d\x1c\x8f\xb4\x1e\xda\x8f\xd0\x96\xafG\ \x8e\xfc\x14~\x8f<\x129\xf2\xf2\xeb \xd7?\x8c\xc8\ \xa9\x87\x11Z\x7f\x98\x8f\xddzD\xef\x05\xfeUl\x8e\ \xdc\xf0\x1d\xaa\x0f\xf4\xc8'\x11\xc8_\xcdo\x22\xb7\x1f\ \x84s\xb1/\x15\xb9\xbf\xfd&\xc0\xf3\xc3\x91\xffx\xf2\ Y8g\x1f\x8bv\xdc\xd1\x02rzgt\xe0\xf8\x8b\ \x085\xbc\x18\xdd{\xfc\xdb\x00\xef\xf6\xe8Q\x0d\xe6O\ \xfeO4\xd5\x0e\xe7\xb6\xe7\xd6\xe8\xf4\x8dpN:\xda\ \xa2\x99/\xc1s#\x1f\x8b\xce\x96\xff\x1e\xce\xf7`\xf4\ \xdao\x83\x9cU\xb5D\xaf\xfb.\x9c\xe7\xf6%\xd1\x0f\ \xcf}\x02\xe89\xc8\xc7\xed(\xfa\xf9'kAN\x0f\ E\xff\xf5{ \xa7\xe3\xd7G\x7f}\x1b\x8c\x1b/\xe0\ \xe3\xf8;\xa2\xaf\xde\xfce\x84V\x9d\x8c\xbe\xf6u\xa0\ \xcb\xd58\xfa\xfa\xbd\x17\xc3>\x97\xd5\x96\xfc\xf6}\xb0\ \xeeK\xb5\xab\xee\x05y\xbd\xac\xb4\xb6}%\xe8\xb1K\ /\xa8\xddt\xff$\xc8\xebU\xb5\xa4!\x06\xbf\xbf\xc1\ \xc7\xfe\x8bk\xf5F8W\x97\x9d\xa8=q\x1c\xe4:\ \xba\x9d\x8fM\x1f\xaa\xfd\x14\x81\xfd\x9f\xf3p\xed\xad\xa3\ \x8f\xd5\xbf\xa8\xbd\xebT\x15\xd0\xf7\xc5\xda\xaf~\x00\ \xfe\xde\xf7;>N}\xae\xf6\x9e\x8f<\x00\xe7\xa5\xb1\ \xf6\x97\x0f\x80\xfc\x5c\xac\xf3q\xefwk\x7f\xbd\x0a\xce\ \xc7\xd4\xc1\xba\xca\xd3\xbf\x06\xfaE\xeb\x96\xf4w\xc1\xfc\ \xf3\xeb\x0e\xbfB`\x1f\xa4\xee\xf8-p\x0e\xe0\xc4\x7f\ \xeaU\xd0\xff\xe5\xbb\xf9X\xfb#>n}\x81\x8f;\ \xde\xc9\xc7C\xef\xad\x8f%\xe1|l\xdd_\x7f\xf1\x10\ \xe5\xd3\xe3\xf5G\xae?\x0dz\xea\xbe\xfa\xf9;\xe1\xfb\ \xca\xc3|<\xb8\xbb\xfe\xe4(\xc8\xcf\xcam\xf5\x0f^\ \x01t\xae\xc9\xd5\x7fw+\xc8\xc9\xe1\xa1\xfa\xa77\x02\ \x1e\x17|\xb3\xfew\xf7\x7f\x0a\xce\xe1T\xfd\xcb\x9b\xe0\ \xdc\xe1\x13|\xec\xfdPC\x84\xd2\xfb\xe0W\x1a\xb6~\ \x0d\xf8|\xd6\x1f\x1a\xb6i@\x87\xb6\xa9\x86\xab^\xec\ \x85\xf1O|\xdc\xd6\xdfp]s\x13\xd0}[\xc3\xbb\ \x96\x80\x5cDojx\xdf\xe7\x80\x7fM?k8\xf9\ \xc9\xb3a7W6\xfc\xdd>\xa0\xcb\x9e\x87\x1b\xee\xf8\ \x1a\xd0}\xd5\x1f\x1aN]\x09x\x9e\xdb\x06#\xf0\xbf\ \xf9\xde\x86/\xaf9\x0er~\x8c\x8f\x97\x7f\xa7\xe1G\ \xdb\x80\x0a\xfdO5\xfcx\x0d|\x7f\xf8\x81\x86'\x9e\ \x06\xba\x0c\x7f\xb6\xe1\xe7e\xc0\x9f\xd6/7\xfc\xea:\ \xd8\xc7\xd8+\x0d/\x97\x81\xfc\xa2\xd7eP\x82\x8f\x01\ \x85\xd1_\xa3\x1e$!\x8cf\x90\x86\x08J\xa1\xcb\xe1\ \x93\x01\xff\xb2HG\xdd\xa8\x0b\xfee\xe1\xef\x1a\xfcF\ \xe0\x93\x8a\x14$\xc3\xe7$J\xa3\x18\x9a\x86\xcf\x06<\ \x9fCq\xf8M\x86o{\xdf\xd4\xec\x1ex^B\xbd\ \xd5\x94\xa1\x95\xf03\xd4#\xe1\x19\x8d\xa4.\x9f1\x8c\ \xac\xde\xdd\xd5\x95%\x9aN\xb2\xaa\x22\xeb\xc9tlZ\ 6fr\xf1\x98\xac\xf6\x06\x7f\xdd\xd3%\xf5\x82\xcc\xa1\ \xa8\x14Ws\xc6\x91\x9c|\xc4\xd0J\xe8\xd6?\x1d\xba\ u\x03\xfe\xae\xc0\xcf4d\xf0y\xc0\x97\x0ck\xd0$\ \xa0\x10gD\xc0\xf0\x09\xa3\xf1B\xe4,\x84\x1a\xfb\xe8\ t\x10\x1b\xc1a\x95\x18S\xa92\x03t-\x08\x95\xfd\ t\xbe\xe23\x8f\xf2C\x11g\x9eo2K\xd7\x87\xbf\ H\x96P$\x0b\x84\xc2\xde\xf2\xf2~\xe0\xc34\xb1\x99\ ?\xa0*I\xce{\x8f\xd5\xd6\x800\x85B\xb7\xc9\x99\ \x07\xd4\x97\x9cMl\xf3q\x00G\x09\xa8\x80jS\x1d\ (V\x0f\x12)hv%\x1a\x02\xb4\xec\xe7\xcb\x87\xc6\ }\x9f\xadfG3\x83\x8e\xd9O\x0f\xc3\x13>O\xb7\ 2\xbc4&|\xd3\x82\xbcT\xad\xaa\xe8\x18@qk\ \x85\xfaa\xba\xd1\x84\xaa\x1e\x93\x89\xee\xbb\xfer4b\ \x1d\x0b\xd5\x16!\x0bJ\xed\x88\xaa\x91\x10Q\xf1\xd4\x14\ \x1e\xcf\xd5\x02U\xa8\x8c\x1b.\x19\xaf\x18W5\xa3\xdb\ gJ\x04\xa6h0i\x1e-8&h\xea\xfc\x82\xcf\ \x84\xd5\x10\xf7P\x83\xe6\xa5\x93\xec5#\x13$E4\ -\x80\x87k\x98Z\xe1\x8a\x84X\xa2\x95\x03:\xe5\xd0\ ivN\x9d\x12Q\xbbW'\x1a\x06\x1d\x951|!\ \xc6\xc0\xc0\xc5\xc1L\x8e23h\x0a*f\x5c<\x0e\ Pe\xa6\xe5\xa9\x11\xa4O9\x14TO\xbcw@V\ \x08\xceHi\xd2\xd3\x15\xef\xe5+\xac\x90R`\xea\x8e\ $\x85D\x1f\xd1\xb5\x84\xcb\x08\xf1\xc5\xa6\x98\x03B\xcf\ \xf1\x8c'\xf0:\x00>)_[4\xdcF@\x183\ m\xb3\x9b\x7f\xb2\x0f\x05\xc6xl7\xfc\x87\x02i\xca\ \x03b\x03X\x05t\x8d3\xfai\xf9{\xb7\x91\x02H\ Y\x92\xc1l\xd7!\xf06\x89\x8d\xe6\xdb\x19,\xdc\x8d\ ,\xf3\xc4\xa8\xc2n1\xb7o\xad\xb3\x0a6oi\x84\ ~5\x9dU\x88A\x92-\x94\x16a\x9b\xe0\x8b\x8a\xa3\ k\xd3\xd5A\x0fJYz\x92m\xca\xfa\xc3k\x17\xf0\ &\x99\xb2\x99u\x1c\xec\xb4\x93k\x0e\xe8\x8d\x94o\xd2\ ,\xc1\x92^\xcc\x02\x03 uO1iK3\xb3h\ \x08\x8f\x87X\xaa\x93\x1bM\x1d>S\xa9O\xc3_2\ \xf0\xe4,\x13\x1f\xf3\x14\xc4\xac\xe5\x9bw\xaa\x99\x0b\x0d\ \xac\xcf\xa8s`7\xc1T\xa7\x89\xae\x83\xf8\xc3\x11\x90\ \xe4L,\x18\x99\xe5.\x11\xb0\xac\x83\x05\xbc\x891\xdf\ C\xff\x07\xed\xef\xed\xf5B\xfc1Y\xed\x05\x17V\x1b\ \x86\xcf\xd3\xb6nv\xc0\x1fV\xa7)\xc8FE\x9d>\ 2'g\x00\xa6\x03\x5c\x1bSg\x0as\x11\xb8T\xe4\ \x18s\xb2L+\xc6\x99p\xa7\x1d\xb4\xab\x9d\x00\xa8\x9a\ \x81\x87t=G\xfc\xc16[B\xd5\x8a\xae\x00}F\ %a\x9eaJ\xf9\xdcb\x81;\x8b\x0aW+\x96\x14\ \x0d,\xde\x02&\xf3\xb2n\xe8-\x8c\x02i`\xb4\x80\ \xebV\x11\xff-\x84\xb9G8\x9c\xdc\x15\xe8E\xbb\x04\ t\xcchB\x8f\x0d\x06=\xad\xc2g\xccx\xe2\xf4\x8d\ L\xcd\xc8g\xebpvq\x91\xff\xa6\x84\xf4&\xd8\xaa\ t\xf6\xb5\x0e\xd7\x80\xea\x1aS\x9bS\x0e]\xc3\xbes\ \xaf~\x1au29\xf1:\x01\xdb\x18\xdd\xdc\xfb\xca\xd7\ *\x1a\x1c\xcd\x1ep\xabA@z\xa7\xe8\xd9\xa0v\x00\ \xcfH:\x8e\x13\x90k0\x0c\xe0{\xc5I\x0a\xecj\ \x0b\xf6\xf8_\x1f\xd8\xdb\x055\x87\xf5\x9c\xf80'e\ \x0c\xea\x04\xc2L,\x1b\xfc\x88m\xeb\xe9\x12KX\xda\ \xca\x97!o\x042D\x12\x86\x9f\xfbk\xcf\x085\x91\ \x14!,\x97\xba\xd3E\x93\x1f\x0b\xaf\xdbm\xd4\xe8_\ \xe2\xcc\xcd\x98\x17\xcc\xd5\x05y1cC\x8e\xadH\xc5\ /\xc1\xfe\xa6\xa1\x17X\xa6 \xc9\xb4_\x9ca;\x0e\ \xf8N\x80\xb3\xd2\x07\xaal\x17\xfcL\xc1\x7fG\xacO\ -E0\xe6\xba|\xc6\xd0\x88I\xa2\x8e\x0d\x9e\x93\x15\ \x05'\x09\xd5\xff^,\xc1\xe6A\x07\xce\xa5\xc0(\xe9\ 8\xa5\xa9i\xca\x1c\x0d\x18\xab%qR\xd6\x8f\xf5\xc4\ \xb5\xde\xf1]\x13#}\xa3\xbbF\xa7\x86\x0f\xb6\x14\xcf\ \xa1\x92\xc8\x19pH\x16|\xd1\x98\xc0\xab,8\xd4\x16\ \xc1'j\x12MN\xf0\xff\xcal\xdd\x8c\xe0\x8dm\x1a\ R\xf0\x0d\xd5@&'\xf8Qj\x05\xba\xab<\xb6`\ \xfc\xd6\xc5\xc1\xe6\xb3\xf4\x00\xd5\xdbZ\x14\xb7\xfe2\x84\ [\x1aI\xab\xb3\xde\xdc\x92(3M\xad-\x1b$\xad\ c9\xc3\xed\xd4\xf1\x1c\xc9\x11\xca)\xc6\xc0\xd6>x\ \xd2\xd4\xefz+\x9cT\xddX\x04\xdf`'\x9co\xfd\ LqP\x15\xca\xe3//\x8b\xdd\x04\xfb\xe9W3\x19\ \x92`\xae\xb4\xc3j\xfb\x82\xc7\x02\xfc\x0e\xd7\xd1\xf1\x02\ \xbe\xcc\xe1\xc9\x90d1\xb0\xb7[\x0e\x22a^\x92*\ D\x89\xb3\xcf\xf4z\xf9\xef2s!\xfd\xd6^\x0dk\ \xef\xd2\x0d9\x0d1*\x04\xabr\x9a`\x85\xa4\x8cb\ \x908C?\xca\x17\xde5\x963H\x98.\xc9\x81\xd4\ \xd1sC\xcd\xc7>@?\x81\x9ec\xb2\xcdOP\x96\ \xc9/\xf18CN\xa9\xe7\x1eJ\x12\xfe\xfe\x94\xa7\x13\ \xd9I=1U\xd3\x16Z\xf0AP\xd6\x09\x89:F\ B8\x93$%\xe5\x14\x83K]K\xb8<\xad\x11\xf8\ \xf3\x98gZ0D\xf7!|\x03]\xd9\x90\x8c\x5cQ\ \xc2\xd4\xe3\x88\x08\xe6\x1d&\xd1`Z\x85\x9ez\x1e4\ =g\xb9P^k.\x875Y\xaa\x03\xc2'\x0c\xc7\ \x91\x14\xb3\xf4\xce\x02\xc5ff\xb6\xae\x11\x19\x10\x95}\ G\x85 \xc7L\x87\x87\x9d\xb5PXkj\x85\x9d\xaa\ \xcb<&\xd4\x8c!gr\xc46\x8d\xc1X\xb5\x83)\ \xe1\xf9\x96M\x0e\xa1\xd0D\xc2\x88b\x94d\xa6\xc9\xe1\ \x0d\xf5i\xb2\xb4\x09\x94}\x12gT\xcad=\xabf\ \x92o\xf5*\xcb=W\x09q\xbaN\x16\xb5L\x8b\xb0\ \xb7\xd7Xr\x9d`i\x03N\xe4\x16o\xa7\x98\xc9\x08\ \x7f\xc6\xf4\x05\x0a\x1d#,\xdc\xaeMb\x85i\xd8R\ F\xd8\x17{k\x03\xd6\xd6\xf8!\xe1;\x03g\x08g\ A\xb3\x03\xd3Z\x1c\xc9Ulh2XZ\xe6\xeeP\ \xfd\xbd\x09\xeb\x04x\x9c\x0c\xf3?\xdb\x5c\xa4H\x0aU\ \xc0\x15t\x82m\x82\xa2e#\xb5\xccDJOp\xf5\ L\xc2\x88=\x05\xca\x84\xb05\xa8\x920}J\x9d\xc9\ .':?Zm\xf0C\xddw*\xd7\xb2 ux\ \x96\xf9\xc2\xfe\x19\x928\xc6\x9d\x8b\x0c1\xe6T\xed\x18\ n\xc3\x13D7$-?\xf9\x1cd\x9aB#b\x8f\ \xb4\x98\x19\x04/\x1e\xb6$\xb2%IN_;{a\ \xc1\x9eL\xcc\x90dN!!\x07\x06\xa3!\x8b\x5c\x92\ \x08\xe1\x5c\x8b\xd9\xfa\xcf\x06MI\x13B\x90f\x0f\xa4\ \xb3l\x057\xc2\x8d\x0e\xa8j6\x1b\x86n=8i\ \x1aS\xd7\x18\xe2\x06G:d\x97\xa6\xa9\x1a\xee\x0cQ\ \x8d\xf6\xf4\x18\xfd\x977=\x16\x8b\x05O\x8fX\xd3\xed\ \x94N\x15\x9b\x1a\xa6\x93W\xa31a \xcd\xc0\xd23\ \xfb7('\x09x^V\xf6/H\xc9\x8f\x08AO\ \xc3\xcf\xb5\x8e\xdc\xaf\xc6\x8e\xc5iv0l\xbbCu\ \x88!\x8eP\xc2\xf4k\xad\x85\xcf\x1e\x913rZ\xbe\ \x96P\xcd\xae/\xe8\xe0\xc4\x81>\x90\x16\xc26e\xa6\ 9x\x22\x80\x9b\x95|\x0e\xd7\x8c\x82Z\x1dPsa\ \xaa{;(\x12/\xcf\xdb\xd4\xaef\xf0\x1a\x17\xba\x8f\ *\x80\x04;\xfc2;\x0667\xcf\x1d\xb3}W\x88\ \x03\xa9Z\xd7s\x89\x04\xd1\xf5TN)B\xb3\xbf\x19\ ,\xb8V\xe7\xc9\x90\x14\xab\x0b\xa8\x0e\xce\x10\xe1\xed\x98\ :[\xb6\xf4yaY\x82g\x1dx}E\xce\x13\xba\ \xc1\xc0\x1d\xe2q\x85H:\xc1:\x9c(\xf0\xc3\x09N\ \xa9\x8a\xa2\xc2v\xa7\xad\xca\x06\xc4U\x9an\x84{\xad\ o\x0bKBN]S\xa0\xfe\x8e\x14\xab\xa2\x0f\xf8X\ [s3\x5c~M\xce\x10\xeb/\xa6\x19\xd3@\xe1\xe8\ \x82\x83\xf4y\xcb\xecY\xa8\x9c\xef\xb0\xa6\xe0\x98\xb2]\ \x0a#G\xcf\x153|a\xee\x8b7\x8e\xdc\xac\xd2\xdf\ x\x19\xe2\xb4g\xea\x0c\xfe\xaf\xcf\xe4\x0c\x832\x9a\x06\ d\xc1k\xcdXk=\xebZ\x8b\x07!\xa7]~H\ F\xa4\x88tO\xba\x84\xf89\x16\xae\x1dn\x5c\x0dm\ \x81b\xca}IJ$\x97kR,\xf2\xe4mB~\ }\x18\xf2E\xe3>\xe1\x83\xbb\xc6\xb0\xca\xf7\x9cLq\ \x93\x1c^\x16\xf7,0\x04\x0f\xf3,\x8d`+\xdb\xb5\ \x0e,5byXXbN\x97}\xe4\x94\x10\xd5\xde\ \xe6\xa9\xc4\xcc\xe2.\xc5\xd4m@\xeb\x85\xca\xd9/\xc9\ F\xa8\x19=\xea\x09\x5c\xb2\xea\x98\xa6\x96tV2\x0d\ +p\xd6DA\xa8\x98\x0a\xe4z\x81V\x82\x179\xa9\ .\x04\xd3\x96U5\x09T\xa0\x95\xb3H\xd9)o_\ \x9cG=p\xee\x10L3\xac\x12S\xb1\xba\xdd\xd6\xe4\ m\x02C\xf0\xcesi\xe2\xa3\xad\xc3\xf4t\xdc\x07\xb9\ |\x03\xe24C*2\xd3\xda\xce\xc0\xd7\xac\x92\xe5\x93\ \xd4\xe6\xf4\x1a\xa7q\xb1H\x98\xd5\xd4i\xd8\x82\xce\xed\ J\x08\xff\x0f\xbd\x0d\x16r\xdd[e\x03\xaf\xf0\xa5\xed\ b\xd1\xed\xf6\xa6\xe1\x99\xb1\xfc@\x08\x0dUO\xa4\xf2\ \xd9z\x86\x14\xb4ON1\x14\xdc\xec\x89\xaa\xa9\x9fM\ \xe7\xd4\xaf\xf6\xb5D\xa0\x01\x0a\xd7Y\xee\xf2]m\x05\ \x1ap\xa5\x92\xb8;*94y\xfd\x1e\x9a\x1f2\xe3\ \x8d\x10e\xbd\xda\x01\xce\x1d\xd09A6r\x90\x09\xab\ \xa8\x19\x0ct\xa9H9\xf1\xb6\x99\xbcPd\x82\xd6~\ Bu\xe8:\x16\xea\xba\xcd\x85i\xe8\xec\x80\xdc\x0d\xfa\ \xac\x09\xd3\x22P&2w$t\x9d\x8e\xbc\x90\xda\x0c\ ^\x82\x83\xea\xa5\x8b\x8d\x9fw@dE\xfb\xae\xec\x98\ \xbdPT\xe9R\x0a\x22\x05u+\xc1e\xbb\xceSXi\xafQ0\x12\xcb-\ $\x5c\xd1\x94\x1d\xea1\xc0aP6@df\x16}\ 9\x9ck\x18o\x88%\x94\x1a\xa3'\xdd\x06]A\xb1\ \xa5h\x92\x16x)`\xbc\x9fA\x0e\x13\xcd\xfc\x85<\ cJ\x06\xb4\xa8\x98\xf2(\xeb%\xe2\xb9\xa4\xc2\x0a\x85\ \xed\xf2\xf36\xcb\xc2\x5c\xa6lU8L\x07\xc5\x0c\x08\ \xb8qq8S\x93*\x18;^+\x10\xe9)C\xa4\ 95`\x99\xd3O\x099J\xcb!\xb0\xd6\x98\x1f\x90\ \xb1\xb8\xa6:\xba\xa7\xaa&i}6\x1e\xe2\xee\xec`\ }M\x5cs\x16\x1a\xcd\xc2\xdaMaG\x95\xbd\xb7\x95\ T\xb1\xb8\x8a\x22\xc2*\x86\xec\xa4\x99\x15\x07|U\xa2\ \x1dOO\x99\x9a0,\xb3\x13\x08\xcf\x81q\xc4\x82\x18\ \x82\xe2f\xab|\xa8[\xd5\xeb4\x13j3\x1d\xb9\x01\ \x15$$m\xc2\xb0\x1c\x9b\xc8.\xd0\x0c\xe3\x063\xc5\ \x18\xa6-\xdb\xf2\x93I61\xda\xcc\xfc\x11\xab\xbe;\ `8\x93>mp\xb0\x93L\x9c\x9d\x8du\x15m\xbb\ \x92\xb2\xe1?\xafQ\xe46\x0b;f*\xdah\xaf\x8c\ \xff\xccZ6\xf3\x1a\x98\x97t\xa8\x8f\x8a\xb6A\xa2d\ \xfdgE`\x9606v\xf3_\x1b\xb3,\xfe\x93\x96\ \xc3\xa4}\x8c\x199\xe6A\x8b\x5c\x90c\xd1}2\x99\ \x0bZ\xd4j\xc9\xb5\xe7\xb0\xc6[\xff9\xbd\x9e\xcd\x95\ \x5c\xc2\xe8y\xb1\x1b\x0e<\xfdsG\x82?\x99\xc4\xa3\ d\xce\xee\xf90{\xf1\xbc\xd7me\x85\x8c,K:\ \xe8\xdef\xc26\xf2}\xb4e\xc4:\x82A\x5c\xde\x05\ Q\x14a\xd9\xb9<\xf9\xe8\xcbfy\x9c\xe4=s)\ \xeb\x0et\xf9x\xb6\x15\xef\x17~\x9c\xff\xf4n\x9f\xb4\ 6\xfd\xef\x8c+\xefO\xf7:+\xac\xad[\xb9\x9f\xcd\ \x93\xd7)\x95\xe6\xae\xe7h\x8d\x880o\xc9\x7f\xd5)\ V\xfdK\x0b\xdb\x16^\x97\x96\x90\xb3\xce\x1c\xc6Q\xdc\ \x0f\xcbkL\xf9Y\x85`\xcbY\xa4\xe5\xde >\xe4\ \x95u\xedf_G\x1d\xd7\x7f\xfeV\x98\xafY\xa6\xdb\ $\x9d\xb3\xb0\x18\x8c\xfa\xca~\x8d\x00\xcf(\x1dm\x94\ \x8f\x07\x1f\xbeF_\xbdT\x1d\xae\x96\xc6\xadB\xb3\xe9\ \xf2\xbc\xc6\x22`\x99\xd5F\xf3{:\x22\xcc\x89u\xf3\ \x22\xcfRY\x8b\xb7Z\xe7)\xae\x1a\x86\x9a\xc6j*\ \xc2\xb7\x0f\xbd\x0e\xca\x8e\ R\xe09\x16\x1b\xf0(\x8c\xf5\xa9\xb0\x19\xa6*\xd4\x90\ wa\x91\xf2*\x85\xe8\xeb,xI\xc6\xbf7\xddy\ \xc5\xa8\xb0\xe2(\xda\xe0\xdc7L\xe8e\x14s\x0a+\ B\xf1\xd6\x10\xb0M\xd21\x82I*E\x9b\xb5\xd8u\ Cj\xb2)Dj\xb1l\xa0\xaen\xf7%:a\xdd\ Vy\xfa>\xb6\x98\x9a\xa9\xd3\x9e\x17\xee\xa1\xc5\x7f\x99\ \x92\x1d@\x19\xfa\x12\x904\x00\xeae\x9f\x09;\xc2]\ \x82\x7f4\xb1\xbb\xc0>g\xe1\xbf\x98]o2_\xcd\ \xe0L9\xe7\xc4\xfd\xd3B\xd5\xc5e\xc6L6\x9a\xad\ \xa5\xb6B\xb3\x1b\xe7\xd2\xc8n9\xd0X\x09\xd5T3\ W\xa0I0\x09\xa3\xa8\x93\xf5=\xf5\x03v\x07 *\ \x1b\xb6~\x8f!zYDb\x0aH\x13\xf2\x93eQ\ \x9b\x8e^`\xd1+%R7\xfcu#\xe8\xf1M\xe0\ \x09t\xa2\xadh\x0b\xfc\xbb\x08~\xdc\xd7E\xe8S[\ \xd1%\xf0\xdcF\x84\x99\xdcd-\x99\xb6\xa9\xd1eS\ \xcd\x22\xfd\xcd=3FZ\xe9\xed\x99!R\xb2\x0b\x84\ DM.\xf4\xf6d{1{[E\x0a\x8cf:\x10f\xfbkao\xffJ\xf1\ \x9e$\x91r\x117M\xb3\x921\xe3\xb3p+\xf3\xb7\ \xb8\x8f\x95v\xc4\x05\x09\xcb\xcfq\xbc;\xa8_U\xc0\ \xa5\xd0\x133$-\xc2\x00\x1f\xa2\x17W!\xf7\xa4\xde\ \xb8\xd8\xa7{j\xb5\xf0A\xfc\xe6\xbd\x05\xf1\xbc'6\ E\x15\x99=f\x9eY\xdd\xd5\x03P-s\x8c\xb8\xee\ \xb29Q9\xa0Z\xef\x14\xf2B\xfb\x07\xd6\xb9w\xf2\ \xafj(a\x05\xee\x1e\xd3\xf6\xa1!\x96|\xe0\x17c\ 4T\xd8>\x95\x14i\x08\xf3\xfe\x94f)\xd14R\ \xadL\x5cN8\xf0\x99\xbcn\xba\xa5\xbb\x09\xc9\x9a\x15\ \x09i\x0e\x02\x99\x16\x1fL~\x97\x97\xa1H\x83J\x9b\ \xb7:\x0e8\x16f\xf7\x8e\x8e\xec\xd6f\x0d\x99\xaf\xf9\ \xa0\xe1\x9b\x01\x98\x88[^\xcc5\xe7\xc1\x22W\x9f:\ \xdb\x91\xc2Tk\xbb\xc3\xfb\x8a\xb3\x15\xe7\x044\xbeW\ \xdeii+Vn\xf4\x9d\xeb\x9b\x05\xed\x17\xac\x04\xb0\ y\x88$\xd1\x0fA\x03\x84k\xd1Z\xa6\x22\x1dk[\ \xb4\x99\x19\x91\xe6\xe5t.\xed\xf0\xcb\xe8\x0bBt\xfe\ \x9a\xb7,\xd8N\xd2\x0d1!\xe8O=-)Jo\ \xfbP\x0a\xc75u\x8e\xbe`J'\xd4v[\x9at\ \x96\xa5\x99\xf9l\xf0y%f\x85\xd6\xf6t\xf1\x89>\ \x14o\x07GD\xb6\x8a(\x12\xf2)19\x84i\xd9\ \xa8j\xc8)9\xc1oK\x19\x0bY\x7f\x8d\xb0\x82\x1d\ \x0670\xf7\xf1\xaes\x02\xf3?\xe3E\xe4\xad\x8a\xca\ Zy\x00\xefp\x01\xb7\x99\xea\xe5S:\xde\xc47\xea\ v\xa3}\xc1{\xbf\x0c\xad\xf0\xb9E\xd6\xb6=\x89\xbd\ \xd8\x92\xb2\xa78\xe4\x93Z\xca\x8b\xb3yT\xec\xa0\x04\ \x8d-\x1d\xc1\xa7/%\x06\xf3\xd3\xc2\xbe\xa9 \x1e \ 8\xf3\x13f=\xc4]\xee\x5c9\x91\xcb8\xf3) \ \xf4,?\x91\xcb\xfa\xea\xc7\x90b\xa5\xa7Us\xbf4\ \xcd\xa1\x8b\xe9,\xdf\xed\xd6\xa2I!=9\x07\x0b\x1c\ U?O\xfcv\x89L\xaf\xe2Z\xa9j\xd2XP\xfc\ \x97\xea`\x89\xf3|'\xb7\xbd\xc0\xc1]\xeb~I\xc8\ \x94pR\xdb\x85\x8b\xba6`\x81|#\xab\xb2\xacH\ p\xdd\xab\xc9Y\xf7\x0a1\xb8\x8d\xec\x85\x1c\x0a\x8b~\ \x88\x0b\xcd\xea}\xaa\x92\x0b\xf0:\xbc\xdf\xa4\xe9\x8c\x22\ \xed\x1e;\x87G#\xde\xa4\xc9j\x9c\x1cv\xc4 \xf3\ \xc6b}\xc8\xfcI\x9b\xcf\xe4u\x97vM\xce\xffe\ \x97\xf9\x0b\xb5\x89\xe4sa\xab\x0f]tJXeG\ \x9b\xfdN\xc2\xbbxp\x9f\xe2\x89y\xfe[*\xcb\x86\ \xc6\xbb\xbd\x9e\x8bX\xafg\xb1\x81W\xd0\xee+\xdd\xeb\ iO\xf5\x97\xff\xd0\xceE\xd6\x00\xde\x5c\x05\xa0pC\ \xd6k(\x1d5\x0b\xf3%\x94^O\xfb\xbf\x812\xff\ i\x0cJ\xa08\xfeD&\x03\xb9s\x08\xe2\xbc\xb4e\ \x9eg-\xd7\x82\x12\xc1\x19\x18\x84\xdd:\xe5\xaf\xd5\xe2\ \x15a\x9e\xbd\xb4\xafw\x5c\xd8'\x9at]w4y\ e\x92j\xd7YIV\xa4\xb8h:\xcce\x93\x10\x0e\ \x15\xdc\xc7.\xb6e\x18\x0b\xcd\xe8\xa7\xda\x9b\x5c\x8d\xc3\ \x98\xaf\xe6\xbf\xf0\x0e\xd7\xc2\x09G\x02\xa6\x90Pid\ \xbe\xe0\x94_h\xcd\xbf\xbf\xb0\x8a-McT\xbbm\ y\x16(\x22\x8a\x8a\xde\x08\xac\xf6A\xc0}\xc1)j\ \x82\x16\xd7\x9a\xbca\x8d\xb2[\xedE!\xed\xe2\xad\xcc\ \x1co\x83\xd1\xd4t?\xbb\xd1Zk\xf5\xe6aXK\ 7\xcc\xcdP\x9e\xca\x190\x98\x8a\x02\xb1v\xf7\xda`\ \xb6\x9aoK\xb2\x97\xe3u>\x93\xcef\xda\xca\x8dv\ \x9c\xa5\xb7\x1cW\x9f\xe8;\x91$\x8d\xe0\x1cK\x02\xc4\ \x89!\x85\xd3\xb6\x03\xd8\x9bc\xad\x06\xfc\xf0\x14\xb6{\ \xa7\x99\x03\xeevv\x1a\x07\x88\x91\x98\xc1#$)K\ xX\xb4v/[0\xcc7\xb1\xe6\xdf\xa2\xb4\xd70\ \xb7$\xfbT\xa3ipc\xbe#\x5cr\xad\xee\xe6\xf6\ r\x86\x01\xdd'G\x82V\xa7\x05\xe3}\xf1\x98\xf0\xb9\ \xcd\xc9y+\x0b\x9b\xc6+\x22\xf9\xd7\x18\x9ca\x08\x0d\ Y\x14\x9eq\xb4\xf09Ot\x19\xb0\xfa\x10\x84\x07\xb3\ \x92\x22'\x1dQC b\xed\x05\x9a\xcc.\xcd\xd8D\ r^\xf5n\x10\x1aM\xc2\xbc(\x1f\x08\xfe\x0c\xbah\ \xf1\xf3\xb1\xc8\xea\x8a\ \x08\xa2\xc8\xae\x88(\xae\x82\xc2\xb2\xa8\xec\xe7\xeaj\x97\ \xef\x93eW\xf7?\xff9\xf75s\x1f\x13\x0a|Z\ \xc3\xcdL\xee\xf9\xcf\x7f\xfe\xf3\xbf\xff\xff\x9c\xee\x87\x93\ \x0b\x9f\xfa\xfd\x89[\xfe\xb9\xf5\x9co\x1e9\xf9\x8d\x17\ \xef%\x84D\xb3\xe9\x89\x91][\x09\xa9y\x06>\x5c\ JH\xd5w\xd9\xb3\xe6F\xf6\x19\x8b\x9e\ \x07x/&{o\xb8\x85\x90\xfe\xd7\xc9>y\x06\xd6\ \xf50{\x1e\xf95\xd9w\xeb\x1b\xf0\xf95\xf6\x14\xcf\ \x22W|\xfd+\x84\x5c\xdaAn\xfb\xcc\x1cB\x22\xff\ C\x1e{\x10h2oiE\xc5\xaf\x9e\x05\xbc\xda\xd8\ S\xfa@\xc5\xc2\x07\x9e#\xe4\xc2\xe7+\xe2\xd7|\x94\ \x90\x96\xafW\xc8\x0f<\x04pH\xc5G\xb2M\x84\x5c\ \xdeYq\xd3\x1b;\xe0\xbd\x9fW\xbc\xb9\xbe\x9f\x90\xb3\ \x0eW\xce\xbf\xe9\xd3\x84\xd4^Q9\x06\xe0H\xdd\xfe\ \xca\xc4\xe0\xe5\x844\xae\xae\xcc\xd5o\x00<\xbf\xc5\x9e\ {\x1b+oI\x00\xbeK\xce\xab\xbc\xe3\xf5,\xcc{\ \xbc\xf2\xd4\x92^B\xda\xc7*\x1f\xa6xu\xee\xaf\xfc\ y#\xd0\xf7\xf0\xcf*\xff\xb0\x1a\xe69O\xaf|\xe3\ \x89'`\xbf>VU\xf7\xb2B\xc8\xd0\x9bU\xb1\xcb\ +\x08\x19x.2\xf3\x10\xcc\ 76\x09O\xc0g\xdd\x17\x22\xef\xaf\xbe\x9b\x90K\x9a\ #71\xf8u\xe0\xa1\xcf\xb3\ \xe7\xd8I\xf6\x9cX\x11\xb9\xf3\x83?&d|n\xe4\ d\x06\xc6\x9f\xfb\xe7\xc8\xf7\x17\x0f\x02\x1e\xafF~\xb2\ \x0f\xd6\xb9w8\xf2Z\xe4\x01B\x92'\xa3u\x1f\x12\ \x09Y\xb31:\xff\xe9q\xe0\x83K\xa3k\xef\x9eO\ \xc8\xf9OG\xd7\xd1\xcf\x1b\xe2\xec\xb9\xe7G\xd1\x89\x0e\ \x81\x90\xb6\xdfF'\xee\x03~\x9a\xff\x87\xa8\xdc\x0d|\ \xb4\xf6\x9e\xe8\xb1%\xc0\xc3\x8d7Fo8\x05t\xde\ vw\xf4d-\xc0?\xd4\x13\xfd\xec\x89\x1e\xf8\xfbf\ \xf6\x8c7D\xef\xbb\xe24\xd0\xb3.z\xffG\xbeM\ H\xcf1\xf6:|g\xf5e\xcb\x81\xce\ \x17\xdc]=\xb4y\x19!\xe7l\xad>\xb4\xee\x17\x84\ TVV\x1f\x7f\xf2\x8b@\xe76\xf6\xdczC\xf5\xad\ \xbf\xfe\x1c\xcc\xf3\xf9\xea;vR>\xf9h\xf5\x1d\xaf\ \xf7\x11r\xe5\x8f\xaaO,\x87\xfd\xd9\xa7T?\xb1\x82\ \xee\xe7H\xf5\xd3?\xf9,!]\xafU\xbfz.\xf0\ \x7fG\xa1\xfa\xd5u\xf0\xbc\xf0DM\xfd\x8d\xb0\xde9\ \x07kZV.%\xa4{o\xcd\xa2\x9bs\xc0\xcf_\ \xae\xd9\xf8\x03\xa0G\xf5\x9a\x9a\xee\xc1\xb9\x84\x9c\xbd\x91\ ={\x9bk\x0e\xb6\xc3\xdf\x17\xee\xadI*\x8f\x00\xbf\ \xcb5\x9f<\x04\xf2u\xa0\xb7\xe6\xc4:\xe0\x97\xc3\x17\ \xd7\xfc\xe9\x0dX\xe7\xbe\xa7j#\xdf\xffo\xc0\x7fq\ \xed\x9e\x9f\x02\x1d\xcf\x1f\xad\x9d\x5c\xf3\x19\xe0\xaf\xdbj\ \xaf\xdb\x09\xf3\xecXR\xfb\xc0\xbf\xd5\x81\xfc\xfd\x9c=\ \xc7~\x5c{j\xd1q\xd8\xd7\xbe\xdaGz\xae\x22d\ \xd1\x0b\xb5O>\x0b\xf8\xaf\xce\xd7\xadj\xdeB\xc8{\ \xee\xa9\xebi\x04:l>T\xd7;<\x0f\xf6=^\ \xb7\xefy\xe0\x83KSu\x87?\xfc#X\xd7Cu\ G\xaa\x81\xdf7}\xb4n\xb2\x02\x04\xe6\xd0\x8bu\x99\ \xa7@\x1eVm\xad{\xdf)\x90\x9b\x05+\xea\xaem\ \x82\xf5\xaf\xf9^\xddM\xcf\xc2z\xfb\x0e\xd7\xdd:\x00\ x/\xce\xd4\xdd\xba\x07\xf8w\xf1\xfdu\x8f~\x7f\x0f\ \xf0\xdf\x83\xecy\xe0;u\x8f\xef\xbe\x09\xe6YR\xf7\ \xf8\xe4_\x08Y\xfeH\xac\xe6?\x81\xdfv=\x13k\ \xf8;\xd8\xb7]\xf3bm\x07\xf6\x11r\xb1\x1c\x9bx\ \x1e>\xd7\xbd\x10\x9b8\xfd&\xf0\xf1obr\xea{\ \x84\xac\xbc\x92=7m\x8f\xe9=\xc0\x0f\x91o\xc6>\ \xf2m\xaa\xaf\xe6\xc4n# \x0fu\x15\xb1\xcf\xec\x07\ \xfc\xae\x5c\x10\xbb\xef\x8e\x7f\x07\xbe\xd9\x18{t9\xe8\ \xceC\xf7\xd7\xaf\xbe\xb7\x15\xe4\xe6s\xf5\x03W\xfd\x8e\ \x90\xa6_\xd6\xef\xb9\x0a\xe4j\xe5=\xf5G4\x18\xbf\ \x7f\xa0~\xf2\x06\x90\xdbU\xcf\xd4+_\x84\xbf\x8f*\ \xf5\xc7\x22\xffE\xc8\xdco\xd4\xcf|\x0b\xf8\xb8Z\xa9\ \xbf\xfa;\xa0_\xceo\xae\xffp\xfef\xa0\xef\x15\xec\ \xb9\xf5\x97\xf5\x9f}\xa1\x01\xf8\xad\xaf\xfe\xbbO\x82\x1c\ \xec\xb9\xac\xfe\xa5\x93\xf0\xbc\xe0\x17\xec\xb9\xa7\xba\xfe\x8d\ [\xbe\x04t?\xb7\xfe\xcd\xaf]\x04\xfc\xfaDC\xc5\ \xaf\xae\x03z?\xdd\xb0\xf8k\xc0\xff\x9b^iX\xbe\ \x08\xf4jwe\xc3\xfaG\xc7\x80\xdf/o\x90\x9a;\ \xe0\xf3\xf3\xec\xb9\xed\xa7\x0d\xfa\x1c\x90\xdb\x9e\x07\x1bn\ \xbd\x0a\xe4$\xb6\x9f=\xe7\xfd\xb2\xe1v\x09\xd6\xbb\xf8\ \xb5\x86O\x01{\x93\xda\xc5\x0d\xf7\x9f\xaa\x01z\xfeo\ \xc3W>\x04\xdf\xf7\x7f\x92=\xf7\xff\xa6\xe1\xc5\xc7\x80\ \x7f\xba\x8e\xb2\xe7A\xd2\xf0\xd2b\x90\xab\xfdw5\xbc\ \xf9\xd2\xdf\x03\xff\xdf\xd8\x18\xf9v\x02\xf4\xdc\x9f\x1a\xab\ _~\x09\xfe\xfe\xc3\xc6\xb9}\x9d\x00gS\xe3\x95\xaf\ K\xc0\xc7m\x8dW}\x02\xe4\x03$\xf6\xf67\xc0.\ U\xfd\x8e=\x1b\x22\xecy\xc9\x7f\xb0\xe7\xb6\xf3\xd9\xf3\ H\xa6I\x90\xdb\x80\x1f\xaem\xeaH\x82\xfc\x5c2\xde\ t\xd1 \xecSt\x0c\x9e\xa0\xe7\xe2\x7fn\x9a\xf8\xe0\ \xcb\xa0G\x1fj:~\x1f\xbc\x1f}\x91='\x0e4\ \x9d\x18\x06>:\xfb\xe6\xa6\xc7w\x00\xddkO4\xfd\ \xec9\xe0\xa7\xed75\xbd\xba\x0e\xf0Z\xf6\x85\xa6\xdf\ \xd4\x1a\xaf\xd8\x0a*$\x03\xa3\x13\x00[\xb2 \ \xd4\x8fk\xa2\xa2\xa7EC\xf5!t;l\x14EH\ \x04\x22S\x04T\xf8\xef4|2P\x5cUX\xb3\x0c\ \xffl\x94\xe6\xf6&\x93\x80\x87\x90\x10\x0diR\xd5\x0a\ ]\x02\x05\xdb(&\x93iY\x99v\xadt7\x90\x8e\ \xee\x9d\x04 g\x00\xa4\xc8\xd7\xaa[\xab\x96\x1c\x5c\x95\ <&*\x09))\xec\xce\x1a\xb2\xaa\xe8>P\x1bH\ /\x8c\xcb\x01\x9dr\xe4\xa85\xba\xba\x8f\x8eM\xfb\x8c\ YH\x0e\x00e`\x03+\xfa\x01\x93\x14nx\x92n\ \xa75~A\x1f\xd0wR\xb2\xb7p@M'\xd9\x0e\ z\xc0k\x22\x036\x0c'i\x8a\x86\xfb\x92\xa6\x89l\ \x87\xa1b\x09\x80\xda\xed\x92\x184\xae\x9a\x0c\x02\xfb\xd8\ \xefG\x06G|\xdf\xadE\x01R\xc8\xb4\xfd\xf6.x\ \xc3\xe7\xed\xc5\xf0\xb6\x8a\x18\x09\xa8\x95T\xe0\x01\xca\xf1\ \xbac\xb6\xa6]ti\x09U\x9d\x96%\xddw\xde\x85\ d\x1f\xb26\x15]\xcaQ*g\x02\xd9\x82\xd30\xa4\ jR\xc86{\xca\xb1\xc7{1\x14'\x0d\xb8\xd5\xc6\ 3:\xa2jFW\xc0\x00\x0d\x86\x1cw\xe8\xa2\xe8\x88\ \xa6\x1e/\xf8\x0c\x98GF\xd1\x1e\xd0\x9d\xd2\x8a\xf6+\ 6*\xa5$M\x0b\xd8\xb1\x05d\x0fj\x19\xaaGD\ \x90'\xaa[\x9c\xb86\xec\xd1%M\x00m\xa1\x18\xbe\ 0\xda\xc1\x0e\xc4\xc1\x9a\x0c\x03\x84\x19\x14\x1c\xaa\x93\xa8\ \xce\x9a\x06!\xa06\x82\xfe\xd5\xa14\xba\xe3=\x03r\ Z\x12\x141#uw\xc6{\x18\xe4\x85b\x0a,\xc1\ D\x92\xf3\xe8\x84\xae%\x1c\x93,\xe5\x93\x8c\x02mf\ PZD@\xba\x14x#\x00\x1f\x93g\xca\x86\xeb\xde\ \xc8ZA\x10v\xef\x84\xff\xd0\x81-E\x03\xddF\x88\ \xda\xca\xd3h4\xec\xd5\x0a6\x1a\x00'+)\x02\xae\ 3\x04Z\x17_\xdaH\x89\x1e7\x15\x13\xa8aP\x0d\ Tq\xaaT)\x91Vs\xe1\xd6|\x8ba\xd9\x96t\ \xf7\xa9\x99lZ2\xa4d+\xa5B\xd8R\xd8\xe4\x5c\ \x18}(J%\xd3\xa6\xa8?4\x93\x15\x0e\x00\xd2Y\ 4Z\x94\ \xf8\xd9\x05\xdfn\x83wr0\x12U\x03:\x00\xb6*\ \x89s!) \xb9m\x85~\x1a\xe6\x10\x90\xf0I\xf8\ \x9b\x8e\x06M@\x89\xa7\xd6'\xc9\x95Nk\x19$\xbf\ \xba\x98\xe44\xb4\x10\xa9\x8b!\xe4\xe5tZHJT\ c{\x11[0\xc5\x10\xf6$\x05\xe6D\x17R\x9a\x9a\ \xa1d\xd7`\xcb\xb4\xa4\x90\x94\xf5\xe9\xee\xb8\xd63\xb2\ mt\xa8wx\xdb\xf0\xf8\xae\xfd\xad\xb3\xa0\xbd?+\ \x8b\xc8~\x941\xa9\xb0\x83d\x22\xc3Y4D\xea\xe5\ \x911\x0b\xc8\xe2\xd3\xfc;\x16Kg8\xb4\x02\x17\x07\ \x9d\xff>\xc3\x95t\x1a\x05\x91\x8e\xf1TV(\x16\xe1\ t\xfd\xdb\x10\xbajRF=\xe6MW\x91\x92\xdd\xd4\ ~\xb2!etAV\x98\x0d\xb8*'\xe5$JS\ $u[/\xbci\xeaI\xbd\x0d\xa4E7fC\xe1\ e\xb6\x81\xaf\xd8Z\x11e\x11\x10_e\xa9Ml\x81\ \x15\xf5\xa9\x8a\x22%\xd0\x01u\xd8E\xdf\x09\x96\xba<\ \x08FB/s;\xdf\xe1%H\xc9r \xb79 \ ;5\x99\x17\xf4s\x00\xfa6\xdd\x903\x10yA\x08\ &g$!-\xa5\x8cr\xa6Y\xec\xe7\x858]\xaa\ R?\xc4\x17^\xdarI\x19Gf\x80\xf2\xd7XJ\ \x94spE\x14\xf99\x89\x0eC\x01\xecN\x1a\x9d\xab\ \xa3e\xf3g1/\xae\xa1\xde\x8c\xaai\x85Va?\ (\xc5\x84H\x1d\x0b\xce\x80I)%\xe6\xd2\x06\xe3\xac\ \xd6p\x9e1\xb7t\x8c\x12\x1c\x9d\x18\xdd\x93*\xcdt\ NC4re1\xcaF\x0b*\x95\xd98:\x96\x07\ -3R\xbc\xc2\xd2-^\x00\xb3a\xc0\x0ea\x85\x00\ b&\x953\xe9H\x89j1\xad\x9d\xdb\xb6M\xa3%\ 3P\xdd\xe4X\x08\x0e\xa8y\xd83\x0b\x9d\x15\xa6\xe4\ \xf7\xab.3\x94P\x15CVr\x92m\x82\x821l\ \x07\x13\xa1\xe1\x92\xd7\xa3\x0dfLC\x8d\x0b332\ F\x9e\xb6\xfftV\xaf&\x8b\xebA\xf1&\x05E\xa5\ [\xacgU%\x19<\xc7\xf2\xf2\xe6p\xf8%\x0b<\ g\x09qL\xee,w\x1a\xf8\x96\xea\xa2d\xc5\x0cn\ \x04\xdbyf\xf7\xf2\xdc)\xf1v7u\xf4\xceN\x03\ g\x98\x96\xb7\xd8\x05aA\x8b\x80\x18\xd0\xd1\xd3h/\ \xa8\x05\xb5\x177`-\x8e\x09\x09[\x1b8\x1dB\x16\ \xb47lZ\xab#\x83'\x18\x1a\x84\xf4\xcc\xad\xa0:\ z\xbd\xa0K\xb0\xc7\xc90/\xad\xcdE\x0c\xeaR\xce\ X\x0aXE_\xcbFh\xbe\x89\x90\x9e`\xcaW\x0a\ #\xb5\x06b\x94Eq\xc9s2fK\x14\xbc\x84$\ \xa0\xcf\x04\xe6\xce\xf3\xf8\x8d\x8cJH\x83\x1f*\x01T\ \xfdx\x111\xc8\xaf>\xbfoJJL3'@\x91\ \x8c\xbc\xaaM\x0b\xed\xc2\xa8\xa4\x1b\xa2V\x9c\xfb\x0c\xe2\ I\xef\x983W\x1cqz\xa4\x90\xcc 3x\x86\xd5\ <\x14Ls\x9b\xc4\xd3j\x9e\x0a\xc7\x9ee\x9e5\xcb\ XbJJ\xe6\xd2R\x88p\xb5\xb9\xf4dp\xf0\xd3\ l\x03\xa7\xc4\x0a!\xd1\xca\x80\xb0\xdc`9c\xccj\ \xbar\x85\x8e\x19\xd4l6\x0c\xf9-\xe0\xa8\x16P\x07\ \xe6\xd0\xdc0\xe7r\x1aE\x88\x0a,u3\xd5\x92E\ \xd9N\xaa\xcd\xc3\xcb\xad\x89e\xf4e\xb2\x9a:\x09\xa2\ \x05n}A8&'%\x15\x1cH\x05\xe2\xcc\x10\xc6\ n\x00\xcd\x80\xba\x81\x06\x97vnd\x9b\xa6\xa9\x9a\xb0\ &D\xdb7Y\x83;\xe8\xbf\xa2\xe1\x1d\x1d\x1d\xc1\xc3\ c\xd6p\xdb\xea\xd4\xe0\xd003CSY\xd3@\x9a\ \x82+\xadg\xefJ\xc3v\xa0\x00\xb8\x87VZ\xcf\x1f\ \xd4\x0e\x9e\x90\xa5\x9bM7\x97\xd2\xd9\xcc4\xb0\x0c4\ \xdd~\x1d\xf7\xc3\xcc3P9gn0u}\x99\xa4\ Cp`M\x7f\xf6\x90\xac\xc8\x19yF\xa2\x06J/\ \xe8\xe0o\x82Z\x13\x0b\xc1\x98,\xc4t \xd3&*\ \xf2\x88T$+uC\xea1Y\x99\x14\xc2d\xfd\x1c\ \xcb\x19\x9aA\xcdG\xdd\x9b\x19\xd4I\x8a\x03\xcb\xbaa\ \xb04\x03j.\xcc\x9a\x1d [\x91\x0b\xa7\x91G\xd9\ \xba)\xd7&\x902GQ\x072WJ\xa6\x05\x16p\ \xae\x12\xa8\xf5\xf2\xa8\xc9\x14+[\x93\xe1\xf1\xb8\x0e\x7f\ g\xfcno\xfb\x22\x8a\x8b\xa4\xa8\xb9\xc9)\x08y$\ I\xd0\xb3bB\x02\xbe\xee\x0a\xc6\xedBL\xec\xbb\x03\ FSlM#\x08\x06\x11\xbcX\xb6k4\x18\xb4e\ \xe8=\xbb\xed\x00\x02\x02bjy\xf5\x5c\x22\x01R\x94\ \xca\xa5C\x04\xe7\xfa\xb723\xfc6\x8c\xd5\x8d,\x97\ \xed\xbc\x87z9\xcas\x03@g\x18\x93\xa5\xbcHi\ \x0c?%\xd5\x10\xf8\xbbM\xc3\xed\x81\xab\x11F\xd2\x92\ \xa8\x03aAMA\xe0#\x09)5\x9dV\xf3\x94\x9d\ \xcc\xf2\x09h\x0cM7\xc2\xfdJ\x96\x16\x12qi\xe6\ \x92\xbd\x97\xaeZK\xef(\x8f\xe8!\x1a\xa3%\xd0P\ \xc6\xca\xb5\x85#>\xee\x8e\xb9\x083\x84p[\xf9\x02\ :\xcfl9,\xb4\xb5<\x0e\x0b\x85\xf3\x1c\x8e\x0c\xc4\ \x04\xb8:\xeecP]\x80~G0n]>\xb8Y\ \x11\x99\xcb,e\x80#X\x8a\xc3p\x14\x11\x9c9?\ \xf8\xbf>\x953\x0c\xba\xd14\x02\x0e\x9e\xfd\x88\xcf\xec\ \xc5n\xa0I\x85b\xfa\x84\xba\x9a\x16\x8e\xab\xdd8\x1a\ Z\x81b\xc8\x1czJ.\x97\x7f\xf8\xd7\x82\xf4\xaa0\ \xa4\xcb\xc6\xf9\xb0/\xce\xc5\xae\xa1\x82N\xa7\x0c\xf8\xcd\ \xf0\xc4\xa2\xb7\xeb\xe9\xcd\x90+\x1c\x18k\x92\xe5\xee\x0a\ \x22z\xc0\xb6\xe0\xa5C\x8c\x93\xc0kU`\x96\x90\x86\ l\xeei\x0c\xdb\xdc\xc6\xbf\x89+\x9a}\xa2l\x84\xba\ \x00\x17\x83?Dm\x14K\xbe\xbd\x15\xad\xd7\xce\xa7\x03\ \xdf'\x97\x91|4[\x98N\xdb\x81\xae\xab\x97\x12v\ \xabj\x96\xabfa\xacw\x1cm\xd3a\x99S\xe1Z\ \xb9'\xcbMC]\x1bB\x9d\xd1w\xd0Z\xac|\xbb\ \xec\xc1\x16_\xda\xcd\x16\xa5e\xe1(\x85!3\xfe\xd6\ )\xe6\x17\xa9\x94G3k\x83\xcb\xb4\xa1ni\xb2\xe3\ l3\x15\xe2Q\xc6rd\x82\xe6rD@\x019k\ W\x01I\x8f\x9d\x8e,\x97\xe8\x19\xd38\x03\xe4\xa6\xcb\ i\xea\xca\x0ciBT\x997pwT\xe9\x04>\x87\ \x01OX\x95\xcb`\xf0\xf3\xc8e\x00\xc2@J\x14\x8a\ \x03\x8dQZ\xc6\x09\xd52\xdd\x18\xd8\x99\xc4,\xb6\xeb\ >*\x14~wOv\xd6\xa8\xa9?\xe9\x86\xa3)\x0f\ \x9dy#\x04*g\x12\xfb\xcf\x9bm\x98\xdfE\x03L\ \xcco\xca\xc8\xe83X8Ux/\x8e\xea\x0a\xc8m\ \xad\x85\xa1\x8e]`\x1e\x93\x94\xa4\xa0Kif*L\ \xd6\xa6-?a[\xe5\x9e\xdc\x09\xb4\x06\x81\x86Ah\ \xc3\x9d\xa2f\x85V\xceh\x91\xf0\xb4\xb5g*\xfa:\ 6\xc49c\xb4\x8eKA\x09\xfb\x10Vxx\xc5\x0a\ \xc9\xac~\xeb\x115\x22\xc0\xb2\xa2\xc6$\x8f\xb0\xa6\x81\ 1Oc/\x86W)\xc4\xe6+;\x9b^\xe0\xe4\xb7\ \xd3\xd0\xa6\xe3\xccb?\x9d\xbb\xd5\xce\xaa\xe5\xaa1\x15\ L\x1b+[\xf0,\x9a\xc13\xb3\x1al\x90\xd3\x8a\x87\ \x08\xd3b2\xc6{TX\x84K#\xd7$\xb6kM\ :v\x8a\x16^\xe3!\x0e\xc1\x8125\xadW\xd1\xa8\ X\xcbJ\x8e\x0c\x87\xecX\xf7\x22\xaa\x80\x5c\xb5\x1bn\ 7CV\xb9\xd5\xd3$1\x03nb\xcb\xe2kw\x01\ @\xb1\xa2W[\xe7\x9f7v\xa6\xca^\xe0\xb9C\xd3\ \x15-\xd1\x01vD>n\xea\xf3\xf0\x14X D\x07\ \x0dc\x16\xcc\x10\xa2-%\xf1\xb2|\xe0\xfa\xb2}\xdc\ \xd5\x0e\x01(IC\x10\xdaA\x91\x82\xcd\xc9\xa27`\ \xc3_\x98Je\xb2\x12Mr`\xf4$+\xa0\x00\xd3\ \xe9P3\xb1\x00K\xb6\xa6\xcd)\x00OSY\xb4\xc1\ \xd6\xa5dE\xd6\xa7\xca\x80\x13\xb7\x12b\xb4\xb7\xe48\ \xe6\x86l\xe9h\xc8\xe4\x8eS\x1e\x90h\x9e*\x18\xd4\ Z\xde/r\xb4(ad\xe7\xcc\xd7\xba\xb3\xe66\xe3\ c\xb2\x97g\x8eh\x12|\xad\x99\x05\x0fK\xc895\ \xbb\xa3\xf3\xd2QX\xc6f\x0a\x07\x04g\xe7f\xbb\xab\ \xac\xe8`\xccv3\xdb\xe8?\xba\x09Fo\xc3\xcc\xbf\ \xbbG6\xda\xbe-)\x1b\xfe\xe3b8+\x0a\xbfc\ \x0cm\xa6\xf2\x1f\xd3\xc01\xa5\xc9\xb7\x84c\xd4v)\ \x9d\x0d^\x9f\xcbU\xb1{6\xdb\xd1'\x09\x9ep\x1f\ \xe6gU\x17\x9a{e)\xef?j\xa3Ga\xcf\xd9\ /G\xfb\xf0r\x00\x93\x8aD\x17\x11<;\xbdzs\ IY\xc5f\x00p;i\xed\xafK0+\x8a\xde\x93\ \xae\xf6\x9c\xd4\xc1\xca\x9eS\xd1j\xdf\x10\xe3\xec\xf2\xa6\ \xf1*Zz\x01\xb6\x8b\x96a\x10\xc3\xa9eg\xc8\xfd\ \xa8\xb5\x97g\xbe\xcb\xa6Vx\x8fy\x14{\xcc\x83\xf8\ \xbe\x17\xdd\x80\x02*_;\x09S\xdd\x0b\x8e\xe2\xb1\x00\ \x9e\xda\xe8\xeavV\xb8\x83\xeb\xec'J:j\x01\xa5\ \xc5\x8d\xb3h\xf7\xf3\xb0\x94\xb7\xdb\xba\xcc\xa6Z\xef\xf9\ \x16\xa0\xc8\x14\xc3\xcb\xd9N\x7f/\xed\x04\xb34E\x90\ \x1c\x1d`\xe1\x13\xba5\xce\xde\xe7ho6\xcb2\x09\ \xde#\xe7\x81\xfc\xb9\xdb\xb9\xed\xe5\xd4\xf6\xf1\x18\xcf\x7f\ \xf8\x00v\xb0\xe6\xb0u\xda\xcb\xaf\xc8\xf3FD\xb3\xf5\ \xc4\xd9\x8ab\xad\xba\xa2\xdf\x9aR\xe8\x830JC\x07\ \xc3\xea\x09\xb1l;\xed\xfc\x08R\x08vT\x229\xd6\ \xe0\xa8\x94y\x0fl\xf1j\x0d\xb1\x15\xb5\xa3\x1b\xc4\x1f\ F7\xca\x88\xdd\x8a\x88\xbc\xc3\xc3kK\xbd\x99\xa9.\ \xdf\xe2\xd8\xa2>M\x02\x92\x0b\x0a\xb0\x90\xb5\xea\xab\x82\ \xf5`\x93\x8f\x81\xa8\x0d\xb7\x0f\xfd\xc8\xeeTF\xe8)\ \x0c\xd6\xde\x1dG\x1a\x1a<4R\xc1\x1f\x88\x11\x01\x8f\ I\x8e\xed\xa3\x9e\x82\x8c\xf2iX\x13\xb6YL\x1f\ W\x0dC\xcd\x08j*\x86^\x1a\xdd6\xe6\x97\xcd~\ \x15\xb1\xfe2\xacd\x83\xa7\x95\x8b\x04\x1b\xb9vd\x17\ i\xf1\xb9;\xb2\ \x07o\x19\xe4!\xc9\x9a`\xe8\xf2m\x89\xdb%gd\ C\x18\xcbJA\x9b\x1ep\x82\xc1{\xc0\xa8\xa3\x98G\ O{\x1c,\x89\xc5m\xe4\xa8R\xa6\x19\xea$a\x0d\ \xa5y.\xb0\xacU&\x8f\x86\xe0t\xc5V\xbb\xf7h\ \x88v\x19%r\x10\xfc)F\xba`G\xea\x05^}\x02\xc4\xca:\xe6\x0a\ z$\xf0\x94\xeb\x1e\xb0\x88\x22x$STe)R\ \xe9\x89?\x1f\xc2\x9ci\x7f\xc7\xfc\xd2Mn\xf5\x9f\xae\ b\x0b\xac\x9d^\xe4\x93\x010=\xf8;\xbb\xba\xa3\x93\ \xb3\xbe\x8a\x99I\xfa{\x96\x1f\xe4\xb3\xcb\x0b9\xd4\x8a\ \xa6.\xd4\xf8ayv\xcb\x8b\xc0/\x86\xc8\x13\xf3\xc0\ \xc1\x0eP\x06\xbbAl\xd6`&\xab\x0f\xbe\xe9\x84\x9f\ +\xc8\x10X\x00\xfb;\x96\xf7\xc1f*\x0c\xac(\x19\ d\xc7-2tW\x87\xb0\x99\x96yD,I/\xe2\ \xecV\xa9\x1d\xbe[G\xd6\x82ww!\xd7\xde\x1b\xc9\ \x06\xf8w\x01\xfc\xd0@\xd8z\xdb\xe3\x04\x9f\x88\xa37\ \x92\x8ba\xfc:\xe4\x8b\xac\xc5\x1f6-:m\x9aY\ \x84\xbf\xa5{\xca\xc8\xa4{\xba\xa7$1\xd9\x092\xa4\ &\x0b=\xdd\xd9\x1e\x01/\xb9I\x81\x1f#`\xac\xae\ 0+\x06|#\xec\x18\xdb=\xbcft\xa4\xaf\xf3\x8a\ \xa1]\xf4)\xe8\x92v\x0c\xfe\x06>\x1c\xcd9\x03\x93\ \x19j\x870\xa2\xea\xba\x1cOK\xc2^1\x9d\xa3W\ \x93\xac[\xbb\xfeBa\x8d\xb0q\xc3\x86\x0b6\x08\xfd\ \xecd`\x97\xb0\xf1\xe2\xb5\xeb\x84\xee\xce,\xe5/\x9c\ \xba\x13\xd1\xa1[\xdfhn\xbd\xcdeS\xb3\xda\xf6\x01\ \xcb\xb7\xa1\xc2\xb6\x1d\xfeu\xc1&\x0c\xcd\x8a<\x17z\ \x93g\x00\x9d\x1fa\xfb\xf6\xae\xa1\xa1\xb2\xb1\x7fdV\ \xd8\xef\xe1z8\xcf\x0b\x00\xe8lp\xe7\x9b\xf9\xa1\xab\ \x992\xe1}F\xde={e4\xa4\xcf\x8a\x1e\xbb\xbd\ \xe91&Y,\x02\x8e\x0e;\xb9&\xa7\x1c\xfd!\xa2\ \x9c\x96\x92\x1d\xe5\x92\xaa\xe2\xda\xb7\x89T\xce\x93x\x02\ K\x08\xe07N\xd94\xdb\x90dL\x8c\xcf\xf0\x22\x19\ #\xb1\x88F\xcc\xabO\xcc.\xc72\xd9\x96PO\x07\ \xfaY.\xa5(\xdb\xb38\x0aT\xde3\xac\xc6\x9cr\ \x121s\xea'\xca\xd4\xe3\xf0o\x04mH\x1e\xa1\xb1\ #'\xce\xd0S\xe2Q\xd9\x06\xd0\x0d\x17\xccr\xbbO\ \xf9o7\xad1\xf1^\x0c*\xfayQ6\xc0\xb0\x18\ yje4\x09Y\xa0\xc3\xf6\x223\xcc\x8bd\xe7\xd3\ \xf1\xef\x05\xc1\xd1\xcc$\xe4\xa7`\x18\xc2\x14\xb6\x8f\x8f\ \x8f\x08\xa6R\xa1\xaf\xe64\x05\xde\x10\x05a\xc3\xda\x0b\ x\xa4\xacKe\xf3\x12\xf9\xd0[\xe6%\x83\xc8h+\ T\xd8\x03\x83W \x9c\x1c%\xa2\x9e\xef\xe0\xb6\xb9\x5c\ \x9an\x09\xa0)\x04\x1e\xf4\x1e7Y1I\xdbQ\xbe\ r|lV\xebd\x1eK\x0aW2m\xf9*\xf6\x81\ \x0fSm$\xed3.hw\x18]\xe8\x91&\x19\xcd\ \xbc\xb3\x9f\xc7L{\xd8\xc7\x81\x0a\xd8LV\xc0\xdb\x05\ gC\xa3\x83\xde4B\xa7&%\x81\xb7\xafI\xc0R\ \x05\xcc\x9d\xe09P\xa0\x18\xb6\x0a\xf1\x9b\x10h\xf7\x06\ &d\xcbg\x13\x03\xf3\xe7\x9aUKw\x9e/1\xcb\ 'cB`\x1dv\xba\ u^\xc6K;\xdb=\xb5\x09\xef\x05\xef\xd1\xe9R2\ `*\xe5lZrF\x90x\xaafJJg\x05\x9d\ V\xech\x11\x09\x09`\xcaT\xf9\x0b\x9fWz\x8e\xc9\ \xdd\xbb\xc1B|\x8f\x91\xe1\xf7\xbey\xcdVf\xe7\x83\ \xc7\xd8\x98}g\x9cc6\xf4\xf2}F\x5c\xec\xbae\ \xce\xe53\xd1\xf0\xc6\xac\x00\xc3\xe6\xb16\x81\xd2s#\ \x8b\xf8-t<\xa1\xc6o4\xc8\x8a\xc6\x94\xcf\x94\xb4\ \xcb1\x81\xc2gz\x1e,U\xab\xa2zv\x9e\xf5k\ \xeaS\xd3\xe0O\xe9\x89))\xc3\x83F\x0fx\xb3\xeb\ \x93\xf0\x000\x07\xfb\x0d\x1c\xb7=8\x9a\x15\xd8r\xfc\ F\x9ea\x06\xc7\x03b\x99\x0d\x07\x1e#gWK\xf7\ d\xb0\xff\x08\x0e\x12-Z\xeb\xbc\xd4\x90\xe6\x15\ $\xcbY\xb3>)\xd6\x05Df\xcf\x17+\xccS\xfa\ \xe7\x91z\xe6%2]<\xc7\xc1\xcc\x9b\xce\xe1R\xd3\ \xb7\x1c\x826\xa7W\xcc L\x924v\xb3:+\x04\ t]\x05GX\x9e\xc4]ez\xfd\xa0\xa5\xffM\xdd\ /\x95\xe0h\xf7\xe1\xad@C\xe6\xc0\xc2\xa2\xd2\xd4\x90\ x\x5c\xce\xe42\x0e\xff\x98\xde<\xa5\xb3\xfb:\xb3\xd4\ \x94uu\xc75P\xfazFL\xa7{\x96\x0f\xa6\x84\ \xb8\xa6\xe6\xe9\x1d\x84\xbaD\xbd+K\xfd\xb3\xe3\xecl\ 4D\x1f\x22\xfa\x0b+\xba;\xd9@\x1f\xda/\x03S\ Ow\xd3\x8e\x00D\xae\x08e\x9b\x96v\x1c>\xac\x1a\ rJN\xb0s\xa9F!\xeb\xaf\x98\x16\xa3,{\x02\ \xb4\x0b9Np\xfej\xe6\xedH\xa6z\x00^Y\x02\ \x98y\xf5\xa5\xde\xb6\xe3\xbe\xd0aw\x18\xe3\x0b\xdc\xfb\ 6Lo\x95WFc\x84\xa7\xca\x9b]W\x82'\x05\ \xf6Q\x85\xc3\x99\xd9n\xaf\x94\xb8\x9a\xc2\x13\x95\xec\x08\ \x80\xa3\xe5\x03\xcf\xe5\xd1n\xb8i\xa9\xe0\xaf\xc9\x0f8\ \x1b\xb7\xec\xcc\xea\xe59\xd6C\xe5\xa9\x82\xcd\x8bA\x05\ \x9e9q\xd0\x9df\x12\x1c\xa9\x06_\xba\x0f\x97d\x9a\ \xfcKW3\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml
\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \ \x0a \x0a
\ \x0a \x0a \ \x0a \x0a \x0a .C\ olorScheme-Text \ {\x0a color:\ #f2f2f2;\x0a }\ \x0a \x0a\ \x0a \x0a \x0a \x0a\x0a\ \x00\x00\x02\x04\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 24 24\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x01\xb9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x03\xb9\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x07_\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \ \x0a\ \x0a \ \x0a image/svg\ +xml\ \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-T\ ext {\x0a co\ lor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x02\x81\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 32 32\x22>\x0a \x0a \x0a \ .ColorScheme-T\ ext {\x0a co\ lor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\x0a\ \ \x00\x00\x0b\xc7\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ \ image/svg+xml\x0a \ \x0a \ \x0a \ \x0a \ \x0a <\ /metadata>\x0a \x0a \x0a .C\ olorScheme-Text \ {\x0a color:\ #f2f2f2;\x0a }\ \x0a \x0a\ \x0a \x0a \x0a \x0a \x0a<\ /svg>\x0a\ \x00\x00\x09\xee\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ imag\ e/svg+xml\x0a \x0a \ \x0a <\ /cc:Work>\x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-Te\ xt {\x0a col\ or:#f2f2f2;\x0a \ }\x0a \x0a \x0a <\ path\x0a style=\ \x22color:#f2f2f2;f\ ill:currentColor\ ;fill-opacity:1;\ stroke:none\x22\x0a \ d=\x22m 8.1355932\ ,15.025424 -6,-6\ .2510003 0.719,-\ 0.749 4.125,4.29\ 80003 1.156,1.23\ 7 1.156,-1.237 4\ .1249998,-4.2980\ 003 0.719,0.749 \ -4.125,4.2980003\ z\x22\x0a class=\x22\ ColorScheme-Text\ \x22\x0a id=\x22path4\ \x22\x0a inkscape:\ connector-curvat\ ure=\x220\x22 />\x0a \x0a \x0a\x0a\ \x00\x00\x01\xbd\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x02\xd8\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 32 32\x22>\x0a \x0a \x0a \ \x0a \x0a\ \x0a\ \x00\x00\x01\xe6\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 32 32\x22>\x0a \x0a \x0a \ .ColorScheme-T\ ext {\x0a co\ lor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x01\xae\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x0a\x8d\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ image\ /svg+xml\x0a \x0a \ \x0a \x0a \x0a \x0a \x0a\ \x0a \ \x0a\ .ColorSche\ me-Text {\x0a \ color:#f2f2f2;\ \x0a }\x0a <\ /style>\x0a \x0a \ .ColorScheme\ -Text {\x0a \ color:#f2f2f2;\x0a \ }\x0a
\x0a \x0a\ \x0a \x0a\x0a\ \x00\x00\x02z\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 32 32\x22>\x0a \x0a \x0a \ .ColorScheme-T\ ext {\x0a co\ lor:#f2f2f2;\x0a \ }\x0a \x0a \x0a \ \x0a\x0a\ \x00\x00\x02d\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x0a8\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ ima\ ge/svg+xml\x0a <\ dc:type\x0a \ rdf:resource=\ \x22http://purl.org\ /dc/dcmitype/Sti\ llImage\x22 />\x0a \ \x0a \ \x0a <\ /rdf:RDF>\x0a \x0a \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a\ .ColorSche\ me-Text {\x0a \ color:#f2f2f2;\ \x0a }\x0a <\ /style>\x0a \x0a \x0a \x0a\ \x0a\ \x00\x00\x0a\x18\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ im\ age/svg+xml\x0a \ \x0a \ <\ /dc:title>\x0a \ \x0a \ \x0a \x0a \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a \x0a \x0a \ \x0a \x0a\ \x0a\ \x00\x00\x08?\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a <\ /cc:Work>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \ .ColorScheme-Tex\ t {\x0a colo\ r:#4d4d4d;\x0a \ }\x0a .ColorS\ cheme-NegativeTe\ xt {\x0a col\ or:#da4453;\x0a \ }\x0a \x0a \x0a .\ ColorScheme-Text\ {\x0a color\ :#4d4d4d;\x0a \ }\x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07\xba\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a \ \x0a \x0a \x0a \x0a \x0a \ \x0a .ColorSc\ heme-Text {\x0a \ color:#f2f2f\ 2;\x0a }\x0a \ \x0a \x0a \x0a <\ path\x0a id=\x22pa\ th4\x22\x0a class=\ \x22ColorScheme-Tex\ t\x22\x0a d=\x22m 29.\ 872419,17.245072\ -4.86717,5.0309\ 69 -5.030969,-4.\ 86717 -0.69531,0\ .71871 5.030969,\ 4.86717 -4.86717\ ,5.030969 0.7187\ 1,0.69531 4.8671\ 7,-5.030969 5.03\ 0969,4.86717 0.6\ 9531,-0.71871 -5\ .030969,-4.86717\ 4.86717,-5.0309\ 69 z\x22\x0a style\ =\x22color:#f2f2f2;\ fill:#f2f2f2;fil\ l-opacity:1;stro\ ke:none\x22\x0a in\ kscape:connector\ -curvature=\x220\x22 /\ >\x0a\x0a\ \x00\x00\x01\xbe\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x03l\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x07p\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x02y\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 24 24\x22>\x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x01\xe1\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \ \x00\x00\x02\x1f\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x0aH\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\ \x0a \x0a \ \x0a \x0a <\ dc:format>image/\ svg+xml\x0a \x0a \ \x0a \x0a \x0a \x0a \x0a \ \x0a \x0a \ .ColorScheme\ -Text {\x0a \ color:#f2f2f2;\x0a \ }\x0a \x0a \x0a\ \x0a \ \x0a \x0a\ \x0a\ \x00\x00\x09\xb8\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a <\ metadata\x0a id\ =\x22metadata10\x22>\x0a \ \x0a \ \x0a image/svg+\ xml\x0a\ \x0a \x0a \x0a \x0a \ \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\ path\x0a d=\x22m 7\ .1186442,8.13559\ 32 23.9999998,0 \ 0,23.9999998 -23\ .9999998,0 z\x22\x0a \ id=\x22path4\x22\x0a \ inkscape:conn\ ector-curvature=\ \x220\x22\x0a style=\x22\ stroke:#000000;s\ troke-opacity:1;\ fill:#f2f2f2;fil\ l-opacity:1;stro\ ke-width:0.3;str\ oke-miterlimit:4\ ;stroke-dasharra\ y:none\x22 />\x0a \x0a \x0a\ \x0a\ \x00\x00\x02[\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 16 16\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x08\xfb\ <\ ?xml version=\x221.\ 0\x22 encoding=\x22UTF\ -8\x22 standalone=\x22\ no\x22?>\x0a\x0a \x0a \x0a \x0a \ im\ age/svg+xml\x0a \ \x0a \ \x0a \ \x0a <\ /metadata>\x0a \x0a \x0a \ \x0a \x0a \ \x0a\x0a\ \x00\x00\x02N\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 24 24\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x02>\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 24 24\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ \x00\x00\x03e\ <\ svg xmlns=\x22http:\ //www.w3.org/200\ 0/svg\x22 viewBox=\x22\ 0 0 22 22\x22>\x0a \x0a \ \x0a \x0a \x0a\x0a\ " qt_resource_name = b"\ \x00\x0b\ \x01\x12\xbf+\ \x00B\ \x00r\x00e\x00e\x00z\x00e\x00-\x00D\x00a\x00r\x00k\ \x00\x0c\ \x0d\xfc\x11\x13\ \x00t\ \x00r\x00a\x00n\x00s\x00l\x00a\x00t\x00i\x00o\x00n\x00s\ \x00\x06\ \x04\x98\xbd\x05\ \x00B\ \x00r\x00e\x00e\x00z\x00e\ \x00&\ \x0fy@G\ \x00c\ \x00o\x00m\x00.\x00g\x00i\x00t\x00h\x00u\x00b\x00.\x00p\x00e\x00r\x00s\x00e\x00p\ \x00o\x00l\x00i\x00s\x00d\x00m\x00.\x00p\x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\ \x00s\x00.\x00s\x00v\x00g\ \x00\x07\ \x06\x87\x09c\ \x00P\ \x00a\x00p\x00i\x00r\x00u\x00s\ \x00\x0c\ \x08\x83\x22\x9e\ \x00l\ \x00i\x00g\x00h\x00t\x00 \x00f\x00u\x00s\x00i\x00o\x00n\ \x00\x13\ \x0f\xcfa\xc7\ \x00p\ \x00e\x00r\x00s\x00e\x00p\x00o\x00l\x00i\x00s\x00-\x00t\x00r\x00a\x00y\x00.\x00s\ \x00v\x00g\ \x00\x0c\ \x06\xb1I\xab\ \x00P\ \x00a\x00p\x00i\x00r\x00u\x00s\x00-\x00D\x00a\x00r\x00k\ \x00\x0e\ \x01\x06\x97C\ \x00d\ \x00a\x00r\x00k\x00_\x00s\x00t\x00y\x00l\x00e\x00.\x00q\x00s\x00s\ \x00\x0f\ \x06#\xe4\xb4\ \x00t\ \x00r\x00a\x00n\x00s\x00l\x00a\x00t\x00o\x00r\x00s\x00.\x00t\x00x\x00t\ \x00\x0d\ \x0b,\xef4\ \x00P\ \x00a\x00p\x00i\x00r\x00u\x00s\x00-\x00L\x00i\x00g\x00h\x00t\ \x00\x0f\ \x07\xd5F#\ \x00l\ \x00i\x00g\x00h\x00t\x00_\x00s\x00t\x00y\x00l\x00e\x00.\x00q\x00s\x00s\ \x00\x0b\ \x06\x09\x91\xfe\ \x00d\ \x00a\x00r\x00k\x00 \x00f\x00u\x00s\x00i\x00o\x00n\ \x00\x0c\ \x06\xe6\xeb\xe7\ \x00u\ \x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00s\x00v\x00g\ \x00\x18\ \x03\x8e\xd3\xe7\ \x00r\ \x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\ \x00l\x00e\x00d\x00.\x00s\x00v\x00g\ \x00\x1d\ \x09\x07\x8c\x87\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\ \x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00s\x00v\x00g\ \x00\x0e\ \x04\xa2\xf1'\ \x00d\ \x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00s\x00v\x00g\ \x00#\ \x06\xf2\x17\xc7\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\ \x00i\x00n\x00a\x00t\x00e\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00s\ \x00v\x00g\ \x00\x17\ \x0ce\xc3\x87\ \x00l\ \x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\ \x00e\x00d\x00.\x00s\x00v\x00g\ \x00\x17\ \x0c\xab\x5c\x87\ \x00d\ \x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\ \x00e\x00d\x00.\x00s\x00v\x00g\ \x00\x14\ \x05\x8e\xb3\xc7\ \x00d\ \x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00h\x00o\x00v\x00e\x00r\x00.\ \x00s\x00v\x00g\ \x00\x16\ \x01u\xc1\x07\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\ \x00d\x00.\x00s\x00v\x00g\ \x00\x0e\ \x0e\xde\xf7G\ \x00l\ \x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00s\x00v\x00g\ \x00\x14\ \x07\xec\xdcG\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00.\ \x00s\x00v\x00g\ \x00\x12\ \x01\x06\x86G\ \x00u\ \x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00s\x00v\ \x00g\ \x00\x0f\ \x02\x9f\x08\x07\ \x00r\ \x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00s\x00v\x00g\ \x00\x1a\ \x01\x87\xa3\xe7\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\ \x00i\x00n\x00a\x00t\x00e\x00.\x00s\x00v\x00g\ \x00\x1f\ \x0a\xae*\xc7\ \x00c\ \x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\ \x00d\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00s\x00v\x00g\ \x00\x15\ \x0f\xf3\xcd\x87\ \x00u\ \x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\ \x00.\x00s\x00v\x00g\ \x00\x0f\ \x0f\xc4^\xc7\ \x00m\ \x00u\x00l\x00t\x00i\x00_\x00t\x00r\x00a\x00s\x00h\x00.\x00s\x00v\x00g\ \x00\x06\ \x07\xc3Z\xc7\ \x00u\ \x00p\x00.\x00s\x00v\x00g\ \x00\x07\ \x07\xa7Z\x07\ \x00a\ \x00d\x00d\x00.\x00s\x00v\x00g\ \x00\x10\ \x02q\xfc\xe7\ \x00v\ \x00i\x00d\x00e\x00o\x00_\x00f\x00i\x00n\x00d\x00e\x00r\x00.\x00s\x00v\x00g\ \x00\x09\ \x08\x9b\xad\xc7\ \x00t\ \x00r\x00a\x00s\x00h\x00.\x00s\x00v\x00g\ \x00\x08\ \x0f\x07WG\ \x00e\ \x00x\x00i\x00t\x00.\x00s\x00v\x00g\ \x00\x10\ \x038r'\ \x00m\ \x00u\x00l\x00t\x00i\x00_\x00r\x00e\x00m\x00o\x00v\x00e\x00.\x00s\x00v\x00g\ \x00\x0e\ \x0e\xd4\xac\x87\ \x00m\ \x00u\x00l\x00t\x00i\x00_\x00d\x00o\x00w\x00n\x00.\x00s\x00v\x00g\ \x00\x08\ \x00(Wg\ \x00f\ \x00i\x00l\x00e\x00.\x00s\x00v\x00g\ \x00\x0f\ \x0e^\x94g\ \x00p\ \x00r\x00e\x00f\x00e\x00r\x00e\x00n\x00c\x00e\x00s\x00.\x00s\x00v\x00g\ \x00\x08\ \x0cXT\xa7\ \x00m\ \x00e\x00n\x00u\x00.\x00s\x00v\x00g\ \x00\x08\ \x06\xe1W\xa7\ \x00d\ \x00o\x00w\x00n\x00.\x00s\x00v\x00g\ \x00\x0d\ \x03\xe4\x8a'\ \x00a\ \x00d\x00d\x00_\x00q\x00u\x00e\x00u\x00e\x00.\x00s\x00v\x00g\ \x00\x09\ \x06\xc7\x95\xe7\ \x00a\ \x00b\x00o\x00u\x00t\x00.\x00s\x00v\x00g\ \x00\x0d\ \x0c\xe7\x89\xc7\ \x00c\ \x00l\x00i\x00p\x00b\x00o\x00a\x00r\x00d\x00.\x00s\x00v\x00g\ \x00\x0f\ \x05\x83Q\x87\ \x00p\ \x00a\x00u\x00s\x00e\x00_\x00q\x00u\x00e\x00u\x00e\x00.\x00s\x00v\x00g\ \x00\x10\ \x01@\xba\xa7\ \x00r\ \x00e\x00m\x00o\x00v\x00e\x00_\x00q\x00u\x00e\x00u\x00e\x00.\x00s\x00v\x00g\ \x00\x0c\ \x0f\x88\xfaG\ \x00m\ \x00i\x00n\x00i\x00m\x00i\x00z\x00e\x00.\x00s\x00v\x00g\ \x00\x0a\ \x06\xcbBG\ \x00r\ \x00e\x00m\x00o\x00v\x00e\x00.\x00s\x00v\x00g\ \x00\x08\ \x0bcU\x87\ \x00s\ \x00t\x00o\x00p\x00.\x00s\x00v\x00g\ \x00\x0e\ \x0a|\x95\x07\ \x00s\ \x00t\x00o\x00p\x00_\x00q\x00u\x00e\x00u\x00e\x00.\x00s\x00v\x00g\ \x00\x0b\ \x0cj!\xc7\ \x00r\ \x00e\x00f\x00r\x00e\x00s\x00h\x00.\x00s\x00v\x00g\ \x00\x09\ \x0c\x98\xb7\xc7\ \x00p\ \x00a\x00u\x00s\x00e\x00.\x00s\x00v\x00g\ \x00\x0a\ \x0bi\x9aG\ \x00w\ \x00i\x00n\x00d\x00o\x00w\x00.\x00s\x00v\x00g\ \x00\x0b\ \x00\xbd\xcd\xa7\ \x00s\ \x00e\x00t\x00t\x00i\x00n\x00g\x00.\x00s\x00v\x00g\ \x00\x0c\ \x08[/'\ \x00m\ \x00u\x00l\x00t\x00i\x00_\x00u\x00p\x00.\x00s\x00v\x00g\ \x00\x0c\ \x0by\x96g\ \x00s\ \x00t\x00o\x00p\x00_\x00a\x00l\x00l\x00.\x00s\x00v\x00g\ \x00\x0a\ \x0a\xc8\xf6\x87\ \x00f\ \x00o\x00l\x00d\x00e\x00r\x00.\x00s\x00v\x00g\ \x00\x0e\ \x00x\x08'\ \x00s\ \x00e\x00l\x00e\x00c\x00t\x00_\x00a\x00l\x00l\x00.\x00s\x00v\x00g\ \x00\x08\ \x02\x8cT'\ \x00p\ \x00l\x00a\x00y\x00.\x00s\x00v\x00g\ \x00\x06\ \x07^Z\xc7\ \x00o\ \x00k\x00.\x00s\x00v\x00g\ \x00\x0f\ \x0d\x85a\x07\ \x00s\ \x00t\x00a\x00r\x00t\x00_\x00q\x00u\x00e\x00u\x00e\x00.\x00s\x00v\x00g\ \x00\x07\ \x03Y\x82#\ \x00l\ \x00o\x00c\x00a\x00l\x00e\x00s\ \x00\x08\ \x0fb*\x1d\ \x00u\ \x00i\x00_\x00k\x00o\x00.\x00q\x00m\ \x00\x08\ \x0fj\x9a\x1d\ \x00u\ \x00i\x00_\x00s\x00v\x00.\x00q\x00m\ \x00\x08\ \x0fkZ\x1d\ \x00u\ \x00i\x00_\x00t\x00r\x00.\x00q\x00m\ \x00\x0b\ \x0e\xc3\xfb}\ \x00u\ \x00i\x00_\x00z\x00h\x00_\x00C\x00N\x00.\x00q\x00m\ \x00\x08\ \x0f_\x8a\x1d\ \x00u\ \x00i\x00_\x00h\x00u\x00.\x00q\x00m\ \x00\x0b\ \x08\xcc\xbe\xdd\ \x00u\ \x00i\x00_\x00f\x00r\x00_\x00F\x00R\x00.\x00q\x00m\ \x00\x0b\ \x02\xf5\x19\xdd\ \x00u\ \x00i\x00_\x00n\x00l\x00_\x00N\x00L\x00.\x00q\x00m\ \x00\x08\ \x0fZ\x8a\x1d\ \x00u\ \x00i\x00_\x00d\x00e\x00.\x00q\x00m\ \x00\x08\ \x0fXZ\x1d\ \x00u\ \x00i\x00_\x00a\x00r\x00.\x00q\x00m\ \x00\x0b\ \x08\xbe\xb8\x1d\ \x00u\ \x00i\x00_\x00t\x00r\x00_\x00T\x00R\x00.\x00q\x00m\ \x00\x0b\ \x0a\xc0\xb9\x9d\ \x00u\ \x00i\x00_\x00p\x00t\x00_\x00B\x00R\x00.\x00q\x00m\ \x00\x0b\ \x07\xc9\xbe\xfd\ \x00u\ \x00i\x00_\x00f\x00a\x00_\x00I\x00R\x00.\x00q\x00m\ \x00\x0b\ \x09\xcd\xce\xfd\ \x00u\ \x00i\x00_\x00e\x00s\x00_\x00E\x00S\x00.\x00q\x00m\ \x00\x08\ \x0fi\x8a\x1d\ \x00u\ \x00i\x00_\x00r\x00u\x00.\x00q\x00m\ \x00\x0b\ \x0e\xbe\x8b}\ \x00u\ \x00i\x00_\x00z\x00h\x00_\x00T\x00W\x00.\x00q\x00m\ \x00\x08\ \x0fgz\x1d\ \x00u\ \x00i\x00_\x00p\x00t\x00.\x00q\x00m\ \x00\x0b\ \x02\xb3\x19\x9d\ \x00u\ \x00i\x00_\x00p\x00l\x00_\x00P\x00L\x00.\x00q\x00m\ " qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x0d\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x1a\x00\x01\x00\x00\x00\x01\x00\x00\x0a\xbc\ \x00\x00\x01\x8d\x85M\x82-\ \x00\x00\x00\x00\x00\x02\x00\x00\x00 \x00\x00\x00\xc0\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00:\x00\x02\x00\x00\x00 \x00\x00\x00\xa0\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\xa4\x00\x02\x00\x00\x00\x10\x00\x00\x00\x90\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01<\x00\x00\x00\x00\x00\x01\x00\x00\x12$\ \x00\x00\x01\x8f\xdf\xe1\xdf\xfb\ \x00\x00\x00\x9e\x00\x02\x00\x00\x00 \x00\x00\x00p\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\xfc\x00\x02\x00\x00\x00 \x00\x00\x00P\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x80\x00\x01\x00\x00\x00\x01\x00\x00\x1e\xe8\ \x00\x00\x01\x8d\x85\x8d\x7fr\ \x00\x00\x00\xb2\x00\x02\x00\x00\x00\x10\x00\x00\x00@\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01`\x00\x02\x00\x00\x00 \x00\x00\x00 \ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x1c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0e\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00L\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x8d\x80\x12\x85s\ \x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x022\ \x00\x00\x01\x8d\x80\x12\x85s\ \x00\x00\x08b\x00\x02\x00\x00\x00\x11\x00\x00\x00\x0f\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x0a\x06\x00\x01\x00\x00\x00\x01\x00\x05\xfb\xb6\ \x00\x00\x01\x90\x7f\x9fW\x1e\ \x00\x00\x09\x06\x00\x01\x00\x00\x00\x01\x00\x04e8\ \x00\x00\x01\x90\x7f\x9fV\xf6\ \x00\x00\x09\x86\x00\x01\x00\x00\x00\x01\x00\x05\x15\xaa\ \x00\x00\x01\x90\x7f\x9fV`\ \x00\x00\x09N\x00\x01\x00\x00\x00\x01\x00\x04\xd5\x92\ \x00\x00\x01\x90\x7f\x9fX\x0a\ \x00\x00\x08\xea\x00\x01\x00\x00\x00\x01\x00\x047w\ \x00\x00\x01\x90\x7f\x9fV~\ \x00\x00\x09\xa2\x00\x01\x00\x00\x00\x01\x00\x05E\xc3\ \x00\x00\x01\x90\x7f\x9fV\x1d\ \x00\x00\x09j\x00\x01\x00\x00\x00\x01\x00\x04\xf5w\ \x00\x00\x01\x90\x7f\x9fW<\ \x00\x00\x09\xd4\x00\x00\x00\x00\x00\x01\x00\x05\x8a$\ \x00\x00\x01\x90\x7f\x9fX\x90\ \x00\x00\x08\xb8\x00\x00\x00\x00\x00\x01\x00\x03\x93\xbb\ \x00\x00\x01\x90\x7f\x9fX^\ \x00\x00\x098\x00\x01\x00\x00\x00\x01\x00\x04\xb6=\ \x00\x00\x01\x90\x7f\x9fU\xcd\ \x00\x00\x09\x22\x00\x01\x00\x00\x00\x01\x00\x04\x96O\ \x00\x00\x01\x90\x7f\x9fU\xf8\ \x00\x00\x08\xd4\x00\x01\x00\x00\x00\x01\x00\x04\x17\x0b\ \x00\x00\x01\x90\x7f\x9fV\x98\ \x00\x00\x08v\x00\x00\x00\x00\x00\x01\x00\x02\xd4\xa9\ \x00\x00\x01\x90\x7f\x9fV\xc0\ \x00\x00\x09\xf0\x00\x01\x00\x00\x00\x01\x00\x05\xdd\xc3\ \x00\x00\x01\x90\x7f\x9fWd\ \x00\x00\x09\xbe\x00\x01\x00\x00\x00\x01\x00\x05e\x80\ \x00\x00\x01\x90\x7f\x9fW\xa6\ \x00\x00\x08\x8c\x00\x01\x00\x00\x00\x01\x00\x03]`\ \x00\x00\x01\x90\x7f\x9fW\xe2\ \x00\x00\x08\xa2\x00\x01\x00\x00\x00\x01\x00\x03s\xf5\ \x00\x00\x01\x90\x7f\x9fX(\ \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x00s\x00\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x9am\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\x82\x00\x00\x00\x00\x00\x01\x00\x00\x90\x9a\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x80\xf0\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05 \x00\x00\x00\x00\x00\x01\x00\x00h\x16\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x08\x16\x00\x00\x00\x00\x00\x01\x00\x00\x9d\x1c\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x00n\xf1\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\x22\x00\x00\x00\x00\x00\x01\x00\x00yS\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06z\x00\x00\x00\x00\x00\x01\x00\x00\x7f\xb3\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06B\x00\x00\x00\x00\x00\x01\x00\x00z\xd6\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x852\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00x4\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x08,\x00\x00\x00\x00\x00\x01\x00\x00\x9d\xcf\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00gA\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x04\xfa\x00\x00\x00\x00\x00\x01\x00\x00f\x18\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x93\xe2\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05F\x00\x00\x00\x00\x00\x01\x00\x00i\xe7\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x00\x88\xab\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x00\x98\xe8\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x88\x06\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07h\x00\x00\x00\x00\x00\x01\x00\x00\x8d6\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x96\x0b\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x00v\xd6\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x074\x00\x00\x00\x00\x00\x01\x00\x00\x89\xe8\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x07P\x00\x00\x00\x00\x00\x01\x00\x00\x8cl\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06Z\x00\x00\x00\x00\x00\x01\x00\x00}.\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x08>\x00\x00\x00\x00\x00\x01\x00\x00\x9f\xf3\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05\xd2\x00\x00\x00\x00\x00\x01\x00\x00u(\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00qG\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x05^\x00\x00\x00\x00\x00\x01\x00\x00l\x1d\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x84\x8a\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00`\xb5\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x01\x07y\ \x00\x00\x01\x8d\x81\xa7\xa3`\ \x00\x00\x03X\x00\x00\x00\x00\x00\x01\x00\x00\xf7\x16\ \x00\x00\x01\x8d\x81\xa4\xadw\ \x00\x00\x04(\x00\x00\x00\x00\x00\x01\x00\x01\x11\x1c\ \x00\x00\x01\x8d\x81\xa3\xaf\xf9\ \x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x01\x0e\xee\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\xe3\xf1\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02T\x00\x00\x00\x00\x00\x01\x00\x00\xe7\x12\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x03*\x00\x00\x00\x00\x00\x01\x00\x00\xef\x8f\ \x00\x00\x01\x8d\x81\xa5\xca\x14\ \x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xe1\xcb\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02v\x00\x00\x00\x00\x00\x01\x00\x00\xe9@\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x00\xff\xdd\ \x00\x00\x01\x8d\x85u\x98\x96\ \x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x00\xe5\xc4\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x04b\x00\x00\x00\x00\x00\x01\x00\x01\x19_\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xeb0\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02\xf6\x00\x00\x00\x00\x00\x01\x00\x00\xeda\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x00\xfd\xac\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x04\xa6\x00\x00\x00\x00\x00\x01\x00\x01\x1ag\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x00\xb3\x8b\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\xf4\x00\x00\x00\x00\x00\x01\x00\x00\xda\xf8\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\x82\x00\x00\x00\x00\x00\x01\x00\x00\xd1%\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x00\xc1{\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05 \x00\x00\x00\x00\x00\x01\x00\x00\xa8\xa1\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x08\x16\x00\x00\x00\x00\x00\x01\x00\x00\xdd\xa7\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x00\xaf|\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\x22\x00\x00\x00\x00\x00\x01\x00\x00\xb9\xde\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06z\x00\x00\x00\x00\x00\x01\x00\x00\xc0>\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06B\x00\x00\x00\x00\x00\x01\x00\x00\xbba\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\xe2\x00\x00\x00\x00\x00\x01\x00\x00\xc5\xbd\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xb8\xbf\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x08,\x00\x00\x00\x00\x00\x01\x00\x00\xdeZ\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xa7\xcc\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x04\xfa\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xa3\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x00\xd4m\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05F\x00\x00\x00\x00\x00\x01\x00\x00\xaar\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x00\xc96\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x00\xd9s\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\xfc\x00\x00\x00\x00\x00\x01\x00\x00\xc8\x91\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07h\x00\x00\x00\x00\x00\x01\x00\x00\xcd\xc1\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x00\xd6\x96\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x00\xb7a\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x074\x00\x00\x00\x00\x00\x01\x00\x00\xcas\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07P\x00\x00\x00\x00\x00\x01\x00\x00\xcc\xf7\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06Z\x00\x00\x00\x00\x00\x01\x00\x00\xbd\xb9\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x08>\x00\x00\x00\x00\x00\x01\x00\x00\xe0~\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05\xd2\x00\x00\x00\x00\x00\x01\x00\x00\xb5\xb3\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\xb1\xd2\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05^\x00\x00\x00\x00\x00\x01\x00\x00\xac\xa8\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x06\xc4\x00\x00\x00\x00\x00\x01\x00\x00\xc5\x15\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00\xa1@\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x01O\xd8\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\xf4\x00\x01\x00\x00\x00\x01\x00\x01\xbd\x98\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\x82\x00\x00\x00\x00\x00\x01\x00\x01\x97\xbf\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x01q\xbb\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05 \x00\x00\x00\x00\x00\x01\x00\x01*.\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x08\x16\x00\x00\x00\x00\x00\x01\x00\x01\xc1d\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x01C\xad\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06\x22\x00\x00\x00\x00\x00\x01\x00\x01[\xe2\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06z\x00\x00\x00\x00\x00\x01\x00\x01i\x1f\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06B\x00\x00\x00\x00\x00\x01\x00\x01d\xbe\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x06\xe2\x00\x00\x00\x00\x00\x01\x00\x01~\x5c\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x01V\xcd\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x08,\x00\x00\x00\x00\x00\x01\x00\x01\xc6\xeb\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x01&\x1b\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x04\xfa\x00\x00\x00\x00\x00\x01\x00\x01 \xfd\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x01\xaa_\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05F\x00\x00\x00\x00\x00\x01\x00\x01;`\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x01\x885\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x01\xb9\xe2\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06\xfc\x00\x00\x00\x00\x00\x01\x00\x01\x83n\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07h\x00\x01\x00\x00\x00\x01\x00\x01\x96m\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07\xbc\x00\x01\x00\x00\x00\x01\x00\x01\xb02\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05\xf6\x00\x01\x00\x00\x00\x01\x00\x01Tn\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x074\x00\x00\x00\x00\x00\x01\x00\x01\x8f\xda\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x07P\x00\x01\x00\x00\x00\x01\x00\x01\x94\x88\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06Z\x00\x01\x00\x00\x00\x01\x00\x01g\xc0\ \x00\x00\x01\x8d\x80\x12\x85_\ \x00\x00\x08>\x00\x00\x00\x00\x00\x01\x00\x01\xcc9\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05\xd2\x00\x01\x00\x00\x00\x01\x00\x01S\x01\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x01J\x1d\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x05^\x00\x00\x00\x00\x00\x01\x00\x01?\xd0\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x06\xc4\x00\x00\x00\x00\x00\x01\x00\x01z\xcb\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x01\x1c\x8d\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x00K\xff\ \x00\x00\x01\x8d\x81\xa7\xa3`\ \x00\x00\x03X\x00\x00\x00\x00\x00\x01\x00\x00;\x9f\ \x00\x00\x01\x8d\x81\xa4\xadw\ \x00\x00\x04(\x00\x00\x00\x00\x00\x01\x00\x00UD\ \x00\x00\x01\x8d\x81\xa3\xaf\xf9\ \x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00St\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00(}\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02T\x00\x00\x00\x00\x00\x01\x00\x00+\x9e\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x03*\x00\x00\x00\x00\x00\x01\x00\x004\x18\ \x00\x00\x01\x8d\x81\xa5\xca\x14\ \x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00&Z\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x02v\x00\x00\x00\x00\x00\x01\x00\x00-\xc9\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x00Dc\ \x00\x00\x01\x8d\x85u\x98\x96\ \x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x00*P\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x04b\x00\x00\x00\x00\x00\x01\x00\x00]\x87\ \x00\x00\x01\x8d\x80\x12\x85c\ \x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00/\xb9\ \x00\x00\x01\x8d\x81\xa6\xd7\x82\ \x00\x00\x02\xf6\x00\x00\x00\x00\x00\x01\x00\x001\xea\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x03\x8a\x00\x00\x00\x00\x00\x01\x00\x00B5\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x04\xa6\x00\x00\x00\x00\x00\x01\x00\x00^\x8f\ \x00\x00\x01\x8d\x80\x12\x85f\ \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x02\x15\xe9\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x07\xf4\x00\x00\x00\x00\x00\x01\x00\x02\xb4#\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x07\x82\x00\x00\x00\x00\x00\x01\x00\x02\x91c\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x02Q\xb4\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05 \x00\x00\x00\x00\x00\x01\x00\x01\xed\x9e\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x08\x16\x00\x00\x00\x00\x00\x01\x00\x02\xbd#\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x02\x00D\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\x22\x00\x00\x00\x00\x00\x01\x00\x022\x9c\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06z\x00\x00\x00\x00\x00\x01\x00\x02G\x8c\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06B\x00\x00\x00\x00\x00\x01\x00\x02=\x19\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\xe2\x00\x00\x00\x00\x00\x01\x00\x02d\x05\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x02+\xc1\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x08,\x00\x00\x00\x00\x00\x01\x00\x02\xc4\xa3\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x01\xe6\xb8\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x04\xfa\x00\x00\x00\x00\x00\x01\x00\x01\xdf\x84\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x02\x98\xb1\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05F\x00\x00\x00\x00\x00\x01\x00\x01\xf1[\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x02r\x8e\ \x00\x00\x01\x8d\x80\x12\x85Y\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x02\xac\x99\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\xfc\x00\x00\x00\x00\x00\x01\x00\x02k\xa5\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x07h\x00\x00\x00\x00\x00\x01\x00\x02\x8aL\ \x00\x00\x01\x8d\x80\x12\x85\x5c\ \x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x02\xa2\xe5\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x02$\xd9\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x074\x00\x00\x00\x00\x00\x01\x00\x02{,\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x07P\x00\x00\x00\x00\x00\x01\x00\x02\x82\xa0\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06Z\x00\x00\x00\x00\x00\x01\x00\x02E$\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x08>\x00\x00\x00\x00\x00\x01\x00\x02\xcc\x11\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05\xd2\x00\x00\x00\x00\x00\x01\x00\x02\x1c\xd3\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x02\x0c\x0f\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05^\x00\x00\x00\x00\x00\x01\x00\x01\xf8\xaf\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x06\xc4\x00\x00\x00\x00\x00\x01\x00\x02[\xc2\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x01\xd4C\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x05\xbc\x00\x00\x00\x00\x00\x01\x00\x06Nn\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07\xf4\x00\x00\x00\x00\x00\x01\x00\x06\xb4\x09\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07\x82\x00\x00\x00\x00\x00\x01\x00\x06\x9b\x7f\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\x9e\x00\x00\x00\x00\x00\x01\x00\x06pZ\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05 \x00\x00\x00\x00\x00\x01\x00\x06+\x0c\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x08\x16\x00\x00\x00\x00\x00\x01\x00\x06\xbd\x08\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x068\xb1\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\x22\x00\x00\x00\x00\x00\x01\x00\x06V\xa7\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06z\x00\x00\x00\x00\x00\x01\x00\x06f\x1e\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06B\x00\x00\x00\x00\x00\x01\x00\x06a8\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\xe2\x00\x00\x00\x00\x00\x01\x00\x06\x82\xb9\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x06T\xf5\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x08,\x00\x00\x00\x00\x00\x01\x00\x06\xbfZ\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05\x0c\x00\x00\x00\x00\x00\x01\x00\x06)O\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x04\xfa\x00\x00\x00\x00\x00\x01\x00\x06'G\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07\x9e\x00\x00\x00\x00\x00\x01\x00\x06\x9d\xa2\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05F\x00\x00\x00\x00\x00\x01\x00\x06.\xc9\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07\x12\x00\x00\x00\x00\x00\x01\x00\x06\x8c9\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07\xda\x00\x00\x00\x00\x00\x01\x00\x06\xb1\xaa\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\xfc\x00\x00\x00\x00\x00\x01\x00\x06\x8aw\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07h\x00\x00\x00\x00\x00\x01\x00\x06\x99\x9a\ \x00\x00\x01\x8d\x80\x12\x85H\ \x00\x00\x07\xbc\x00\x00\x00\x00\x00\x01\x00\x06\xa7\xee\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05\xf6\x00\x00\x00\x00\x00\x01\x00\x06S\x0b\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x074\x00\x00\x00\x00\x00\x01\x00\x06\x8f\xa9\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x07P\x00\x00\x00\x00\x00\x01\x00\x06\x97\x1d\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06Z\x00\x00\x00\x00\x00\x01\x00\x06c\xb6\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x08>\x00\x00\x00\x00\x00\x01\x00\x06\xc1\x9c\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05\xd2\x00\x00\x00\x00\x00\x01\x00\x06P/\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x06D|\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x05^\x00\x00\x00\x00\x00\x01\x00\x066,\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x06\xc4\x00\x00\x00\x00\x00\x01\x00\x06zv\ \x00\x00\x01\x8d\x80\x12\x85E\ \x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x06\x1b\xf7\ \x00\x00\x01\x8d\x80\x12\x85E\ " def qInitResources(): QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources() persepolisdm-persepolis-867ee76/persepolis/gui/setting_ui.py000066400000000000000000001014631464161131600244650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtWidgets import QAbstractItemView, QTableWidget, QTableWidgetItem, QCheckBox, QVBoxLayout, QHBoxLayout, QFrame, QWidget, QLabel, QLineEdit, QTabWidget, QSpinBox, QPushButton, QDial, QComboBox, QFontComboBox from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QAbstractItemView, QTableWidget, QTableWidgetItem, QCheckBox, QVBoxLayout, QHBoxLayout, QFrame, QWidget, QLabel, QLineEdit, QTabWidget, QSpinBox, QPushButton, QDial, QComboBox, QFontComboBox from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon from persepolis.gui.customized_widgets import MyQDateTimeEdit from persepolis.gui import resources class KeyCapturingWindow_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.setWindowTitle(QCoreApplication.translate("setting_ui_tr", 'Preferences')) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) global icons icons = ':/' + str(self.persepolis_setting.value('settings/icons')) + '/' window_verticalLayout = QVBoxLayout(self) self.pressKeyLabel = QLabel(self) window_verticalLayout.addWidget(self.pressKeyLabel) self.capturedKeyLabel = QLabel(self) window_verticalLayout.addWidget(self.capturedKeyLabel) # window buttons buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) buttons_horizontalLayout.addWidget(self.cancel_pushButton) self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) # labels self.pressKeyLabel.setText(QCoreApplication.translate("setting_ui_tr", "Press new keys")) self.cancel_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Cancel")) self.ok_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "OK")) class Setting_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.setWindowTitle(QCoreApplication.translate("setting_ui_tr", 'Preferences')) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) global icons icons = ':/' + str(self.persepolis_setting.value('settings/icons')) + '/' # main layout window_verticalLayout = QVBoxLayout(self) # setting_tabWidget self.setting_tabWidget = QTabWidget(self) # download_options_tab self.download_options_tab = QWidget() download_options_tab_verticalLayout = QVBoxLayout(self.download_options_tab) download_options_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # tries tries_horizontalLayout = QHBoxLayout() self.tries_label = QLabel(self.download_options_tab) tries_horizontalLayout.addWidget(self.tries_label) self.tries_spinBox = QSpinBox(self.download_options_tab) self.tries_spinBox.setMinimum(1) tries_horizontalLayout.addWidget(self.tries_spinBox) download_options_tab_verticalLayout.addLayout(tries_horizontalLayout) # wait wait_horizontalLayout = QHBoxLayout() self.wait_label = QLabel(self.download_options_tab) wait_horizontalLayout.addWidget(self.wait_label) self.wait_spinBox = QSpinBox(self.download_options_tab) wait_horizontalLayout.addWidget(self.wait_spinBox) download_options_tab_verticalLayout.addLayout(wait_horizontalLayout) # time_out time_out_horizontalLayout = QHBoxLayout() self.time_out_label = QLabel(self.download_options_tab) time_out_horizontalLayout.addWidget(self.time_out_label) self.time_out_spinBox = QSpinBox(self.download_options_tab) time_out_horizontalLayout.addWidget(self.time_out_spinBox) download_options_tab_verticalLayout.addLayout(time_out_horizontalLayout) # connections connections_horizontalLayout = QHBoxLayout() self.connections_label = QLabel(self.download_options_tab) connections_horizontalLayout.addWidget(self.connections_label) self.connections_spinBox = QSpinBox(self.download_options_tab) self.connections_spinBox.setMinimum(1) self.connections_spinBox.setMaximum(16) connections_horizontalLayout.addWidget(self.connections_spinBox) download_options_tab_verticalLayout.addLayout(connections_horizontalLayout) # rpc_port self.rpc_port_label = QLabel(self.download_options_tab) self.rpc_horizontalLayout = QHBoxLayout() self.rpc_horizontalLayout.addWidget(self.rpc_port_label) self.rpc_port_spinbox = QSpinBox(self.download_options_tab) self.rpc_port_spinbox.setMinimum(1024) self.rpc_port_spinbox.setMaximum(65535) self.rpc_horizontalLayout.addWidget(self.rpc_port_spinbox) download_options_tab_verticalLayout.addLayout( self.rpc_horizontalLayout) # wait_queue wait_queue_horizontalLayout = QHBoxLayout() self.wait_queue_label = QLabel(self.download_options_tab) wait_queue_horizontalLayout.addWidget(self.wait_queue_label) self.wait_queue_time = MyQDateTimeEdit(self.download_options_tab) self.wait_queue_time.setDisplayFormat('H:mm') wait_queue_horizontalLayout.addWidget(self.wait_queue_time) download_options_tab_verticalLayout.addLayout( wait_queue_horizontalLayout) # don't check certificate checkBox self.dont_check_certificate_checkBox = QCheckBox(self.download_options_tab) download_options_tab_verticalLayout.addWidget(self.dont_check_certificate_checkBox) # remote time self.remote_time_checkBox = QCheckBox(self.download_options_tab) download_options_tab_verticalLayout.addWidget(self.remote_time_checkBox) # change aria2 path aria2_path_verticalLayout = QVBoxLayout() self.aria2_path_checkBox = QCheckBox(self.download_options_tab) aria2_path_verticalLayout.addWidget(self.aria2_path_checkBox) aria2_path_horizontalLayout = QHBoxLayout() self.aria2_path_lineEdit = QLineEdit(self.download_options_tab) aria2_path_horizontalLayout.addWidget(self.aria2_path_lineEdit) self.aria2_path_pushButton = QPushButton(self.download_options_tab) aria2_path_horizontalLayout.addWidget(self.aria2_path_pushButton) aria2_path_verticalLayout.addLayout(aria2_path_horizontalLayout) download_options_tab_verticalLayout.addLayout(aria2_path_verticalLayout) download_options_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.download_options_tab, "") # save_as_tab self.save_as_tab = QWidget() save_as_tab_verticalLayout = QVBoxLayout(self.save_as_tab) save_as_tab_verticalLayout.setContentsMargins(20, 30, 0, 0) # download_folder self.download_folder_horizontalLayout = QHBoxLayout() self.download_folder_label = QLabel(self.save_as_tab) self.download_folder_horizontalLayout.addWidget( self.download_folder_label) self.download_folder_lineEdit = QLineEdit(self.save_as_tab) self.download_folder_horizontalLayout.addWidget(self.download_folder_lineEdit) self.download_folder_pushButton = QPushButton(self.save_as_tab) self.download_folder_horizontalLayout.addWidget(self.download_folder_pushButton) save_as_tab_verticalLayout.addLayout(self.download_folder_horizontalLayout) # create subfolder self.subfolder_checkBox = QCheckBox(self.save_as_tab) save_as_tab_verticalLayout.addWidget(self.subfolder_checkBox) save_as_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.save_as_tab, "") # notifications_tab self.notifications_tab = QWidget() notification_tab_verticalLayout = QVBoxLayout(self.notifications_tab) notification_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) self.enable_notifications_checkBox = QCheckBox(self.notifications_tab) notification_tab_verticalLayout.addWidget(self.enable_notifications_checkBox) self.sound_frame = QFrame(self.notifications_tab) self.sound_frame.setFrameShape(QFrame.StyledPanel) self.sound_frame.setFrameShadow(QFrame.Raised) verticalLayout = QVBoxLayout(self.sound_frame) self.volume_label = QLabel(self.sound_frame) verticalLayout.addWidget(self.volume_label) self.volume_dial = QDial(self.sound_frame) self.volume_dial.setProperty("value", 100) verticalLayout.addWidget(self.volume_dial) notification_tab_verticalLayout.addWidget(self.sound_frame) # message_notification message_notification_horizontalLayout = QHBoxLayout() self.notification_label = QLabel(self.notifications_tab) message_notification_horizontalLayout.addWidget(self.notification_label) self.notification_comboBox = QComboBox(self.notifications_tab) message_notification_horizontalLayout.addWidget(self.notification_comboBox) notification_tab_verticalLayout.addLayout(message_notification_horizontalLayout) notification_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.notifications_tab, "") # style_tab self.style_tab = QWidget() style_tab_verticalLayout = QVBoxLayout(self.style_tab) style_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # style style_horizontalLayout = QHBoxLayout() self.style_label = QLabel(self.style_tab) style_horizontalLayout.addWidget(self.style_label) self.style_comboBox = QComboBox(self.style_tab) style_horizontalLayout.addWidget(self.style_comboBox) style_tab_verticalLayout.addLayout(style_horizontalLayout) # language language_horizontalLayout = QHBoxLayout() self.lang_label = QLabel(self.style_tab) language_horizontalLayout.addWidget(self.lang_label) self.lang_comboBox = QComboBox(self.style_tab) language_horizontalLayout.addWidget(self.lang_comboBox) style_tab_verticalLayout.addLayout(language_horizontalLayout) language_horizontalLayout = QHBoxLayout() self.lang_label.setText(QCoreApplication.translate("setting_ui_tr", "Language: ")) # color scheme self.color_label = QLabel(self.style_tab) language_horizontalLayout.addWidget(self.color_label) self.color_comboBox = QComboBox(self.style_tab) language_horizontalLayout.addWidget(self.color_comboBox) style_tab_verticalLayout.addLayout(language_horizontalLayout) # icons icons_horizontalLayout = QHBoxLayout() self.icon_label = QLabel(self.style_tab) icons_horizontalLayout.addWidget(self.icon_label) self.icon_comboBox = QComboBox(self.style_tab) icons_horizontalLayout.addWidget(self.icon_comboBox) style_tab_verticalLayout.addLayout(icons_horizontalLayout) self.icons_size_horizontalLayout = QHBoxLayout() self.icons_size_label = QLabel(self.style_tab) self.icons_size_horizontalLayout.addWidget(self.icons_size_label) self.icons_size_comboBox = QComboBox(self.style_tab) self.icons_size_horizontalLayout.addWidget(self.icons_size_comboBox) style_tab_verticalLayout.addLayout(self.icons_size_horizontalLayout) # font font_horizontalLayout = QHBoxLayout() self.font_checkBox = QCheckBox(self.style_tab) font_horizontalLayout.addWidget(self.font_checkBox) self.fontComboBox = QFontComboBox(self.style_tab) font_horizontalLayout.addWidget(self.fontComboBox) self.font_size_label = QLabel(self.style_tab) font_horizontalLayout.addWidget(self.font_size_label) self.font_size_spinBox = QSpinBox(self.style_tab) self.font_size_spinBox.setMinimum(1) font_horizontalLayout.addWidget(self.font_size_spinBox) style_tab_verticalLayout.addLayout(font_horizontalLayout) self.setting_tabWidget.addTab(self.style_tab, "") window_verticalLayout.addWidget(self.setting_tabWidget) # start persepolis in system tray if browser executed self.start_persepolis_if_browser_executed_checkBox = QCheckBox(self.style_tab) style_tab_verticalLayout.addWidget(self.start_persepolis_if_browser_executed_checkBox) # hide window if close button clicked self.hide_window_checkBox = QCheckBox(self.style_tab) style_tab_verticalLayout.addWidget(self.hide_window_checkBox) # Enable system tray icon self.enable_system_tray_checkBox = QCheckBox(self.style_tab) style_tab_verticalLayout.addWidget(self.enable_system_tray_checkBox) # after_download dialog self.after_download_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.after_download_checkBox) # show_menubar_checkbox self.show_menubar_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_menubar_checkbox) # show_sidepanel_checkbox self.show_sidepanel_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_sidepanel_checkbox) # hide progress window self.show_progress_window_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_progress_window_checkbox) # add persepolis to startup self.startup_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.startup_checkbox) # keep system awake self.keep_awake_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.keep_awake_checkBox) # check clipboard self.check_clipboard_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.check_clipboard_checkBox) # Don't show the add link window when the download request is # sent by the browser extension. self.dont_show_add_link_window_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.dont_show_add_link_window_checkBox) style_tab_verticalLayout.addStretch(1) # columns_tab self.columns_tab = QWidget() columns_tab_verticalLayout = QVBoxLayout(self.columns_tab) columns_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # creating checkBox for columns self.show_column_label = QLabel() self.column0_checkBox = QCheckBox() self.column1_checkBox = QCheckBox() self.column2_checkBox = QCheckBox() self.column3_checkBox = QCheckBox() self.column4_checkBox = QCheckBox() self.column5_checkBox = QCheckBox() self.column6_checkBox = QCheckBox() self.column7_checkBox = QCheckBox() self.column10_checkBox = QCheckBox() self.column11_checkBox = QCheckBox() self.column12_checkBox = QCheckBox() columns_tab_verticalLayout.addWidget(self.show_column_label) columns_tab_verticalLayout.addWidget(self.column0_checkBox) columns_tab_verticalLayout.addWidget(self.column1_checkBox) columns_tab_verticalLayout.addWidget(self.column2_checkBox) columns_tab_verticalLayout.addWidget(self.column3_checkBox) columns_tab_verticalLayout.addWidget(self.column4_checkBox) columns_tab_verticalLayout.addWidget(self.column5_checkBox) columns_tab_verticalLayout.addWidget(self.column6_checkBox) columns_tab_verticalLayout.addWidget(self.column7_checkBox) columns_tab_verticalLayout.addWidget(self.column10_checkBox) columns_tab_verticalLayout.addWidget(self.column11_checkBox) columns_tab_verticalLayout.addWidget(self.column12_checkBox) columns_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.columns_tab, '') # video_finder_tab self.video_finder_tab = QWidget() video_finder_layout = QVBoxLayout(self.video_finder_tab) video_finder_layout.setContentsMargins(21, 21, 0, 0) video_finder_tab_verticalLayout = QVBoxLayout() max_links_horizontalLayout = QHBoxLayout() # max_links_label self.max_links_label = QLabel(self.video_finder_tab) max_links_horizontalLayout.addWidget(self.max_links_label) # max_links_spinBox self.max_links_spinBox = QSpinBox(self.video_finder_tab) self.max_links_spinBox.setMinimum(1) self.max_links_spinBox.setMaximum(16) max_links_horizontalLayout.addWidget(self.max_links_spinBox) video_finder_tab_verticalLayout.addLayout(max_links_horizontalLayout) self.video_finder_dl_path_horizontalLayout = QHBoxLayout() self.video_finder_frame = QFrame(self.video_finder_tab) self.video_finder_frame.setLayout(video_finder_tab_verticalLayout) video_finder_tab_verticalLayout.addStretch(1) video_finder_layout.addWidget(self.video_finder_frame) self.setting_tabWidget.addTab(self.video_finder_tab, "") # shortcut tab self.shortcut_tab = QWidget() shortcut_tab_verticalLayout = QVBoxLayout(self.shortcut_tab) shortcut_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # shortcut_table self.shortcut_table = QTableWidget(self) self.shortcut_table.setColumnCount(2) self.shortcut_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.shortcut_table.setSelectionMode(QAbstractItemView.SingleSelection) self.shortcut_table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.shortcut_table.verticalHeader().hide() shortcut_table_header = [QCoreApplication.translate("setting_ui_tr", 'Action'), QCoreApplication.translate("setting_ui_tr", 'Shortcut')] self.shortcut_table.setHorizontalHeaderLabels(shortcut_table_header) shortcut_tab_verticalLayout.addWidget(self.shortcut_table) self.setting_tabWidget.addTab(self.shortcut_tab, QCoreApplication.translate("setting_ui_tr", "Shortcuts")) # Actions actions_list = [QCoreApplication.translate('setting_ui_tr', 'Quit'), QCoreApplication.translate('setting_ui_tr', 'Minimize to System Tray'), QCoreApplication.translate('setting_ui_tr', 'Remove Download Items'), QCoreApplication.translate('setting_ui_tr', 'Delete Download Items'), QCoreApplication.translate('setting_ui_tr', 'Move Selected Items Up'), QCoreApplication.translate('setting_ui_tr', 'Move Selected Items Down'), QCoreApplication.translate('setting_ui_tr', 'Add New Download Link'), QCoreApplication.translate('setting_ui_tr', 'Add New Video Link'), QCoreApplication.translate('setting_ui_tr', 'Import Links from Text File')] # add actions to the shortcut_table j = 0 for action in actions_list: item = QTableWidgetItem(str(action)) # align center item.setTextAlignment(0x0004 | 0x0080) # insert item in shortcut_table self.shortcut_table.insertRow(j) self.shortcut_table.setItem(j, 0, item) j = j + 1 self.shortcut_table.resizeColumnsToContents() # window buttons buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) self.defaults_pushButton = QPushButton(self) buttons_horizontalLayout.addWidget(self.defaults_pushButton) self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) buttons_horizontalLayout.addWidget(self.cancel_pushButton) self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) # set style_tab for default self.setting_tabWidget.setCurrentIndex(3) # labels and translations self.setWindowTitle(QCoreApplication.translate("setting_ui_tr", "Preferences")) self.tries_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set number of tries if download failed.

")) self.tries_label.setText(QCoreApplication.translate("setting_ui_tr", "Number of tries: ")) self.tries_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set number of tries if download failed.

")) self.wait_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

")) self.wait_label.setText(QCoreApplication.translate("setting_ui_tr", "Wait period between retries (seconds): ")) self.wait_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

")) self.time_out_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set timeout in seconds.

")) self.time_out_label.setText(QCoreApplication.translate("setting_ui_tr", "Timeout (seconds): ")) self.time_out_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Set timeout in seconds.

")) self.connections_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Using multiple connections can help speed up your download.

")) self.connections_label.setText(QCoreApplication.translate("setting_ui_tr", "Number of connections: ")) self.connections_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Using multiple connections can help speed up your download.

")) self.rpc_port_label.setText(QCoreApplication.translate("setting_ui_tr", "RPC port number: ")) self.rpc_port_spinbox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

")) self.wait_queue_label.setText(QCoreApplication.translate( "setting_ui_tr", 'Wait period between each download in queue:')) self.dont_check_certificate_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Don't use certificate to verify the peers")) self.dont_check_certificate_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

This option avoids SSL/TLS handshake failure. But use it at your own risk!

")) self.remote_time_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Remote time")) self.remote_time_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.

")) self.aria2_path_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Change Aria2 default path')) self.aria2_path_pushButton.setText(QCoreApplication.translate("setting_ui_tr", 'Change')) aria2_path_tooltip = QCoreApplication.translate( "setting_ui_tr", "

Attention: Wrong path may cause problems! Do it carefully or don't change default setting!

") self.aria2_path_checkBox.setToolTip(aria2_path_tooltip) self.aria2_path_lineEdit.setToolTip(aria2_path_tooltip) self.aria2_path_pushButton.setToolTip(aria2_path_tooltip) self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.download_options_tab), QCoreApplication.translate("setting_ui_tr", "Download Options")) self.download_folder_label.setText(QCoreApplication.translate("setting_ui_tr", "Download folder: ")) self.download_folder_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Change")) self.subfolder_checkBox.setText(QCoreApplication.translate( "setting_ui_tr", "Create subfolders for Music,Videos, ... in default download folder")) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.save_as_tab), QCoreApplication.translate("setting_ui_tr", "Save As")) self.enable_notifications_checkBox.setText( QCoreApplication.translate("setting_ui_tr", "Enable Notification Sounds")) self.volume_label.setText(QCoreApplication.translate("setting_ui_tr", "Volume: ")) self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.notifications_tab), QCoreApplication.translate("setting_ui_tr", "Notifications")) self.style_label.setText(QCoreApplication.translate("setting_ui_tr", "Style: ")) self.color_label.setText(QCoreApplication.translate("setting_ui_tr", "Color scheme: ")) self.icon_label.setText(QCoreApplication.translate("setting_ui_tr", "Icons: ")) self.icons_size_label.setText(QCoreApplication.translate("setting_ui_tr", "Toolbar icons size: ")) self.notification_label.setText(QCoreApplication.translate("setting_ui_tr", "Notification type: ")) self.font_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Font: ")) self.font_size_label.setText(QCoreApplication.translate("setting_ui_tr", "Size: ")) self.hide_window_checkBox.setText(QCoreApplication.translate( "setting_ui_tr", "Hide main window if close button clicked.")) self.hide_window_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

This feature may not work in your operating system.

")) self.start_persepolis_if_browser_executed_checkBox.setText( QCoreApplication.translate('setting_ui_tr', 'If browser is opened, start Persepolis in system tray')) self.enable_system_tray_checkBox.setText( QCoreApplication.translate("setting_ui_tr", "Enable system tray icon")) self.after_download_checkBox.setText( QCoreApplication.translate("setting_ui_tr", "Show download complete dialog when download is finished")) self.show_menubar_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Show menubar")) self.show_sidepanel_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Show side panel")) self.show_progress_window_checkbox.setText( QCoreApplication.translate("setting_ui_tr", "Show download progress window")) self.startup_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Run Persepolis at startup")) self.keep_awake_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Keep system awake!")) self.keep_awake_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

This option will prevent the system from going to sleep.\ It is necessary if your power manager is suspending the system automatically.

")) self.check_clipboard_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Check system clipboard for copied links")) self.check_clipboard_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

The program will automatically check the clipboard for copied links.\

")) self.dont_show_add_link_window_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Download requests from the browser will be executed immediately.")) self.dont_show_add_link_window_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "

When a download request is sent from the browser extension, the download will start without showing the Add Link window.\

")) self.wait_queue_time.setToolTip( QCoreApplication.translate("setting_ui_tr", "

Format HH:MM

")) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.style_tab), QCoreApplication.translate("setting_ui_tr", "Preferences")) # columns_tab self.show_column_label.setText(QCoreApplication.translate("setting_ui_tr", 'Show these columns:')) self.column0_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'File Name')) self.column1_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Status')) self.column2_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Size')) self.column3_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Downloaded')) self.column4_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Percentage')) self.column5_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Connections')) self.column6_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Transfer Rate')) self.column7_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Estimated Time Left')) self.column10_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'First Try Date')) self.column11_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Last Try Date')) self.column12_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Category')) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.columns_tab), QCoreApplication.translate("setting_ui_tr", "Columns Customization")) # Video Finder options tab self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.video_finder_tab), QCoreApplication.translate("setting_ui_tr", "Video Finder Options")) self.max_links_label.setText(QCoreApplication.translate("setting_ui_tr", 'Maximum number of links to capture:
' '(If browser sends multiple video links at a time)')) # window buttons self.defaults_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Defaults")) self.cancel_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Cancel")) self.ok_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "OK")) persepolisdm-persepolis-867ee76/persepolis/gui/text_queue_ui.py000066400000000000000000000341531464161131600252010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtWidgets import QHeaderView, QPushButton, QWidget, QTabWidget, QVBoxLayout, QTableWidget, QAbstractItemView, QLabel, QLineEdit, QHBoxLayout, QSpinBox, QComboBox, QFrame, QCheckBox, QGridLayout, QRadioButton from PySide6.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QHeaderView, QPushButton, QWidget, QTabWidget, QVBoxLayout, QTableWidget, QAbstractItemView, QLabel, QLineEdit, QHBoxLayout, QSpinBox, QComboBox, QFrame, QCheckBox, QGridLayout, QRadioButton from PyQt5.QtCore import Qt, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon from persepolis.gui import resources class TextQueue_Ui(QWidget): def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) window_verticalLayout = QVBoxLayout() self.setLayout(window_verticalLayout) # queue_tabWidget self.queue_tabWidget = QTabWidget(self) window_verticalLayout.addWidget(self.queue_tabWidget) # links_tab self.links_tab = QWidget() links_tab_verticalLayout = QVBoxLayout(self.links_tab) # link table self.links_table = QTableWidget(self.links_tab) self.links_table.setSizeAdjustPolicy(QAbstractItemView.AdjustToContents) links_tab_verticalLayout.addWidget(self.links_table) self.links_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.links_table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.links_table.verticalHeader().hide() self.links_table.setColumnCount(3) links_table_header_labels = [ 'File Name', 'Download Link', 'dictionary'] self.links_table.setHorizontalHeaderLabels(links_table_header_labels) self.links_table.setColumnHidden(2, True) self.links_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) self.links_table.horizontalHeader().setStretchLastSection(True) # add_queue add_queue_horizontalLayout = QHBoxLayout() self.select_all_pushButton = QPushButton(self.links_tab) add_queue_horizontalLayout.addWidget(self.select_all_pushButton) self.deselect_all_pushButton = QPushButton(self.links_tab) add_queue_horizontalLayout.addWidget(self.deselect_all_pushButton) add_queue_horizontalLayout.addStretch(1) self.add_queue_label = QLabel(self.links_tab) add_queue_horizontalLayout.addWidget(self.add_queue_label) self.add_queue_comboBox = QComboBox(self.links_tab) add_queue_horizontalLayout.addWidget(self.add_queue_comboBox) links_tab_verticalLayout.addLayout(add_queue_horizontalLayout) links_tab_verticalLayout.addStretch(1) self.queue_tabWidget.addTab(self.links_tab, "") # options_tab self.options_tab = QWidget() options_tab_verticalLayout = QVBoxLayout(self.options_tab) # proxy proxy_verticalLayout = QVBoxLayout() self.proxy_checkBox = QCheckBox(self.options_tab) proxy_verticalLayout.addWidget(self.proxy_checkBox) self.proxy_frame = QFrame(self.options_tab) self.proxy_frame.setFrameShape(QFrame.StyledPanel) self.proxy_frame.setFrameShadow(QFrame.Raised) proxy_gridLayout = QGridLayout(self.proxy_frame) self.ip_lineEdit = QLineEdit(self.proxy_frame) self.ip_lineEdit.setInputMethodHints(Qt.ImhNone) proxy_gridLayout.addWidget(self.ip_lineEdit, 0, 1, 1, 1) self.proxy_pass_label = QLabel(self.proxy_frame) proxy_gridLayout.addWidget(self.proxy_pass_label, 2, 2, 1, 1) self.proxy_pass_lineEdit = QLineEdit(self.proxy_frame) self.proxy_pass_lineEdit.setEchoMode(QLineEdit.Password) proxy_gridLayout.addWidget(self.proxy_pass_lineEdit, 2, 3, 1, 1) self.ip_label = QLabel(self.proxy_frame) proxy_gridLayout.addWidget(self.ip_label, 0, 0, 1, 1) self.proxy_user_lineEdit = QLineEdit(self.proxy_frame) proxy_gridLayout.addWidget(self.proxy_user_lineEdit, 0, 3, 1, 1) self.proxy_user_label = QLabel(self.proxy_frame) proxy_gridLayout.addWidget(self.proxy_user_label, 0, 2, 1, 1) self.port_label = QLabel(self.proxy_frame) proxy_gridLayout.addWidget(self.port_label, 2, 0, 1, 1) self.port_spinBox = QSpinBox(self.proxy_frame) self.port_spinBox.setMaximum(9999) self.port_spinBox.setSingleStep(1) proxy_gridLayout.addWidget(self.port_spinBox, 2, 1, 1, 1) proxy_verticalLayout.addWidget(self.proxy_frame) # type of proxy self.http_radioButton = QRadioButton(self.proxy_frame) proxy_gridLayout.addWidget(self.http_radioButton, 4, 0, 1, 1) self.https_radioButton = QRadioButton(self.proxy_frame) proxy_gridLayout.addWidget(self.https_radioButton, 5, 0, 1, 1) # hide this widget until https support self.https_radioButton.hide() self.socks5_radioButton = QRadioButton(self.proxy_frame) proxy_gridLayout.addWidget(self.socks5_radioButton, 6, 0, 1, 1) options_tab_verticalLayout.addLayout(proxy_verticalLayout) # download Username & Password download_horizontalLayout = QHBoxLayout() download_horizontalLayout.setContentsMargins(-1, 10, -1, -1) download_verticalLayout = QVBoxLayout() self.download_checkBox = QCheckBox(self.options_tab) download_verticalLayout.addWidget(self.download_checkBox) self.download_frame = QFrame(self.options_tab) self.download_frame.setFrameShape(QFrame.StyledPanel) self.download_frame.setFrameShadow(QFrame.Raised) download_gridLayout = QGridLayout(self.download_frame) self.download_user_lineEdit = QLineEdit(self.download_frame) download_gridLayout.addWidget(self.download_user_lineEdit, 0, 1, 1, 1) self.download_user_label = QLabel(self.download_frame) download_gridLayout.addWidget(self.download_user_label, 0, 0, 1, 1) self.download_pass_label = QLabel(self.download_frame) download_gridLayout.addWidget(self.download_pass_label, 1, 0, 1, 1) self.download_pass_lineEdit = QLineEdit(self.download_frame) self.download_pass_lineEdit.setEchoMode(QLineEdit.Password) download_gridLayout.addWidget(self.download_pass_lineEdit, 1, 1, 1, 1) download_verticalLayout.addWidget(self.download_frame) download_horizontalLayout.addLayout(download_verticalLayout) # select folder self.folder_frame = QFrame(self.options_tab) self.folder_frame.setFrameShape(QFrame.StyledPanel) self.folder_frame.setFrameShadow(QFrame.Raised) folder_gridLayout = QGridLayout(self.folder_frame) self.download_folder_lineEdit = QLineEdit(self.folder_frame) folder_gridLayout.addWidget(self.download_folder_lineEdit, 2, 0, 1, 1) self.folder_pushButton = QPushButton(self.folder_frame) folder_gridLayout.addWidget(self.folder_pushButton, 3, 0, 1, 1) self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.folder_checkBox = QCheckBox(self.folder_frame) folder_gridLayout.addWidget(self.folder_checkBox) self.folder_label = QLabel(self.folder_frame) self.folder_label.setAlignment(Qt.AlignCenter) folder_gridLayout.addWidget(self.folder_label, 1, 0, 1, 1) download_horizontalLayout.addWidget(self.folder_frame) options_tab_verticalLayout.addLayout(download_horizontalLayout) self.queue_tabWidget.addTab(self.options_tab, '') # limit Speed limit_verticalLayout = QVBoxLayout() self.limit_checkBox = QCheckBox(self.options_tab) limit_verticalLayout.addWidget(self.limit_checkBox) self.limit_frame = QFrame(self.options_tab) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) limit_horizontalLayout = QHBoxLayout(self.limit_frame) self.limit_spinBox = QSpinBox(self.limit_frame) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) limit_horizontalLayout.addWidget(self.limit_spinBox) self.limit_comboBox = QComboBox(self.limit_frame) self.limit_comboBox.addItem("KiB/S") self.limit_comboBox.addItem("MiB/S") limit_horizontalLayout.addWidget(self.limit_comboBox) limit_verticalLayout.addWidget(self.limit_frame) limit_connections_horizontalLayout = QHBoxLayout() limit_connections_horizontalLayout.addLayout(limit_verticalLayout) # number of connections connections_horizontalLayout = QHBoxLayout() connections_horizontalLayout.setContentsMargins(-1, 10, -1, -1) self.connections_frame = QFrame(self.options_tab) self.connections_frame.setFrameShape(QFrame.StyledPanel) self.connections_frame.setFrameShadow(QFrame.Raised) horizontalLayout_3 = QHBoxLayout(self.connections_frame) self.connections_label = QLabel(self.connections_frame) horizontalLayout_3.addWidget(self.connections_label) self.connections_spinBox = QSpinBox(self.connections_frame) self.connections_spinBox.setMinimum(1) self.connections_spinBox.setMaximum(16) self.connections_spinBox.setProperty("value", 16) horizontalLayout_3.addWidget(self.connections_spinBox) connections_horizontalLayout.addWidget(self.connections_frame) limit_connections_horizontalLayout.addLayout(connections_horizontalLayout) options_tab_verticalLayout.addLayout(limit_connections_horizontalLayout) options_tab_verticalLayout.addStretch(1) # buttons buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) # ok_pushButton self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.ok_pushButton) # cancel_pushButton self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) buttons_horizontalLayout.addWidget(self.cancel_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) # labels self.setWindowTitle(QCoreApplication.translate("text_ui_tr", "Persepolis Download Manager")) self.queue_tabWidget.setTabText( self.queue_tabWidget.indexOf(self.links_tab), QCoreApplication.translate("text_ui_tr", 'Links')) self.queue_tabWidget.setTabText( self.queue_tabWidget.indexOf(self.options_tab), QCoreApplication.translate("text_ui_tr", 'Download Options')) self.select_all_pushButton.setText(QCoreApplication.translate("text_ui_tr", 'Select All')) self.deselect_all_pushButton.setText(QCoreApplication.translate("text_ui_tr", 'Deselect All')) self.add_queue_label.setText(QCoreApplication.translate("text_ui_tr", 'Add to queue: ')) self.proxy_checkBox.setText(QCoreApplication.translate("text_ui_tr", 'Proxy')) self.proxy_pass_label.setText(QCoreApplication.translate("text_ui_tr", "Proxy password: ")) self.ip_label.setText(QCoreApplication.translate("text_ui_tr", "IP:")) self.proxy_user_label.setText(QCoreApplication.translate("text_ui_tr", "Proxy username: ")) self.port_label.setText(QCoreApplication.translate("text_ui_tr", "Port:")) self.http_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "HTTP")) self.https_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "HTTPS")) self.socks5_radioButton.setText(QCoreApplication.translate("addlink_ui_tr", "SOCKS5")) self.download_checkBox.setText(QCoreApplication.translate("text_ui_tr", "Download username and password")) self.download_user_label.setText(QCoreApplication.translate("text_ui_tr", "Download username: ")) self.download_pass_label.setText(QCoreApplication.translate("text_ui_tr", "Download password: ")) self.folder_pushButton.setText(QCoreApplication.translate("text_ui_tr", "Change Download Folder")) self.folder_checkBox.setText(QCoreApplication.translate("addlink_ui_tr", "Remember this path")) self.folder_label.setText(QCoreApplication.translate("text_ui_tr", "Download folder: ")) self.limit_checkBox.setText(QCoreApplication.translate("text_ui_tr", "Limit speed")) self.connections_label.setText(QCoreApplication.translate("text_ui_tr", "Number of connections:")) self.ok_pushButton.setText(QCoreApplication.translate("text_ui_tr", 'OK')) self.cancel_pushButton.setText(QCoreApplication.translate("text_ui_tr", 'Cancel')) persepolisdm-persepolis-867ee76/persepolis/gui/video_finder_progress_ui.py000066400000000000000000000046601464161131600273720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.gui.progress_ui import ProgressWindow_Ui try: from PySide6.QtWidgets import QWidget, QVBoxLayout, QLabel from PySide6.QtCore import QCoreApplication except: from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel from PyQt5.QtCore import QCoreApplication class VideoFinderProgressWindow_Ui(ProgressWindow_Ui): def __init__(self, persepolis_setting): super().__init__(persepolis_setting) # status_tab self.status_tab = QWidget() status_tab_verticalLayout = QVBoxLayout(self.status_tab) # video_status_label self.video_status_label = QLabel(self.status_tab) status_tab_verticalLayout.addWidget(self.video_status_label) # audio_status_label self.audio_status_label = QLabel(self.status_tab) status_tab_verticalLayout.addWidget(self.audio_status_label) # muxing_status_label self.muxing_status_label = QLabel(self.status_tab) status_tab_verticalLayout.addWidget(self.muxing_status_label) self.progress_tabWidget.addTab(self.status_tab, "") # set status_tab as default tab self.progress_tabWidget.setCurrentIndex(2) # labels self.video_status_label.setText(QCoreApplication.translate( "video_finder_progress_ui_tr", "Video file status: ")) self.audio_status_label.setText(QCoreApplication.translate( "video_finder_progress_ui_tr", "Audio file status: ")) self.muxing_status_label.setText(QCoreApplication.translate( "video_finder_progress_ui_tr", "Mixing status: ")) self.progress_tabWidget.setTabText(self.progress_tabWidget.indexOf( self.status_tab), QCoreApplication.translate("setting_ui_tr", "Status")) persepolisdm-persepolis-867ee76/persepolis/meson.build000066400000000000000000000040221464161131600233100ustar00rootroot00000000000000shell_sources = [ '__init__.py', '__main__.py' ] constants_sources = [ 'constants/Browser.py', 'constants/__init__.py', 'constants/Os.py' ] gui_sources = [ 'gui/__init__.py', 'gui/about_ui.py', 'gui/after_download_ui.py', 'gui/mainwindow_ui.py', 'gui/progress_ui.py', 'gui/resources.py', 'gui/text_queue_ui.py', 'gui/addlink_ui.py', 'gui/customized_widgets.py', 'gui/log_window_ui.py', 'gui/palettes.py', 'gui/setting_ui.py', 'gui/video_finder_progress_ui.py' ] scripts_sources = [ 'scripts/about.py', 'scripts/bubble.py', 'scripts/error_window.py', 'scripts/play.py', 'scripts/shutdown.py', 'scripts/useful_tools.py', 'scripts/addlink.py', 'scripts/check_proxy.py', 'scripts/initialization.py', 'scripts/mainwindow.py', 'scripts/progress.py', 'scripts/spider.py', 'scripts/video_finder_addlink.py', 'scripts/after_download.py', 'scripts/compatibility.py', 'scripts/__init__.py', 'scripts/newopen.py', 'scripts/properties.py', 'scripts/startup.py', 'scripts/video_finder_progress.py', 'scripts/browser_integration.py', 'scripts/data_base.py', 'scripts/logger.py', 'scripts/osCommands.py', 'scripts/text_queue.py', 'scripts/browser_plugin_queue.py', 'scripts/download.py', 'scripts/log_window.py', 'scripts/persepolis.py', 'scripts/setting.py', 'scripts/socks5_to_http_convertor.py' ] python3.install_sources(shell_sources, subdir: 'persepolis') python3.install_sources(gui_sources, subdir: join_paths('persepolis', 'gui')) python3.install_sources(scripts_sources, subdir: join_paths('persepolis', 'scripts')) python3.install_sources(constants_sources, subdir: join_paths('persepolis', 'constants')) python = import('python') conf = configuration_data() conf.set('PYTHON', python.find_installation('python3').full_path()) conf.set('pythonsitepackagedir', python3.get_install_dir()) configure_file( input: 'persepolis.py', output: 'persepolis', configuration: conf, install: true, install_dir: get_option('bindir'), install_mode: 'r-xr-xr-x' ) persepolisdm-persepolis-867ee76/persepolis/persepolis.py000066400000000000000000000017401464161131600237110ustar00rootroot00000000000000#!@PYTHON@ # -*- coding: utf-8 -*- # 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 . # this file is created for running persepolis from /usr/bin/ or /usr/local/bin/. import sys import os pythonsitepackagedir = '@pythonsitepackagedir@' if __name__ == '__main__': sys.path.append(pythonsitepackagedir) from persepolis.scripts import persepolis persepolis.main() persepolisdm-persepolis-867ee76/persepolis/scripts/000077500000000000000000000000001464161131600226375ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/persepolis/scripts/.pep8000066400000000000000000000000441464161131600235120ustar00rootroot00000000000000[pycodestyle] max_line_length = 120 persepolisdm-persepolis-867ee76/persepolis/scripts/__init__.py000066400000000000000000000012761464161131600247560ustar00rootroot00000000000000""" 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 . """ # import sys # sys.path.insert(1, '.') persepolisdm-persepolis-867ee76/persepolis/scripts/about.py000066400000000000000000000044011464161131600243220ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtCore import Qt, QSize, QPoint, QFile, QIODevice, QTextStream from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QSize, QPoint, QFile, QIODevice, QTextStream from PyQt5.QtGui import QIcon from persepolis.gui.about_ui import AboutWindow_Ui from persepolis.gui import resources class AboutWindow(AboutWindow_Ui): def __init__(self, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting # setting window size and position size = self.persepolis_setting.value( 'AboutWindow/size', QSize(545, 375)) position = self.persepolis_setting.value( 'AboutWindow/position', QPoint(300, 300)) # read translators.txt files. # this file contains all translators. f = QFile(':/translators.txt') f.open(QIODevice.ReadOnly | QFile.Text) f_text = QTextStream(f).readAll() f.close() self.translators_textEdit.insertPlainText(f_text) self.resize(size) self.move(position) def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.pushButton.setIcon(QIcon(icons + 'ok')) def closeEvent(self, event): # saving window size and position self.persepolis_setting.setValue('AboutWindow/size', self.size()) self.persepolis_setting.setValue('AboutWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() persepolisdm-persepolis-867ee76/persepolis/scripts/addlink.py000066400000000000000000000466251464161131600246340ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtWidgets import QApplication, QFileDialog from PySide6.QtCore import Qt, QPoint, QSize, QDir, QThread, Signal from PySide6.QtGui import QIcon except: from PyQt5.QtWidgets import QApplication, QFileDialog from PyQt5.QtCore import Qt, QPoint, QSize, QDir, QThread from PyQt5.QtGui import QIcon from PyQt5.QtCore import pyqtSignal as Signal from persepolis.gui.addlink_ui import AddLinkWindow_Ui from persepolis.scripts.check_proxy import getProxy from persepolis.scripts import spider from persepolis.scripts import logger from functools import partial import os # find file name and file size class AddLinkSpiderThread(QThread): ADDLINKSPIDERSIGNAL = Signal(dict) def __init__(self, add_link_dictionary): QThread.__init__(self) self.add_link_dictionary = add_link_dictionary def run(self): try: # get file name and file size file_name, file_size = spider.addLinkSpider(self.add_link_dictionary) spider_dict = {'file_size': file_size, 'file_name': file_name} # emit results self.ADDLINKSPIDERSIGNAL.emit(spider_dict) # write an ERROR in log, If spider couldn't find file_name or file_size. if not (file_name): logger.sendToLog( "Spider couldn't find file name", "ERROR") if not (file_size): logger.sendToLog( "Spider couldn't find file size", "ERROR") except Exception as e: logger.sendToLog( "Spider couldn't find download information", "ERROR") logger.sendToLog( str(e), "ERROR") class AddLinkWindow(AddLinkWindow_Ui): def __init__(self, parent, callback, persepolis_setting, socks5_to_http_convertor_is_installed, plugin_add_link_dictionary={}): super().__init__(persepolis_setting) self.callback = callback self.plugin_add_link_dictionary = plugin_add_link_dictionary self.persepolis_setting = persepolis_setting self.parent = parent # entry initialization # read values from persepolis_setting # connections connections = int( self.persepolis_setting.value('settings/connections')) self.connections_spinBox.setValue(connections) # download_path download_path = str( self.persepolis_setting.value('settings/download_path')) self.download_folder_lineEdit.setText(download_path) self.download_folder_lineEdit.setEnabled(False) # enable ok button only if link_lineEdit is not empty! # see linkLineChanged method. self.ok_pushButton.setEnabled(False) self.download_later_pushButton.setEnabled(False) self.link_lineEdit.textChanged.connect(self.linkLineChanged) # if browsers plugin didn't send any links # then check clipboard for link! if ('link' in self.plugin_add_link_dictionary.keys()): # check plugin_add_link_dictionary for link! # "link" key-value must be checked self.link_lineEdit.setText( str(self.plugin_add_link_dictionary['link'])) else: # check clipboard clipboard = QApplication.clipboard() text = clipboard.text() if (("tp:/" in text[2:6]) or ("tps:/" in text[2:7])): self.link_lineEdit.setText(str(text)) # detect_proxy_pushButton self.detect_proxy_pushButton.clicked.connect( self.detectProxy) # ip_lineEdit initialization -> settings_ip = self.persepolis_setting.value( 'add_link_initialization/ip', None) if (settings_ip): self.ip_lineEdit.setText(str(settings_ip)) # proxy user lineEdit initialization -> settings_proxy_user = self.persepolis_setting.value( 'add_link_initialization/proxy_user', None) if (settings_proxy_user): self.proxy_user_lineEdit.setText(str(settings_proxy_user)) # port_spinBox initialization -> settings_port = self.persepolis_setting.value( 'add_link_initialization/port', 0) self.port_spinBox.setValue(int(int(settings_port))) # download UserName initialization -> settings_download_user = self.persepolis_setting.value( 'add_link_initialization/download_user', None) if (settings_download_user): self.download_user_lineEdit.setText(str(settings_download_user)) # http or socks5 initialization settings_proxy_type = self.persepolis_setting.value( 'add_link_initialization/proxy_type', None) # default is http if not (socks5_to_http_convertor_is_installed): self.socks5_radioButton.setEnabled(False) else: self.socks5_radioButton.setEnabled(True) if settings_proxy_type == 'socks5': self.socks5_radioButton.setChecked(True) elif settings_proxy_type == 'https': self.https_radioButton.setChecked(True) else: self.http_radioButton.setChecked(True) # get categories name and add them to add_queue_comboBox categories_list = self.parent.persepolis_db.categoriesList() for queue in categories_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) self.add_queue_comboBox.setCurrentIndex(0) # add_queue_comboBox event self.add_queue_comboBox.currentIndexChanged.connect(self.queueChanged) # connect folder_pushButton self.folder_pushButton.clicked.connect(self.changeFolder) # connect OK and cancel download_later button -> self.cancel_pushButton.clicked.connect(self.close) self.ok_pushButton.clicked.connect(partial( self.okButtonPressed, download_later=False)) self.download_later_pushButton.clicked.connect( partial(self.okButtonPressed, download_later=True)) # frames and checkBoxes -> self.proxy_frame.setEnabled(False) self.proxy_checkBox.toggled.connect(self.proxyFrame) self.download_frame.setEnabled(False) self.download_checkBox.toggled.connect(self.downloadFrame) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitFrame) self.start_frame.setEnabled(False) self.start_checkBox.toggled.connect(self.startFrame) self.end_frame.setEnabled(False) self.end_checkBox.toggled.connect(self.endFrame) self.change_name_lineEdit.setEnabled(False) self.change_name_checkBox.toggled.connect(self.changeName) # set focus to ok button self.ok_pushButton.setFocus() # check plugin_add_link_dictionary for finding file name # perhaps plugin sended file name in plugin_add_link_dictionary # for finding file name "out" key must be checked if ('out' in self.plugin_add_link_dictionary.keys()): if self.plugin_add_link_dictionary['out']: self.change_name_lineEdit.setText( str(self.plugin_add_link_dictionary['out'])) self.change_name_checkBox.setChecked(True) # get referer and header and user_agent and load_cookies in plugin_add_link_dictionary if exits. if ('referer' in self.plugin_add_link_dictionary): self.referer_lineEdit.setText(str(self.plugin_add_link_dictionary['referer'])) if ('header' in self.plugin_add_link_dictionary): if str(self.plugin_add_link_dictionary['header']) != 'None': self.header_lineEdit.setText(str(self.plugin_add_link_dictionary['header'])) if ('user_agent' in self.plugin_add_link_dictionary): self.user_agent_lineEdit.setText(str(self.plugin_add_link_dictionary['user_agent'])) if ('load_cookies' in self.plugin_add_link_dictionary): self.load_cookies_lineEdit.setText((self.plugin_add_link_dictionary['load_cookies'])) # set window size and position size = self.persepolis_setting.value( 'AddLinkWindow/size', QSize(520, 425)) position = self.persepolis_setting.value( 'AddLinkWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) # detect system proxy setting, and set ip_lineEdit and port_spinBox def detectProxy(self, button): # get system proxy information system_proxy_dict = getProxy() enable_proxy_frame = False # ip if 'http_proxy_ip' in system_proxy_dict.keys(): self.ip_lineEdit.setText(str(system_proxy_dict['http_proxy_ip'])) enable_proxy_frame = True # port if 'http_proxy_port' in system_proxy_dict.keys(): self.port_spinBox.setValue(int(system_proxy_dict['http_proxy_port'])) enable_proxy_frame = True # enable proxy frame if http_proxy_ip or http_proxy_port is valid. if enable_proxy_frame: self.proxy_checkBox.setChecked(True) self.detect_proxy_label.setText('') else: self.proxy_checkBox.setChecked(False) self.detect_proxy_label.setText('No proxy detected!') # active frames if checkBoxes are checked def proxyFrame(self, checkBox): if self.proxy_checkBox.isChecked() is True: self.proxy_frame.setEnabled(True) else: self.proxy_frame.setEnabled(False) def downloadFrame(self, checkBox): if self.download_checkBox.isChecked() is True: self.download_frame.setEnabled(True) else: self.download_frame.setEnabled(False) def limitFrame(self, checkBox): if self.limit_checkBox.isChecked() is True: self.limit_frame.setEnabled(True) else: self.limit_frame.setEnabled(False) def startFrame(self, checkBox): if self.start_checkBox.isChecked() is True: self.start_frame.setEnabled(True) else: self.start_frame.setEnabled(False) def endFrame(self, checkBox): if self.end_checkBox.isChecked() is True: self.end_frame.setEnabled(True) else: self.end_frame.setEnabled(False) def changeFolder(self, button): # get download_path from lineEdit download_path = self.download_folder_lineEdit.text() # open select folder dialog fname = QFileDialog.getExistingDirectory( self, 'Select a directory', download_path) if fname: # Returns pathName with the '/' separators converted to separators that are appropriate for the underlying operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". fname = QDir.toNativeSeparators(fname) if os.path.isdir(fname): self.download_folder_lineEdit.setText(fname) # enable when link_lineEdit is not empty and find size of file. def linkLineChanged(self, lineEdit): if str(self.link_lineEdit.text()) == '': self.ok_pushButton.setEnabled(False) self.download_later_pushButton.setEnabled(False) else: # find file size dict = {'link': str(self.link_lineEdit.text())} # spider is finding file size new_spider = AddLinkSpiderThread(dict) self.parent.threadPool.append(new_spider) self.parent.threadPool[-1].start() self.parent.threadPool[-1].ADDLINKSPIDERSIGNAL.connect( partial(self.parent.addLinkSpiderCallBack, child=self)) self.ok_pushButton.setEnabled(True) self.download_later_pushButton.setEnabled(True) # enable change_name_lineEdit if change_name_checkBox is checked. def changeName(self, checkBoxes): if self.change_name_checkBox.isChecked() is True: self.change_name_lineEdit.setEnabled(True) else: self.change_name_lineEdit.setEnabled(False) def queueChanged(self, combo): # if one of the queues selected by user , start time and end time must # be deactivated if self.add_queue_comboBox.currentIndex() != 0: self.start_checkBox.setCheckState(Qt.Unchecked) self.start_checkBox.setEnabled(False) self.end_checkBox.setCheckState(Qt.Unchecked) self.end_checkBox.setEnabled(False) else: self.start_checkBox.setEnabled(True) self.end_checkBox.setEnabled(True) def okButtonPressed(self, download_later, button=None): # user submitted information by pressing ok_pushButton, so get information # from AddLinkWindow and return them to the mainwindow with callback! # write user's new inputs in persepolis_setting for next time :) self.persepolis_setting.setValue( 'add_link_initialization/ip', self.ip_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/port', self.port_spinBox.value()) self.persepolis_setting.setValue( 'add_link_initialization/proxy_user', self.proxy_user_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/download_user', self.download_user_lineEdit.text()) # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: proxy_type = 'http' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'http') elif self.https_radioButton.isChecked() is True: proxy_type = 'https' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'https') else: proxy_type = 'socks5' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'socks5') # Check 'Remember path' and change default path if needed if self.folder_checkBox.isChecked() is True: self.persepolis_setting.setValue( 'settings/download_path', self.download_folder_lineEdit.text()) # get proxy information if not (self.proxy_checkBox.isChecked()): ip = None port = None proxy_user = None proxy_passwd = None proxy_type = None else: ip = self.ip_lineEdit.text() if not (ip): ip = None port = self.port_spinBox.value() if not (port): port = None proxy_user = self.proxy_user_lineEdit.text() if not (proxy_user): proxy_user = None proxy_passwd = self.proxy_pass_lineEdit.text() if not (proxy_passwd): proxy_passwd = None # get download username and password information if not (self.download_checkBox.isChecked()): download_user = None download_passwd = None else: download_user = self.download_user_lineEdit.text() if not (download_user): download_user = None download_passwd = self.download_pass_lineEdit.text() if not (download_passwd): download_passwd = None # check that if user limits download speed. if not (self.limit_checkBox.isChecked()): limit = 0 else: if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") # get start time for download if user set that. if not (self.start_checkBox.isChecked()): start_time = None else: start_time = self.start_time_qDataTimeEdit.text() # get end time for download if user set that. if not (self.end_checkBox.isChecked()): end_time = None else: end_time = self.end_time_qDateTimeEdit.text() # check that if user set new name for download file. if self.change_name_checkBox.isChecked(): out = str(self.change_name_lineEdit.text()) self.plugin_add_link_dictionary['out'] = out else: out = None # get download link link = self.link_lineEdit.text() # get number of connections connections = self.connections_spinBox.value() # get download_path download_path = self.download_folder_lineEdit.text() # referer if self.referer_lineEdit.text() != '': referer = self.referer_lineEdit.text() else: referer = None # header if self.header_lineEdit.text() != '': header = self.header_lineEdit.text() else: header = None # user_agent if self.user_agent_lineEdit.text() != '': user_agent = self.user_agent_lineEdit.text() else: user_agent = None # load_cookies if self.load_cookies_lineEdit.text() != '': load_cookies = self.load_cookies_lineEdit.text() else: load_cookies = None # save information in a dictionary(add_link_dictionary). self.add_link_dictionary = {'referer': referer, 'header': header, 'user_agent': user_agent, 'load_cookies': load_cookies, 'out': out, 'start_time': start_time, 'end_time': end_time, 'link': link, 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'proxy_type': proxy_type, 'download_user': download_user, 'download_passwd': download_passwd, 'connections': connections, 'limit_value': limit, 'download_path': download_path} # get category of download category = str(self.add_queue_comboBox.currentText()) del self.plugin_add_link_dictionary # return information to mainwindow self.callback(self.add_link_dictionary, download_later, category) # close window self.close() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() # save size and position of window, when user closes the window. def closeEvent(self, event): self.persepolis_setting.setValue('AddLinkWindow/size', self.size()) self.persepolis_setting.setValue('AddLinkWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.download_later_pushButton.setIcon(QIcon(icons + 'stop')) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) persepolisdm-persepolis-867ee76/persepolis/scripts/after_download.py000066400000000000000000000115741464161131600262110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QSize, QPoint, QTranslator, QCoreApplication, QLocale from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QSize, QPoint, QTranslator, QCoreApplication, QLocale from PyQt5.QtGui import QIcon from persepolis.gui.after_download_ui import AfterDownloadWindow_Ui from persepolis.scripts import osCommands import os class AfterDownloadWindow(AfterDownloadWindow_Ui): def __init__(self, parent, dict, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.dict = dict self.parent = parent # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # connecting buttons self.open_pushButtun.clicked.connect(self.openFile) self.open_folder_pushButtun.clicked.connect(self.openFolder) self.ok_pushButton.clicked.connect(self.okButtonPressed) # labels # find gid gid = self.dict['gid'] # get file_path from data base self.add_link_dict = self.parent.persepolis_db.searchGidInAddLinkTable(gid) file_path = self.add_link_dict['download_path'] # save_as self.save_as_lineEdit.setText(file_path) self.save_as_lineEdit.setToolTip(file_path) # link link = str(self.dict['link']) self.link_lineEdit.setText(link) self.link_lineEdit.setToolTip(link) # file_name window_title = str(self.dict['file_name']) file_name = QCoreApplication.translate("after_download_src_ui_tr", "File name: ") + \ window_title self.setWindowTitle(window_title) self.file_name_label.setText(file_name) # size size = QCoreApplication.translate("after_download_src_ui_tr", "Size: ") + str(self.dict['size']) self.size_label.setText(size) # disable link_lineEdit and save_as_lineEdit self.link_lineEdit.setEnabled(False) self.save_as_lineEdit.setEnabled(False) # set window size and position size = self.persepolis_setting.value( 'AfterDownloadWindow/size', QSize(570, 290)) position = self.persepolis_setting.value( 'AfterDownloadWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) def openFile(self): # execute file file_path = self.add_link_dict['download_path'] if os.path.isfile(file_path): osCommands.xdgOpen(file_path) # close window self.close() def openFolder(self): # open download folder download_path = self.add_link_dict['download_path'] # file_name = os.path.basename(file_path) # file_path_split = file_path.split(file_name) # del file_path_split[-1] # download_path = file_name.join(file_path_split) if os.path.isfile(download_path): osCommands.xdgOpen(download_path, 'folder', 'file') # close window self.close() def okButtonPressed(self): if self.dont_show_checkBox.isChecked(): self.persepolis_setting.setValue('settings/after-dialog', 'no') self.persepolis_setting.sync() # close window self.close() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): # saving window size and position self.persepolis_setting.setValue( 'AfterDownloadWindow/size', self.size()) self.persepolis_setting.setValue( 'AfterDownloadWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.ok_pushButton.setIcon(QIcon(icons + 'ok')) self.open_folder_pushButtun.setIcon(QIcon(icons + 'folder')) self.open_pushButtun.setIcon(QIcon(icons + 'file')) persepolisdm-persepolis-867ee76/persepolis/scripts/browser_integration.py000066400000000000000000000241401464161131600273000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from persepolis.scripts.useful_tools import determineConfigFolder, getExecPath, findExternalAppPath from persepolis.scripts import osCommands from persepolis.constants import OS, BROWSER import subprocess import platform import os os_type = platform.system() home_address = str(os.path.expanduser("~")) # download manager config folder . config_folder = determineConfigFolder() def browserIntegration(browser): # get execution information. exec_dictionary = getExecPath() exec_path = exec_dictionary['modified_exec_file_path'] logg_message = ["", "INFO"] # for GNU/Linux if os_type == OS.LINUX: # intermediate shell script path intermediary = os.path.join(config_folder, 'persepolis_run_shell') # Native Messaging Hosts folder path for every browser if browser == BROWSER.CHROMIUM: native_message_folder = home_address + '/.config/chromium/NativeMessagingHosts' elif browser == BROWSER.CHROME: native_message_folder = home_address + \ '/.config/google-chrome/NativeMessagingHosts' elif browser == BROWSER.FIREFOX: native_message_folder = home_address + \ '/.mozilla/native-messaging-hosts' elif browser == BROWSER.VIVALDI: native_message_folder = home_address + \ '/.config/vivaldi/NativeMessagingHosts' elif browser == BROWSER.OPERA: native_message_folder = home_address + \ '/.config/opera/NativeMessagingHosts' elif browser == BROWSER.BRAVE: native_message_folder = home_address + \ '/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts' # for FreeBSD and OpenBSD elif os_type in OS.BSD_FAMILY: # find Persepolis execution path # persepolis intermediate script path intermediary = os.path.join(config_folder, 'persepolis_run_shell') # Native Messaging Hosts folder path for every browser if browser == BROWSER.CHROMIUM: native_message_folder = home_address + '/.config/chromium/NativeMessagingHosts' elif browser == BROWSER.CHROME: native_message_folder = home_address + \ '/.config/google-chrome/NativeMessagingHosts' elif browser == BROWSER.FIREFOX: native_message_folder = home_address + \ '/.mozilla/native-messaging-hosts' elif browser == BROWSER.VIVALDI: native_message_folder = home_address + \ '/.config/vivaldi/NativeMessagingHosts' elif browser == BROWSER.OPERA: native_message_folder = home_address + \ '/.config/opera/NativeMessagingHosts' elif browser == BROWSER.BRAVE: native_message_folder = home_address + \ '/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts' # for Mac OSX elif os_type == OS.OSX: # find Persepolis execution path # persepolis execution path intermediary = os.path.join(config_folder, 'persepolis_run_shell') # Native Messaging Hosts folder path for every browser if browser == BROWSER.CHROMIUM: native_message_folder = home_address + \ '/Library/Application Support/Chromium/NativeMessagingHosts' elif browser == BROWSER.CHROME: native_message_folder = home_address + \ '/Library/Application Support/Google/Chrome/NativeMessagingHosts' elif browser == BROWSER.FIREFOX: native_message_folder = home_address + \ '/Library/Application Support/Mozilla/NativeMessagingHosts' elif browser == BROWSER.VIVALDI: native_message_folder = home_address + \ '/Library/Application Support/Vivaldi/NativeMessagingHosts' elif browser == BROWSER.OPERA: native_message_folder = home_address + \ '/Library/Application Support/Opera/NativeMessagingHosts/' elif browser == BROWSER.BRAVE: native_message_folder = home_address + \ '/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts/' # for MicroSoft Windows os (windows 7 , ...) elif os_type == OS.WINDOWS: # the execution path in json file for Windows must in form of # c:\\Users\\...\\Persepolis Download Manager.exe , so we need 2 # "\" in address intermediary, logg_message = findExternalAppPath('PersepolisBI') if browser in BROWSER.CHROME_FAMILY: native_message_folder = os.path.join( home_address, 'AppData', 'Local', 'persepolis_download_manager', 'chrome') else: native_message_folder = os.path.join( home_address, 'AppData', 'Local', 'persepolis_download_manager', 'firefox') # WebExtension native hosts file prototype webextension_json_connector = { "name": "com.persepolis.pdmchromewrapper", "type": "stdio", "path": str(intermediary), "description": "Integrate Persepolis with %s using WebExtensions" % (browser) } # Add chrom* keys if browser in BROWSER.CHROME_FAMILY: webextension_json_connector["allowed_origins"] = ["chrome-extension://legimlagjjoghkoedakdjhocbeomojao/"] # Add firefox keys elif browser == BROWSER.FIREFOX: webextension_json_connector["allowed_extensions"] = [ "com.persepolis.pdmchromewrapper@persepolisdm.github.io", "com.persepolis.pdmchromewrapper.offline@persepolisdm.github.io" ] # Build final path native_message_file = os.path.join( native_message_folder, 'com.persepolis.pdmchromewrapper.json') osCommands.makeDirs(native_message_folder) # Write NMH file f = open(native_message_file, 'w') f.write(str(webextension_json_connector).replace("'", "\"")) f.close() if os_type != OS.WINDOWS: pipe_json = subprocess.Popen(['chmod', '+x', str(native_message_file)], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) if pipe_json.wait() == 0: json_done = True else: json_done = False else: native_done = None import winreg # add the key to the windows registry if browser in BROWSER.CHROME_FAMILY: try: # create pdmchromewrapper key under NativeMessagingHosts winreg.CreateKey(winreg.HKEY_CURRENT_USER, "SOFTWARE\\Google\\Chrome\\NativeMessagingHosts\\com.persepolis.pdmchromewrapper") # open a connection to pdmchromewrapper key gintKey = winreg.OpenKey( winreg.HKEY_CURRENT_USER, "SOFTWARE\\Google\\Chrome\\NativeMessagingHosts\\com.persepolis.pdmchromewrapper", 0, winreg.KEY_ALL_ACCESS) # set native_message_file as key value winreg.SetValueEx(gintKey, '', 0, winreg.REG_SZ, native_message_file) # close connection to pdmchromewrapper winreg.CloseKey(gintKey) json_done = True except WindowsError: json_done = False elif browser == BROWSER.FIREFOX: try: # create pdmchromewrapper key under NativeMessagingHosts for firefox winreg.CreateKey(winreg.HKEY_CURRENT_USER, "SOFTWARE\\Mozilla\\NativeMessagingHosts\\com.persepolis.pdmchromewrapper") # open a connection to pdmchromewrapper key for firefox fintKey = winreg.OpenKey( winreg.HKEY_CURRENT_USER, "SOFTWARE\\Mozilla\\NativeMessagingHosts\\com.persepolis.pdmchromewrapper", 0, winreg.KEY_ALL_ACCESS) # set native_message_file as key value winreg.SetValueEx(fintKey, '', 0, winreg.REG_SZ, native_message_file) # close connection to pdmchromewrapper winreg.CloseKey(fintKey) json_done = True except WindowsError: json_done = False # create persepolis_run_shell(intermediate script) file for gnu/linux and BSD and Mac # firefox and chromium and ... call persepolis with Native Messaging system. # json file calls persepolis_run_shell file. if os_type in OS.UNIX_LIKE or os_type == OS.OSX: # find available shell shell_list = ['/bin/bash', '/usr/local/bin/bash', '/bin/sh', '/usr/local/bin/sh', '/bin/ksh', '/bin/tcsh'] for shell in shell_list: if os.path.isfile(shell): # define shebang shebang = '#!' + shell break persepolis_run_shell_contents = shebang + '\n' + exec_path + "\t$@" f = open(intermediary, 'w') f.writelines(persepolis_run_shell_contents) f.close() # make persepolis_run_shell executable pipe_native = subprocess.Popen(['chmod', '+x', intermediary], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) if pipe_native.wait() == 0: native_done = True else: native_done = False return json_done, native_done, logg_message persepolisdm-persepolis-867ee76/persepolis/scripts/browser_plugin_queue.py000066400000000000000000000366661464161131600274770ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QPoint, QSize, QThread, Signal, QDir from PySide6.QtWidgets import QTableWidgetItem, QFileDialog from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QPoint, QSize, QThread, QDir from PyQt5.QtWidgets import QTableWidgetItem, QFileDialog from PyQt5.QtCore import pyqtSignal as Signal from PyQt5.QtGui import QIcon from persepolis.gui.text_queue_ui import TextQueue_Ui from persepolis.scripts import logger from persepolis.scripts import spider from functools import partial from copy import deepcopy import os # This thread finds filename class QueueSpiderThread(QThread): QUEUESPIDERRETURNEDFILENAME = Signal(str) def __init__(self, dict): QThread.__init__(self) self.dict = dict def run(self): try: filename = spider.queueSpider(self.dict) if filename: self.QUEUESPIDERRETURNEDFILENAME.emit(filename) else: logger.logObj.error( "Spider couldn't find download information", exc_info=True) except Exception as e: logger.logObj.error( "Spider couldn't find download information", exc_info=True) logger.logObj.error( str(e), exc_info=True) class BrowserPluginQueue(TextQueue_Ui): def __init__(self, parent, list_of_links, callback, socks5_to_http_convertor_is_installed, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.callback = callback self.parent = parent self.list_of_links = list_of_links global icons icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.list_of_links.reverse() k = 1 for dict in self.list_of_links: # add row to the links_table self.links_table.insertRow(0) # file_name if 'out' in dict: if dict['out']: file_name = dict['out'] else: file_name = '***' else: file_name = '***' if file_name == '***': # spider finds file name new_spider = QueueSpiderThread(dict) self.parent.threadPool.append(new_spider) self.parent.threadPool[-1].start() self.parent.threadPool[-1].QUEUESPIDERRETURNEDFILENAME.connect( partial(self.parent.queueSpiderCallBack, child=self, row_number=len(self.list_of_links) - k)) k = k + 1 item = QTableWidgetItem(file_name) # add checkbox to the item item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setCheckState(Qt.Checked) # insert file_name self.links_table.setItem(0, 0, item) # find link link = dict['link'] item = QTableWidgetItem(str(link)) # insert link self.links_table.setItem(0, 1, item) # get categories name and add them to add_queue_comboBox categories_list = self.parent.persepolis_db.categoriesList() for queue in categories_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) self.add_queue_comboBox.addItem( QIcon(icons + 'add_queue'), 'Create new queue') # entry initialization global connections connections = int( self.persepolis_setting.value('settings/connections')) global download_path download_path = str( self.persepolis_setting.value('settings/download_path')) # initialization self.connections_spinBox.setValue(connections) self.download_folder_lineEdit.setText(download_path) self.download_folder_lineEdit.setEnabled(False) # ip_lineEdit initialization settings_ip = self.persepolis_setting.value( 'add_link_initialization/ip', None) if settings_ip: self.ip_lineEdit.setText(str(settings_ip)) # proxy user lineEdit initialization settings_proxy_user = self.persepolis_setting.value( 'add_link_initialization/proxy_user', None) if settings_proxy_user: self.proxy_user_lineEdit.setText(str(settings_proxy_user)) # port_spinBox initialization settings_port = self.persepolis_setting.value( 'add_link_initialization/port', 0) self.port_spinBox.setValue(int(int(settings_port))) # download UserName initialization settings_download_user = self.persepolis_setting.value( 'add_link_initialization/download_user', None) if settings_download_user: self.download_user_lineEdit.setText(str(settings_download_user)) # http or socks5 initialization settings_proxy_type = self.persepolis_setting.value( 'add_link_initialization/proxy_type', None) # default is http if not (socks5_to_http_convertor_is_installed): self.socks5_radioButton.setEnabled(False) else: self.socks5_radioButton.setEnabled(True) if settings_proxy_type == 'socks5': self.socks5_radioButton.setChecked(True) elif settings_proxy_type == 'https': self.https_radioButton.setChecked(True) else: self.http_radioButton.setChecked(True) # connect folder_pushButton self.folder_pushButton.clicked.connect(self.changeFolder) # connect OK and cancel button self.cancel_pushButton.clicked.connect(self.close) self.ok_pushButton.clicked.connect(self.okButtonPressed) # connect select_all_pushButton deselect_all_pushButton self.select_all_pushButton.clicked.connect(self.selectAll) self.deselect_all_pushButton.clicked.connect(self.deselectAll) # frames and checkBoxes self.proxy_frame.setEnabled(False) self.proxy_checkBox.toggled.connect(self.proxyFrame) self.download_frame.setEnabled(False) self.download_checkBox.toggled.connect(self.downloadFrame) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitFrame) # set focus to ok button self.ok_pushButton.setFocus() # add_queue_comboBox event self.add_queue_comboBox.currentIndexChanged.connect(self.queueChanged) # set window size and position size = self.persepolis_setting.value('TextQueue/size', QSize(700, 500)) position = self.persepolis_setting.value( 'TextQueue/position', QPoint(300, 300)) self.resize(size) self.move(position) # this method selects all links in links_table def selectAll(self, button): for i in range(self.links_table.rowCount()): item = self.links_table.item(i, 0) item.setCheckState(Qt.Checked) # this method unchecks all check boxes def deselectAll(self, button): for i in range(self.links_table.rowCount()): item = self.links_table.item(i, 0) item.setCheckState(Qt.Unchecked) # this method is called, when user changes add_queue_comboBox def queueChanged(self, combo): if str(self.add_queue_comboBox.currentText()) == 'Create new queue': # if user want to create new queue, then call createQueue method from mainwindow(parent) new_queue = self.parent.createQueue(combo) if new_queue: # clear comboBox self.add_queue_comboBox.clear() # load queue list again! queues_list = self.parent.persepolis_db.categoriesList() for queue in queues_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) self.add_queue_comboBox.addItem( QIcon(icons + 'add_queue'), 'Create new queue') # finding index of new_queue and setting comboBox for it index = self.add_queue_comboBox.findText(str(new_queue)) self.add_queue_comboBox.setCurrentIndex(index) else: self.add_queue_comboBox.setCurrentIndex(0) # activate frames if checkBoxes checked def proxyFrame(self, checkBox): if self.proxy_checkBox.isChecked(): self.proxy_frame.setEnabled(True) else: self.proxy_frame.setEnabled(False) def downloadFrame(self, checkBox): if self.download_checkBox.isChecked(): self.download_frame.setEnabled(True) else: self.download_frame.setEnabled(False) def limitFrame(self, checkBox): if self.limit_checkBox.isChecked(): self.limit_frame.setEnabled(True) else: self.limit_frame.setEnabled(False) def changeFolder(self, button): fname = QFileDialog.getExistingDirectory( self, 'Select a directory', download_path) if fname: # Returns pathName with the '/' separators converted to separators that are appropriate for the underlying operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". fname = QDir.toNativeSeparators(fname) if os.path.isdir(fname): self.download_folder_lineEdit.setText(fname) def okButtonPressed(self, button): # write user's input data to init file self.persepolis_setting.setValue( 'add_link_initialization/ip', self.ip_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/port', self.port_spinBox.value()) self.persepolis_setting.setValue( 'add_link_initialization/proxy_user', self.proxy_user_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/download_user', self.download_user_lineEdit.text()) # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: proxy_type = 'http' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'http') elif self.https_radioButton.isChecked() is True: proxy_type = 'https' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'https') else: proxy_type = 'socks5' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'socks5') if not (self.proxy_checkBox.isChecked()): ip = None port = None proxy_user = None proxy_passwd = None proxy_type = None else: ip = self.ip_lineEdit.text() if not (ip): ip = None port = self.port_spinBox.value() if not (port): port = None proxy_user = self.proxy_user_lineEdit.text() if not (proxy_user): proxy_user = None proxy_passwd = self.proxy_pass_lineEdit.text() if not (proxy_passwd): proxy_passwd = None if not (self.download_checkBox.isChecked()): download_user = None download_passwd = None else: download_user = self.download_user_lineEdit.text() if not (download_user): download_user = None download_passwd = self.download_pass_lineEdit.text() if not (download_passwd): download_passwd = None if not (self.limit_checkBox.isChecked()): limit = 0 else: if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") category = str(self.add_queue_comboBox.currentText()) connections = self.connections_spinBox.value() download_path = self.download_folder_lineEdit.text() dict_ = {'out': None, 'start_time': None, 'end_time': None, 'link': None, 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'proxy_type': proxy_type, 'download_user': download_user, 'download_passwd': download_passwd, 'connections': connections, 'limit_value': limit, 'download_path': download_path, 'referer': None, 'load_cookies': None, 'user_agent': None, 'header': None, 'after_download': None } # find checked links in links_table self.list_of_links.reverse() self.add_link_dictionary_list = [] i = 0 for row in range(self.links_table.rowCount()): item = self.links_table.item(row, 0) # if item is checked if (item.checkState() == Qt.Checked): # Create a copy from dict_ and add it to add_link_dictionary_list self.add_link_dictionary_list.append( deepcopy(dict_)) # get link and add it to dict_ link = self.links_table.item(row, 1).text() self.add_link_dictionary_list[i]['link'] = str(link) # add file name to the dict_ self.add_link_dictionary_list[i]['out'] = self.links_table.item( row, 0).text() input_dict = self.list_of_links[row] keys_list = ['referer', 'header', 'user-agent', 'load_cookies'] for key in keys_list: if key in input_dict: self.add_link_dictionary_list[i][key] = dict_[key] i = i + 1 # reverse list self.add_link_dictionary_list.reverse() # Create callback for mainwindow self.callback(self.add_link_dictionary_list, category) # close window self.close() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): self.persepolis_setting.setValue('TextQueue/size', self.size()) self.persepolis_setting.setValue('TextQueue/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) persepolisdm-persepolis-867ee76/persepolis/scripts/bubble.py000066400000000000000000000064631464161131600244550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.scripts.play import playNotification from persepolis.gui import resources from persepolis.constants import OS import subprocess import platform import os try: from PySide6.QtCore import QSettings from PySide6.QtGui import QIcon except: from PyQt5.QtCore import QSettings from PyQt5.QtGui import QIcon # platform os_type = platform.system() # notifySend use notify-send program in user's system for sending notifications # and use playNotification function in play.py file for playing sound # notifications def notifySend(message1, message2, time, sound, parent=None): if os_type == OS.LINUX: notifications_path = '/usr/share/sounds/freedesktop/stereo/' elif os_type in OS.BSD_FAMILY: notifications_path = '/usr/local/share/sounds/freedesktop/stereo/' else: notifications_path = '' if sound == 'ok': file = os.path.join(notifications_path, 'complete.oga') playNotification(str(file)) elif sound == 'fail': file = os.path.join(notifications_path, 'dialog-error.oga') playNotification(str(file)) elif sound == 'warning': file = os.path.join(notifications_path, 'bell.oga') playNotification(str(file)) elif sound == 'critical': file = os.path.join(notifications_path, 'power-plug.oga') playNotification(str(file)) elif sound == 'queue': file = os.path.join(notifications_path, 'dialog-information.oga') playNotification(str(file)) # load settings persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') enable_notification = persepolis_setting.value('settings/notification') time = str(time) message1 = str(message1) message2 = str(message2) # using Qt notification or Native system notification if enable_notification == 'QT notification': parent.system_tray_icon.showMessage(message1, message2, QIcon.fromTheme('persepolis-tray', QIcon(':/persepolis-tray.svg')), 10000) else: if os_type in OS.UNIX_LIKE: subprocess.Popen(['notify-send', '--icon', 'com.github.persepolisdm.persepolis', '--app-name', 'Persepolis Download Manager', '--expire-time', time, message1, message2], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) else: parent.system_tray_icon.showMessage(message1, message2, QIcon.fromTheme('persepolis-tray', QIcon(':/persepolis-tray.svg')), 10000) persepolisdm-persepolis-867ee76/persepolis/scripts/check_proxy.py000066400000000000000000000224751464161131600255410ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # import re import subprocess import urllib import os from persepolis.scripts.useful_tools import osAndDesktopEnvironment from persepolis.scripts import logger from persepolis.constants import OS # get proxy function def getProxy(): socks_proxy = False # find os and desktop environment os_type, desktop = osAndDesktopEnvironment() # destop == 'ubuntu:GNOME' to destop == 'GNOME' try: tmp = re.search(r'.*:(.*)', desktop) if tmp is not None: desktop = tmp.group(1) except: pass # write in log platform = 'platform : ' + os_type logger.sendToLog(platform, "INFO") proxy = {} if os_type in OS.UNIX_LIKE: if desktop is None: desktop_env_type = 'Desktop Environment not detected!' else: desktop_env_type = 'Desktop environment: ' + str(desktop) logger.sendToLog(desktop_env_type, "INFO") # check if it is KDE if desktop == 'KDE': # creat empty list for proxies proxysource = {} # user home directory path home_address = os.path.expanduser("~") # get proxy file content try: plasma_proxy_config_file_path = os.path.join( home_address, '.config', 'kioslaverc' ) except: logger.sendToLog('no proxy file detected', 'INFO') # check if proxy file exists if os.path.isfile(plasma_proxy_config_file_path): # read kde plasma proxy config file try: with open(plasma_proxy_config_file_path) as proxyfile: for line in proxyfile: name, var = line.partition("=")[::2] proxysource[name.strip()] = str(var) except: logger.sendToLog('no proxy file detected', 'INFO') # check proxy enabled as manually if proxysource['ProxyType'].split('\n')[0] == '1': # get ftp proxy try: proxy['ftp_proxy_port'] = proxysource['ftpProxy'].split(' ')[1].replace("/", "").replace("\n", "") proxy['ftp_proxy_ip'] = proxysource['ftpProxy'].split(' ')[0].split('//')[1] except: logger.sendToLog('no manual ftp proxy detected', 'INFO') # get http proxy try: proxy['http_proxy_port'] = proxysource['httpProxy'].split(' ')[1].replace("/", "").replace("\n", "") proxy['http_proxy_ip'] = proxysource['httpProxy'].split(' ')[0].split('//')[1] except: logger.sendToLog('no manual http proxy detected', 'INFO') # get https proxy try: proxy['https_proxy_port'] = proxysource['httpsProxy'].split( ' ')[1].replace("/", "").replace("\n", "") proxy['https_proxy_ip'] = proxysource['httpsProxy'].split(' ')[0].split('//')[1] except: logger.sendToLog('no manual https proxy detected', 'INFO') # get socks proxy try: socks_proxy = proxysource['socksProxy'].split(' ')[0].split('//')[1] except: socks_proxy = False # proxy disabled else: logger.sendToLog('no manual proxy detected', 'INFO') # proxy file not exists else: logger.sendToLog('no proxy file detected', 'INFO') # Detect proxy from GNOME Desktop elif desktop == 'GNOME': process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy', 'mode'], stdout=subprocess.PIPE) mode = re.search(r'manual', process.stdout.decode('utf-8')) if mode is not None: try: process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.http', 'host'], stdout=subprocess.PIPE) proxy['http_proxy_ip'] = re.search(r"\'([\w0-9\.]+)\'", process.stdout.decode('utf-8')).group(1) process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.http', 'port'], stdout=subprocess.PIPE) proxy['http_proxy_port'] = process.stdout.decode('utf-8') except: logger.sendToLog('no http proxy detected', 'INFO') try: process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.https', 'host'], stdout=subprocess.PIPE) proxy['https_proxy_ip'] = re.search(r"\'([\w0-9\.]+)\'", process.stdout.decode('utf-8')).group(1) process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.https', 'port'], stdout=subprocess.PIPE) proxy['https_proxy_port'] = process.stdout.decode('utf-8') except: logger.sendToLog('no https proxy detected', 'INFO') try: process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.ftp', 'host'], stdout=subprocess.PIPE) proxy['ftp_proxy_ip'] = re.search(r"\'([\w0-9\.]+)\'", process.stdout.decode('utf-8')).group(1) process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.ftp', 'port'], stdout=subprocess.PIPE) proxy['ftp_proxy_port'] = process.stdout.decode('utf-8') except: logger.sendToLog('no ftp proxy detected', 'INFO') try: process = subprocess.run(['gsettings', 'get', 'org.gnome.system.proxy.socks', 'host'], stdout=subprocess.PIPE) # value = re.search(r"\'([\w0-9\.]+)\'", process.stdout.decode('utf-8')).group(1) socks_proxy = True except: socks_proxy = False else: logger.sendToLog('no manual proxy detected', 'INFO') # if it is windows,mac and other linux desktop else: # get proxies proxysource = urllib.request.getproxies() # get http proxy try: proxy['http_proxy_ip'] = proxysource['http'].split(':')[1].replace('//', '') proxy['http_proxy_port'] = proxysource['http'].split(':')[2].replace("/", "").replace("\n", "") except: logger.sendToLog('no http proxy detected', 'INFO') # get https proxy try: proxy['https_proxy_ip'] = proxysource['https'].split(':')[1].replace('//', '') proxy['https_proxy_port'] = proxysource['https'].split(':')[2].replace("/", "").replace("\n", "") except: logger.sendToLog('no https proxy detected', 'INFO') # get ftp proxy try: proxy['ftp_proxy_ip'] = proxysource['ftp'].split(':')[1].replace('//', '') proxy['ftp_proxy_port'] = proxysource['ftp'].split(':')[2].replace("/", "").replace("\n", "") except: logger.sendToLog('no ftp proxy detected', 'INFO') # get socks proxy try: # if it is unity if desktop == 'Unity7': socks_proxy = proxysource['all'].split(':')[1].replace('//', '') # if it is Mac OS elif os_type == OS.OSX: validKeys = ['SOCKSEnable'] # get proxies list using scutil command and parse it in tmp list mac_tmp_proxies_list = {} proxyList = subprocess.run(['scutil', '--proxy'], stdout=subprocess.PIPE) for line in proxyList.stdout.decode('utf-8').split('\n'): words = line.split() if len(words) == 3 and words[0] in validKeys: mac_tmp_proxies_list[words[0]] = words[2] if mac_tmp_proxies_list['SOCKSEnable'] == '1': socks_proxy = True else: socks_proxy = False # others except KDE,Mac OS,gnome,unity7 else: socks_proxy = proxysource['socks'].split(':')[1].replace('//', '') except: socks_proxy = False # check if just socks proxy exists key_is_available = False key_list = ['http_proxy_ip', 'https_proxy_ip', 'ftp_proxy_ip'] for key in key_list: if key in proxy.keys(): key_is_available = True if not key_is_available and socks_proxy: # all print just for debugging socks_message = "persepolis and aria2 don't support socks\n\ you must convert socks proxy to http proxy.\n\ Please read this for more help:\n\ https://github.com/persepolisdm/persepolis/wiki/Privoxy" logger.sendToLog(socks_message, 'ERROR') # return results proxy_log_message = 'proxy: ' + str(proxy) logger.sendToLog(proxy_log_message, 'INFO') return proxy persepolisdm-persepolis-867ee76/persepolis/scripts/compatibility.py000066400000000000000000000147411464161131600260710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.scripts.useful_tools import determineConfigFolder from persepolis.scripts.osCommands import remove, removeDir from persepolis.scripts.data_base import PersepolisDB from persepolis.scripts.newopen import readList import os # config_folder config_folder = determineConfigFolder() download_info_folder = os.path.join(config_folder, "download_info") # download_list_file contains GID of all downloads download_list_file = os.path.join(config_folder, "download_list_file") # download_list_file_active for active downloads download_list_file_active = os.path.join( config_folder, "download_list_file_active") # queues_list contains queues name queues_list_file = os.path.join(config_folder, 'queues_list') # category_folder contains some file , and every files named with queues . # every file contains gid of downloads for that queue category_folder = os.path.join(config_folder, 'category_folder') # queue_info_folder is contains queues information(start time,end # time,limit speed , ...) queue_info_folder = os.path.join(config_folder, "queue_info") # single_downloads_list_file contains gid of non categorized downloads single_downloads_list_file = os.path.join(category_folder, "Single Downloads") # this script for compatibility between Version 2 and 3 def compatibility(): if os.path.isfile(queues_list_file): persepolis_db = PersepolisDB() # add categories to category_db_table in data_base f = open(queues_list_file) queues_list = f.readlines() f.close() # remove queues_list_file remove(queues_list_file) else: return category_list = ['All Downloads', 'Single Downloads'] for line in queues_list: queue_name = line.strip() category_list.append(queue_name) for category in category_list: gid_list = [] if category == 'All Downloads': category_info_file = download_list_file else: category_info_file = os.path.join(category_folder, category) f = open(category_info_file) category_info_file_list = f.readlines() f.close() for item in category_info_file_list: gid = item.strip() gid_list.append(gid) category_dict = {'category': category, 'start_time_enable': 'no', 'start_time': '0:0', 'end_time_enable': 'no', 'end_time': '0:0', 'reverse': 'no', 'limit_enable': 'no', 'limit_value': '0K', 'after_download': 'no', 'gid_list': str(gid_list) } # add category to data_base if category == 'All Downloads' or category == 'Single Downloads': persepolis_db.updateCategoryTable([category_dict]) else: persepolis_db.insertInCategoryTable(category_dict) # add items to download_db_table in data base f_download_list_file = open(download_list_file) download_list_file_lines = f_download_list_file.readlines() f_download_list_file.close() for line in download_list_file_lines: gid = line.strip() download_info_file = os.path.join(download_info_folder, gid) download_info_file_list = readList(download_info_file) add_link_dictionary = download_info_file_list[9] dict = {'file_name': download_info_file_list[0], 'status': download_info_file_list[1], 'size': download_info_file_list[2], 'downloaded_size': download_info_file_list[3], 'percent': download_info_file_list[4], 'connections': download_info_file_list[5], 'rate': download_info_file_list[6], 'estimate_time_left': download_info_file_list[7], 'gid': download_info_file_list[8], 'link': add_link_dictionary['link'], 'first_try_date': download_info_file_list[10], 'last_try_date': download_info_file_list[11], 'category': download_info_file_list[12]} add_link_dictionary['gid'] = download_info_file_list[8] if 'user-agent' in add_link_dictionary.keys(): add_link_dictionary['user_agent'] = add_link_dictionary.pop('user-agent') if 'load-cookies' in add_link_dictionary.keys(): add_link_dictionary['load_cookies'] = add_link_dictionary.pop('load-cookies') add_link_dictionary['limit_value'] = 0 keys_list = ['gid', 'out', 'start_time', 'end_time', 'link', 'ip', 'port', 'proxy_user', 'proxy_passwd', 'download_user', 'download_passwd', 'connections', 'limit_value', 'download_path', 'referer', 'load_cookies', 'user_agent', 'header', 'after_download'] for key in keys_list: # if a key is missed in dict, # then add this key to the dict and assign None value for the key. if key not in add_link_dictionary.keys(): add_link_dictionary[key] = None # write information in data_base persepolis_db.insertInDownloadTable([dict]) persepolis_db.insertInAddLinkTable([add_link_dictionary]) # close connections persepolis_db.closeConnections() # remove unwanted files and folders for file in [download_list_file, download_list_file_active]: remove(file) for folder in [category_folder, queue_info_folder]: removeDir(folder) persepolisdm-persepolis-867ee76/persepolis/scripts/data_base.py000066400000000000000000001762441464161131600251320ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from persepolis.scripts.useful_tools import determineConfigFolder from time import sleep import sqlite3 import random import ast import os # download manager config folder . config_folder = determineConfigFolder() # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') # This class manages TempDB # TempDB contains gid of active downloads in every session. class TempDB(): def __init__(self): # temp_db saves in RAM # temp_db_connection self.temp_db_connection = sqlite3.connect(':memory:', check_same_thread=False) # temp_db_cursor self.temp_db_cursor = self.temp_db_connection.cursor() # create a lock for data base self.lock = False # this method locks data base. # this is pervent accessing data base simultaneously. def lockCursor(self): while self.lock: rand_float = random.uniform(0, 0.5) sleep(rand_float) self.lock = True # temp_db_table contains gid of active downloads. def createTables(self): # lock data base self.lockCursor() self.temp_db_cursor.execute("""CREATE TABLE IF NOT EXISTS single_db_table( ID INTEGER, gid TEXT PRIMARY KEY, status TEXT, shutdown TEXT )""") self.temp_db_cursor.execute("""CREATE TABLE IF NOT EXISTS queue_db_table( ID INTEGER, category TEXT PRIMARY KEY, shutdown TEXT )""") self.temp_db_connection.commit() self.lock = False # insert new item in single_db_table def insertInSingleTable(self, gid): # lock data base self.lockCursor() self.temp_db_cursor.execute("""INSERT INTO single_db_table VALUES( NULL, '{}', 'active', NULL)""".format(gid)) self.temp_db_connection.commit() self.lock = False # insert new item in queue_db_table def insertInQueueTable(self, category): # lock data base self.lockCursor() self.temp_db_cursor.execute("""INSERT INTO queue_db_table VALUES( NULL, '{}', NULL)""".format(category)) self.temp_db_connection.commit() self.lock = False # this method updates single_db_table def updateSingleTable(self, dict_): # lock data base self.lockCursor() keys_list = ['gid', 'shutdown', 'status' ] for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dict_.keys(): dict_[key] = None # update data base if value for the keys is not None self.temp_db_cursor.execute("""UPDATE single_db_table SET shutdown = coalesce(:shutdown, shutdown), status = coalesce(:status, status) WHERE gid = :gid""", dict_) self.temp_db_connection.commit() self.lock = False # this method updates queue_db_table def updateQueueTable(self, dict_): # lock data base self.lockCursor() keys_list = ['category', 'shutdown'] for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dict_.keys(): dict_[key] = None # update data base if value for the keys is not None self.temp_db_cursor.execute("""UPDATE queue_db_table SET shutdown = coalesce(:shutdown, shutdown) WHERE category = :category""", dict_) self.temp_db_connection.commit() self.lock = False # this method returns gid of active downloads def returnActiveGids(self): # lock data base self.lockCursor() self.temp_db_cursor.execute("""SELECT gid FROM single_db_table WHERE status = 'active'""") list_ = self.temp_db_cursor.fetchall() self.lock = False gid_list = [] for tuple_ in list_: gid = tuple_[0] gid_list.append(gid) return gid_list # this method returns shutdown value for specific gid def returnGid(self, gid): # lock data base self.lockCursor() self.temp_db_cursor.execute("""SELECT shutdown, status FROM single_db_table WHERE gid = '{}'""".format(gid)) list_ = self.temp_db_cursor.fetchall() self.lock = False tuple_ = list_[0] dict_ = {'shutdown': str(tuple_[0]), 'status': tuple_[1]} return dict_ # This method returns values of columns for specific category def returnCategory(self, category): # lock data base self.lockCursor() self.temp_db_cursor.execute("""SELECT shutdown FROM queue_db_table WHERE category = '{}'""".format(category)) list_ = self.temp_db_cursor.fetchall() self.lock = False tuple_ = list_[0] dict_ = {'shutdown': tuple_[0]} return dict_ def resetDataBase(self): # lock data base self.lockCursor() # delete all items self.temp_db_cursor.execute("""DELETE FROM single_db_table""") self.temp_db_cursor.execute("""DELETE FROM queue_db_table""") # release lock self.lock = False # close connections def closeConnections(self): # lock data base self.lockCursor() self.temp_db_cursor.close() self.temp_db_connection.close() self.lock = False # plugins.db is store links, when browser plugins are send new links. # This class is managing plugin.db class PluginsDB(): def __init__(self): # plugins.db file path plugins_db_path = os.path.join(persepolis_tmp, 'plugins.db') # plugins_db_connection self.plugins_db_connection = sqlite3.connect(plugins_db_path, check_same_thread=False) # plugins_db_cursor self.plugins_db_cursor = self.plugins_db_connection.cursor() # create a lock for data base self.lock = False # this method locks data base. # this is pervent accessing data base simultaneously. def lockCursor(self): while self.lock: rand_float = random.uniform(0, 0.5) sleep(rand_float) self.lock = True # plugins_db_table contains links that sends by browser plugins. def createTables(self): # lock data base self.lockCursor() self.plugins_db_cursor.execute("""CREATE TABLE IF NOT EXISTS plugins_db_table( ID INTEGER PRIMARY KEY, link TEXT, referer TEXT, load_cookies TEXT, user_agent TEXT, header TEXT, out TEXT, status TEXT )""") self.plugins_db_connection.commit() # release lock self.lock = False # insert new items in plugins_db_table def insertInPluginsTable(self, list_): # lock data base self.lockCursor() for dict_ in list_: self.plugins_db_cursor.execute("""INSERT INTO plugins_db_table VALUES( NULL, :link, :referer, :load_cookies, :user_agent, :header, :out, 'new' )""", dict_) self.plugins_db_connection.commit() # release lock self.lock = False # this method returns all new links in plugins_db_table def returnNewLinks(self): # lock data base self.lockCursor() self.plugins_db_cursor.execute("""SELECT link, referer, load_cookies, user_agent, header, out FROM plugins_db_table WHERE status = 'new'""") list_ = self.plugins_db_cursor.fetchall() # chang all rows status to 'old' self.plugins_db_cursor.execute("""UPDATE plugins_db_table SET status = 'old' WHERE status = 'new'""") # commit changes self.plugins_db_connection.commit() # release lock self.lock = False # create new_list new_list = [] # put the information in tuple_s in dictionary format and add it to new_list for tuple_ in list_: dict_ = {'link': tuple_[0], 'referer': tuple_[1], 'load_cookies': tuple_[2], 'user_agent': tuple_[3], 'header': tuple_[4], 'out': tuple_[5] } new_list.append(dict_) # return results in list format! # every member of this list is a dictionary. # every dictionary contains download information return new_list # delete old links from data base def deleteOldLinks(self): # lock data base self.lockCursor() self.plugins_db_cursor.execute("""DELETE FROM plugins_db_table WHERE status = 'old'""") # commit changes self.plugins_db_connection.commit() # release lock self.lock = False # close connections def closeConnections(self): # lock data base self.lockCursor() self.plugins_db_cursor.close() self.plugins_db_connection.close() # release lock self.lock = False # persepolis main data base contains downloads information # This class is managing persepolis.db class PersepolisDB(): def __init__(self): # persepolis.db file path persepolis_db_path = os.path.join(config_folder, 'persepolis.db') # persepolis_db_connection self.persepolis_db_connection = sqlite3.connect(persepolis_db_path, check_same_thread=False) # turn FOREIGN KEY Support on! self.persepolis_db_connection.execute('pragma foreign_keys=ON') # persepolis_db_cursor self.persepolis_db_cursor = self.persepolis_db_connection.cursor() # Create a lock for data base self.lock = False # this method locks data base. # this is pervent accessing data base simultaneously. def lockCursor(self): while self.lock: rand_float = random.uniform(0, 0.5) sleep(rand_float) self.lock = True # queues_list contains name of categories and category settings def createTables(self): # lock data base self.lockCursor() # Create category_db_table and add 'All Downloads' and 'Single Downloads' to it self.persepolis_db_cursor.execute("""CREATE TABLE IF NOT EXISTS category_db_table( category TEXT PRIMARY KEY, start_time_enable TEXT, start_time TEXT, end_time_enable TEXT, end_time TEXT, reverse TEXT, limit_enable TEXT, limit_value TEXT, after_download TEXT, gid_list TEXT )""") # download table contains download table download items information self.persepolis_db_cursor.execute("""CREATE TABLE IF NOT EXISTS download_db_table( file_name TEXT, status TEXT, size TEXT, downloaded_size TEXT, percent TEXT, connections TEXT, rate TEXT, estimate_time_left TEXT, gid TEXT PRIMARY KEY, link TEXT, first_try_date TEXT, last_try_date TEXT, category TEXT, FOREIGN KEY(category) REFERENCES category_db_table(category) ON UPDATE CASCADE ON DELETE CASCADE )""") # addlink_db_table contains addlink window download information self.persepolis_db_cursor.execute("""CREATE TABLE IF NOT EXISTS addlink_db_table( ID INTEGER PRIMARY KEY, gid TEXT, out TEXT, start_time TEXT, end_time TEXT, link TEXT, ip TEXT, port TEXT, proxy_user TEXT, proxy_passwd TEXT, download_user TEXT, download_passwd TEXT, connections TEXT, limit_value TEXT, download_path TEXT, referer TEXT, load_cookies TEXT, user_agent TEXT, header TEXT, after_download TEXT, proxy_type TEXT, FOREIGN KEY(gid) REFERENCES download_db_table(gid) ON UPDATE CASCADE ON DELETE CASCADE )""") # video_finder_db_table contains addlink window download information self.persepolis_db_cursor.execute("""CREATE TABLE IF NOT EXISTS video_finder_db_table( ID INTEGER PRIMARY KEY, video_gid TEXT, audio_gid TEXT, video_completed TEXT, audio_completed TEXT, muxing_status TEXT, checking TEXT, download_path TEXT, FOREIGN KEY(video_gid) REFERENCES download_db_table(gid) ON DELETE CASCADE, FOREIGN KEY(audio_gid) REFERENCES download_db_table(gid) ON DELETE CASCADE )""") self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # add 'All Downloads' and 'Single Downloads' to the category_db_table if they wasn't added. answer = self.searchCategoryInCategoryTable('All Downloads') if not (answer): all_downloads_dict = {'category': 'All Downloads', 'start_time_enable': 'no', 'start_time': '0:0', 'end_time_enable': 'no', 'end_time': '0:0', 'reverse': 'no', 'limit_enable': 'no', 'limit_value': '0K', 'after_download': 'no', 'gid_list': '[]' } single_downloads_dict = {'category': 'Single Downloads', 'start_time_enable': 'no', 'start_time': '0:0', 'end_time_enable': 'no', 'end_time': '0:0', 'reverse': 'no', 'limit_enable': 'no', 'limit_value': '0K', 'after_download': 'no', 'gid_list': '[]' } self.insertInCategoryTable(all_downloads_dict) self.insertInCategoryTable(single_downloads_dict) # add default queue with the name 'Scheduled Downloads' answer = self.searchCategoryInCategoryTable('Scheduled Downloads') if not (answer): scheduled_downloads_dict = {'category': 'Scheduled Downloads', 'start_time_enable': 'no', 'start_time': '0:0', 'end_time_enable': 'no', 'end_time': '0:0', 'reverse': 'no', 'limit_enable': 'no', 'limit_value': '0K', 'after_download': 'no', 'gid_list': '[]' } self.insertInCategoryTable(scheduled_downloads_dict) # insert new category in category_db_table def insertInCategoryTable(self, dict_): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""INSERT INTO category_db_table VALUES( :category, :start_time_enable, :start_time, :end_time_enable, :end_time, :reverse, :limit_enable, :limit_value, :after_download, :gid_list )""", dict_) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # insert in to download_db_table in persepolis.db def insertInDownloadTable(self, list_): # lock data base self.lockCursor() for dict_ in list_: self.persepolis_db_cursor.execute("""INSERT INTO download_db_table VALUES( :file_name, :status, :size, :downloaded_size, :percent, :connections, :rate, :estimate_time_left, :gid, :link, :first_try_date, :last_try_date, :category )""", dict_) # commit changes self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False if len(list_) != 0: # item must be inserted to gid_list of 'All Downloads' and gid_list of category # find download category and gid category = dict_['category'] # get category_dict from data base category_dict = self.searchCategoryInCategoryTable(category) # get all_downloads_dict from data base all_downloads_dict = self.searchCategoryInCategoryTable('All Downloads') # get gid_list category_gid_list = category_dict['gid_list'] all_downloads_gid_list = all_downloads_dict['gid_list'] for dict_ in list_: gid = dict_['gid'] # add gid of item to gid_list category_gid_list.append(gid) all_downloads_gid_list.append(gid) # update category_db_table self.updateCategoryTable([all_downloads_dict]) self.updateCategoryTable([category_dict]) # insert in addlink table in persepolis.db def insertInAddLinkTable(self, list_): # lock data base self.lockCursor() for dict_ in list_: # first column and after_download column is NULL self.persepolis_db_cursor.execute("""INSERT INTO addlink_db_table VALUES(NULL, :gid, :out, :start_time, :end_time, :link, :ip, :port, :proxy_user, :proxy_passwd, :download_user, :download_passwd, :connections, :limit_value, :download_path, :referer, :load_cookies, :user_agent, :header, NULL, :proxy_type )""", dict_) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def insertInVideoFinderTable(self, list_): # lock data base self.lockCursor() for dictionary in list_: # first column is NULL self.persepolis_db_cursor.execute("""INSERT INTO video_finder_db_table VALUES(NULL, :video_gid, :audio_gid, :video_completed, :audio_completed, :muxing_status, :checking, :download_path )""", dictionary) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def searchGidInVideoFinderTable(self, gid): # lock data base self.lockCursor() self.persepolis_db_cursor.execute( """SELECT * FROM video_finder_db_table WHERE audio_gid = '{}' OR video_gid = '{}'""".format(str(gid), str(gid))) result_list = self.persepolis_db_cursor.fetchall() # job is done self.lock = False if result_list: tuple_ = result_list[0] else: return None dictionary = {'video_gid': tuple_[1], 'audio_gid': tuple_[2], 'video_completed': tuple_[3], 'audio_completed': tuple_[4], 'muxing_status': tuple_[5], 'checking': tuple_[6], 'download_path': tuple_[7]} # return the results return dictionary # return download information in download_db_table with special gid. def searchGidInDownloadTable(self, gid): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""SELECT * FROM download_db_table WHERE gid = '{}'""".format(str(gid))) list_ = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False if list_: tuple_ = list_[0] else: return None dict_ = {'file_name': tuple_[0], 'status': tuple_[1], 'size': tuple_[2], 'downloaded_size': tuple_[3], 'percent': tuple_[4], 'connections': tuple_[5], 'rate': tuple_[6], 'estimate_time_left': tuple_[7], 'gid': tuple_[8], 'link': tuple_[9], 'first_try_date': tuple_[10], 'last_try_date': tuple_[11], 'category': tuple_[12] } # return results return dict_ # return all items in download_db_table # '*' for category, cause that method returns all items. def returnItemsInDownloadTable(self, category=None): # lock data base self.lockCursor() if category: self.persepolis_db_cursor.execute( """SELECT * FROM download_db_table WHERE category = '{}'""".format(category)) else: self.persepolis_db_cursor.execute("""SELECT * FROM download_db_table""") rows = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False downloads_dict = {} for tuple_ in rows: # change format of tuple_ to dictionary dict_ = {'file_name': tuple_[0], 'status': tuple_[1], 'size': tuple_[2], 'downloaded_size': tuple_[3], 'percent': tuple_[4], 'connections': tuple_[5], 'rate': tuple_[6], 'estimate_time_left': tuple_[7], 'gid': tuple_[8], 'link': tuple_[9], 'first_try_date': tuple_[10], 'last_try_date': tuple_[11], 'category': tuple_[12] } # add dict to the downloads_dict # gid is key and dict_ is value downloads_dict[tuple_[8]] = dict_ return downloads_dict # this method checks existence of a link in addlink_db_table def searchLinkInAddLinkTable(self, link): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""SELECT * FROM addlink_db_table WHERE link = (?)""", (link,)) list_ = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False if list_: return True else: return False # return download information in addlink_db_table with special gid. def searchGidInAddLinkTable(self, gid): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""SELECT * FROM addlink_db_table WHERE gid = '{}'""".format(str(gid))) list_ = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False if list_: tuple_ = list_[0] else: return None dict_ = {'gid': tuple_[1], 'out': tuple_[2], 'start_time': tuple_[3], 'end_time': tuple_[4], 'link': tuple_[5], 'ip': tuple_[6], 'port': tuple_[7], 'proxy_user': tuple_[8], 'proxy_passwd': tuple_[9], 'download_user': tuple_[10], 'download_passwd': tuple_[11], 'connections': tuple_[12], 'limit_value': tuple_[13], 'download_path': tuple_[14], 'referer': tuple_[15], 'load_cookies': tuple_[16], 'user_agent': tuple_[17], 'header': tuple_[18], 'after_download': tuple_[19], 'proxy_type': tuple_[20] } return dict_ # return items in addlink_db_table # '*' for category, cause that method returns all items. def returnItemsInAddLinkTable(self, category=None): # lock data base self.lockCursor() if category: self.persepolis_db_cursor.execute( """SELECT * FROM addlink_db_table WHERE category = '{}'""".format(category)) else: self.persepolis_db_cursor.execute("""SELECT * FROM addlink_db_table""") rows = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False addlink_dict = {} for tuple_ in rows: # change format of tuple_ to dictionary dict_ = {'gid': tuple_[1], 'out': tuple_[2], 'start_time': tuple_[3], 'end_time': tuple_[4], 'link': tuple_[5], 'ip': tuple_[6], 'port': tuple_[7], 'proxy_user': tuple_[8], 'proxy_passwd': tuple_[9], 'download_user': tuple_[10], 'download_passwd': tuple_[11], 'connections': tuple_[12], 'limit_value': tuple_[13], 'download_path': tuple_[14], 'referer': tuple_[15], 'load_cookies': tuple_[16], 'user_agent': tuple_[17], 'header': tuple_[18], 'after_download': tuple_[19], 'proxy_type': tuple_[20] } # add dict_ to the addlink_dict # gid as key and dict_ as value addlink_dict[tuple_[1]] = dict_ return addlink_dict # this method updates download_db_table def updateDownloadTable(self, list_): # lock data base self.lockCursor() keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] for dict_ in list_: for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dict_.keys(): dict_[key] = None # update data base if value for the keys is not None self.persepolis_db_cursor.execute("""UPDATE download_db_table SET file_name = coalesce(:file_name, file_name), status = coalesce(:status, status), size = coalesce(:size, size), downloaded_size = coalesce(:downloaded_size, downloaded_size), percent = coalesce(:percent, percent), connections = coalesce(:connections, connections), rate = coalesce(:rate, rate), estimate_time_left = coalesce(:estimate_time_left, estimate_time_left), link = coalesce(:link, link), first_try_date = coalesce(:first_try_date, first_try_date), last_try_date = coalesce(:last_try_date, last_try_date), category = coalesce(:category, category) WHERE gid = :gid""", dict_) # commit the changes self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # this method updates category_db_table def updateCategoryTable(self, list_): # lock data base self.lockCursor() keys_list = ['category', 'start_time_enable', 'start_time', 'end_time_enable', 'end_time', 'reverse', 'limit_enable', 'limit_value', 'after_download', 'gid_list'] for dict_ in list_: # format of gid_list is list and must be converted to string for sqlite3 if 'gid_list' in dict_.keys(): dict_['gid_list'] = str(dict_['gid_list']) for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dict_.keys(): dict_[key] = None # update data base if value for the keys is not None self.persepolis_db_cursor.execute("""UPDATE category_db_table SET start_time_enable = coalesce(:start_time_enable, start_time_enable), start_time = coalesce(:start_time, start_time), end_time_enable = coalesce(:end_time_enable, end_time_enable), end_time = coalesce(:end_time, end_time), reverse = coalesce(:reverse, reverse), limit_enable = coalesce(:limit_enable, limit_enable), limit_value = coalesce(:limit_value, limit_value), after_download = coalesce(:after_download, after_download), gid_list = coalesce(:gid_list, gid_list) WHERE category = :category""", dict_) # commit changes self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # this method updates addlink_db_table def updateAddLinkTable(self, list_): # lock data base self.lockCursor() keys_list = ['gid', 'out', 'start_time', 'end_time', 'link', 'ip', 'port', 'proxy_user', 'proxy_passwd', 'download_user', 'download_passwd', 'connections', 'limit_value', 'download_path', 'referer', 'load_cookies', 'user_agent', 'header', 'after_download', 'proxy_type'] for dict_ in list_: for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dict_.keys(): dict_[key] = None # update data base if value for the keys is not None self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET out = coalesce(:out, out), start_time = coalesce(:start_time, start_time), end_time = coalesce(:end_time, end_time), link = coalesce(:link, link), ip = coalesce(:ip, ip), port = coalesce(:port, port), proxy_user = coalesce(:proxy_user, proxy_user), proxy_passwd = coalesce(:proxy_passwd, proxy_passwd), download_user = coalesce(:download_user, download_user), download_passwd = coalesce(:download_passwd, download_passwd), connections = coalesce(:connections, connections), limit_value = coalesce(:limit_value, limit_value), download_path = coalesce(:download_path, download_path), referer = coalesce(:referer, referer), load_cookies = coalesce(:load_cookies, load_cookies), user_agent = coalesce(:user_agent, user_agent), header = coalesce(:header, header), after_download = coalesce(:after_download , after_download), proxy_type = coalesce(:proxy_type , proxy_type) WHERE gid = :gid""", dict_) # commit the changes! self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def updateVideoFinderTable(self, list_): # lock data base self.lockCursor() keys_list = ['video_gid', 'audio_gid', 'video_completed', 'audio_completed', 'muxing_status', 'checking'] for dictionary in list_: for key in keys_list: # if a key is missed in dict_, # then add this key to the dict_ and assign None value for the key. if key not in dictionary.keys(): dictionary[key] = None if dictionary['video_gid']: # update data base if value for the keys is not None self.persepolis_db_cursor.execute("""UPDATE video_finder_db_table SET video_completed = coalesce(:video_completed, video_completed), audio_completed = coalesce(:audio_completed, audio_completed), muxing_status = coalesce(:muxing_status, muxing_status), checking = coalesce(:checking, checking), download_path = coalesce(:download_path, download_path) WHERE video_gid = :video_gid""", dictionary) elif dictionary['audio_gid']: # update data base if value for the keys is not None self.persepolis_db_cursor.execute("""UPDATE video_finder_db_table SET video_completed = coalesce(:video_completed, video_completed), audio_completed = coalesce(:audio_completed, audio_completed), muxing_status = coalesce(:muxing_status, muxing_status), checking = coalesce(:checking, checking), download_path = coalesce(:download_path, download_path) WHERE audio_gid = :audio_gid""", dictionary) # commit the changes! self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def setDefaultGidInAddlinkTable(self, gid, start_time=False, end_time=False, after_download=False): # lock data base self.lockCursor() # change value of start_time and end_time and after_download for special gid to NULL value if start_time: self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET start_time = NULL WHERE gid = '{}' """.format(gid)) if end_time: self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET end_time = NULL WHERE gid = '{}' """.format(gid)) if after_download: self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET after_download = NULL WHERE gid = '{}' """.format(gid)) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # return category information in category_db_table def searchCategoryInCategoryTable(self, category): # lock data base self.lockCursor() self.persepolis_db_cursor.execute( """SELECT * FROM category_db_table WHERE category = '{}'""".format(str(category))) list_ = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False if list_: tuple_ = list_[0] else: return None # convert string to list gid_list = ast.literal_eval(tuple_[9]) # create a dictionary from results dict_ = {'category': tuple_[0], 'start_time_enable': tuple_[1], 'start_time': tuple_[2], 'end_time_enable': tuple_[3], 'end_time': tuple_[4], 'reverse': tuple_[5], 'limit_enable': tuple_[6], 'limit_value': tuple_[7], 'after_download': tuple_[8], 'gid_list': gid_list } # return dictionary return dict_ # return categories name def categoriesList(self): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""SELECT category FROM category_db_table ORDER BY ROWID""") rows = self.persepolis_db_cursor.fetchall() # create a list from categories name queues_list = [] for tuple_ in rows: queues_list.append(tuple_[0]) # job is done! open the lock self.lock = False # return the list return queues_list def setDBTablesToDefaultValue(self): # lock data base self.lockCursor() # change start_time_enable , end_time_enable , reverse , # limit_enable , after_download value to default value ! self.persepolis_db_cursor.execute("""UPDATE category_db_table SET start_time_enable = 'no', end_time_enable = 'no', reverse = 'no', limit_enable = 'no', after_download = 'no'""") # change status of download to 'stopped' if status isn't 'complete' or 'error' self.persepolis_db_cursor.execute("""UPDATE download_db_table SET status = 'stopped' WHERE status NOT IN ('complete', 'error')""") # change start_time and end_time and # after_download value to None in addlink_db_table! self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET start_time = NULL, end_time = NULL, after_download = NULL """) # change checking value to no in video_finder_db_table self.persepolis_db_cursor.execute("""UPDATE video_finder_db_table SET checking = 'no'""") self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def findActiveDownloads(self, category=None): # lock data base self.lockCursor() # find download items is download_db_table with status = "downloading" or "waiting" or paused or scheduled if category: self.persepolis_db_cursor.execute("""SELECT gid FROM download_db_table WHERE (category = '{}') AND (status = 'downloading' OR status = 'waiting' OR status = 'scheduled' OR status = 'paused')""".format(str(category))) else: self.persepolis_db_cursor.execute("""SELECT gid FROM download_db_table WHERE (status = 'downloading' OR status = 'waiting' OR status = 'scheduled' OR status = 'paused')""") # create a list for returning answer result = self.persepolis_db_cursor.fetchall() gid_list = [] for result_tuple in result: gid_list.append(result_tuple[0]) # job is done! open the lock self.lock = False return gid_list # this method returns items with 'downloading' or 'waiting' status def returnDownloadingItems(self): # lock data base self.lockCursor() # find download items is download_db_table with status = "downloading" or "waiting" or paused or scheduled self.persepolis_db_cursor.execute( """SELECT gid FROM download_db_table WHERE (status = 'downloading' OR status = 'waiting')""") # create a list for returning answer result = self.persepolis_db_cursor.fetchall() gid_list = [] for result_tuple in result: gid_list.append(result_tuple[0]) # job is done! open the lock self.lock = False return gid_list # this method returns items with 'paused' status. def returnPausedItems(self): # lock data base self.lockCursor() # find download items is download_db_table with status = "downloading" or "waiting" or paused or scheduled self.persepolis_db_cursor.execute("""SELECT gid FROM download_db_table WHERE (status = 'paused')""") # create a list for returning answer result = self.persepolis_db_cursor.fetchall() gid_list = [] for result_tuple in result: gid_list.append(result_tuple[0]) # job is done! open the lock self.lock = False return gid_list # return all video_gids and audio_gids in video_finder_db_table def returnVideoFinderGids(self): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""SELECT video_gid, audio_gid FROM video_finder_db_table""") # create a list for result result = self.persepolis_db_cursor.fetchall() # job is done! open the lock self.lock = False gid_list = [] video_gid_list = [] audio_gid_list = [] for result_tuple in result: gid_list.append(result_tuple[0]) video_gid_list.append(result_tuple[0]) gid_list.append(result_tuple[1]) audio_gid_list.append(result_tuple[1]) # job is done return gid_list, video_gid_list, audio_gid_list # This method deletes a category from category_db_table def deleteCategory(self, category): # delete gids of this category from gid_list of 'All Downloads' category_dict = self.searchCategoryInCategoryTable(category) all_downloads_dict = self.searchCategoryInCategoryTable('All Downloads') # get gid_list category_gid_list = category_dict['gid_list'] all_downloads_gid_list = all_downloads_dict['gid_list'] for gid in category_gid_list: # delete item from all_downloads_gid_list all_downloads_gid_list.remove(gid) # update category_db_table self.updateCategoryTable([all_downloads_dict]) # delete category from data_base # lock data base self.lockCursor() self.persepolis_db_cursor.execute( """DELETE FROM category_db_table WHERE category = '{}'""".format(str(category))) # commit changes self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # this method deletes all items in data_base def resetDataBase(self): # update gid_list in categories with empty gid_list all_downloads_dict = {'category': 'All Downloads', 'gid_list': []} single_downloads_dict = {'category': 'Single Downloads', 'gid_list': []} scheduled_downloads_dict = {'category': 'Scheduled Downloads', 'gid_list': []} self.updateCategoryTable([all_downloads_dict, single_downloads_dict, scheduled_downloads_dict]) # lock data base self.lockCursor() # delete all items in category_db_table, except 'All Downloads' and 'Single Downloads' self.persepolis_db_cursor.execute( """DELETE FROM category_db_table WHERE category NOT IN ('All Downloads', 'Single Downloads', 'Scheduled Downloads')""") self.persepolis_db_cursor.execute("""DELETE FROM download_db_table""") self.persepolis_db_cursor.execute("""DELETE FROM addlink_db_table""") # commit self.persepolis_db_connection.commit() # release lock self.lock = False # This method deletes a download item from download_db_table def deleteItemInDownloadTable(self, gid, category): # lock data base self.lockCursor() self.persepolis_db_cursor.execute("""DELETE FROM download_db_table WHERE gid = '{}'""".format(str(gid))) # commit changes self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # delete item from gid_list in category and All Downloads for category_name in category, 'All Downloads': category_dict = self.searchCategoryInCategoryTable(category_name) # get gid_list gid_list = category_dict['gid_list'] # delete item if gid in gid_list: gid_list.remove(gid) # if gid is in video_finder_db_table, both of video_gid and audio_gid must be deleted from gid_list video_finder_dictionary = self.searchGidInVideoFinderTable(gid) if video_finder_dictionary: video_gid = video_finder_dictionary['video_gid'] audio_gid = video_finder_dictionary['audio_gid'] if gid == video_gid: gid_list.remove(audio_gid) else: gid_list.remove(video_gid) # update category_db_table self.updateCategoryTable([category_dict]) # this method replaces: # GB >> GiB # MB >> MiB # KB >> KiB # Read this link for more information: # https://en.wikipedia.org/wiki/Orders_of_magnitude_(data) def correctDataBase(self): # lock data base self.lockCursor() for units in [['KB', 'KiB'], ['MB', 'MiB'], ['GB', 'GiB']]: dict_ = {'old_unit': units[0], 'new_unit': units[1]} self.persepolis_db_cursor.execute("""UPDATE download_db_table SET size = replace(size, :old_unit, :new_unit)""", dict_) self.persepolis_db_cursor.execute("""UPDATE download_db_table SET rate = replace(rate, :old_unit, :new_unit)""", dict_) self.persepolis_db_cursor.execute("""UPDATE download_db_table SET downloaded_size = replace(downloaded_size, :old_unit, :new_unit)""", dict_) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def correctDataBaseForVersion410(self): # lock data base self.lockCursor() # set all proxy_type to http # first check for proxy_type's column is exist or not. try: self.persepolis_db_cursor.execute("""SELECT proxy_type FROM addlink_db_table""") except sqlite3.OperationalError: # create proxy_type column in addlink_db_table self.persepolis_db_cursor.execute("""ALTER TABLE addlink_db_table ADD proxy_type NULL""") # set "http" value for pervious downloads that use proxy self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET proxy_type = 'http' WHERE ip IS NOT NULL""") self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False # close connections def correctDataBaseForVersion411(self): # lock data base self.lockCursor() # find gid of all unfinished downloads in download_db_table self.persepolis_db_cursor.execute("""SELECT gid FROM download_db_table WHERE status IS NOT 'complete'""") result = self.persepolis_db_cursor.fetchall() gid_list = [] for result_tuple in result: gid_list.append(result_tuple[0]) # correct download path for gid in gid_list: # find download_path self.persepolis_db_cursor.execute("""SELECT download_path FROM addlink_db_table WHERE gid = '{}'""".format(str(gid))) tuple_ = self.persepolis_db_cursor.fetchone() download_path = tuple_[0] import platform os_type = platform.system() home_address = os.path.expanduser("~") if os.lstat(download_path).st_dev == os.lstat(home_address).st_dev: if os_type != 'Windows': download_path_temp = os.path.join(home_address, '.persepolis') else: download_path_temp = os.path.join( home_address, 'AppData', 'Local', 'persepolis') else: from persepolis.scripts.osCommands import findMountPoint # Find mount point mount_point = findMountPoint(download_path) # find download_path_temp if os_type == 'Windows': download_path_temp = os.path.join(mount_point, 'persepolis') else: download_path_temp = os.path.join(mount_point, '.persepolis') # set download_path_temp as download_path self.persepolis_db_cursor.execute("""UPDATE addlink_db_table SET download_path = '{}' WHERE gid = '{}' """.format(download_path_temp, gid)) self.persepolis_db_connection.commit() # job is done! open the lock self.lock = False def closeConnections(self): # lock data base self.lockCursor() self.persepolis_db_cursor.close() self.persepolis_db_connection.close() # job is done! open the lock self.lock = False persepolisdm-persepolis-867ee76/persepolis/scripts/download.py000066400000000000000000000776011464161131600250330ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.scripts.useful_tools import freeSpace, humanReadableSize, findExternalAppPath, runApplication from persepolis.scripts.socks5_to_http_convertor import Socks5ToHttpConvertor from persepolis.scripts.osCommands import moveFile, makeDirs from persepolis.scripts.bubble import notifySend from persepolis.scripts import logger from persepolis.constants import OS import xmlrpc.client import urllib.parse import subprocess import traceback import platform import time import ast import os try: from PySide6.QtCore import QSettings except: from PyQt5.QtCore import QSettings # Before reading this file, please read this link! # this link helps you to understand this codes: # https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface home_address = os.path.expanduser("~") os_type = platform.system() # persepolis setting persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') # host is localhost host = 'localhost' # get port from persepolis_setting port = int(persepolis_setting.value('settings/rpc-port')) # get aria2_path aria2_path = persepolis_setting.value('settings/aria2_path') # xml rpc SERVER_URI_FORMAT = 'http://{}:{:d}/rpc' server_uri = SERVER_URI_FORMAT.format(host, port) server = xmlrpc.client.ServerProxy(server_uri, allow_none=True) # start aria2 with RPC def startAria(parent): # find aria2c path aria2c_command, log_list = findExternalAppPath('aria2c') logger.sendToLog(log_list[0], log_list[1]) # Run aria2c command_argument = [aria2c_command, '--no-conf', '--enable-rpc', '--rpc-listen-port=' + str(port), '--rpc-max-request-size=2M', '--rpc-listen-all', '--quiet=true'] process = runApplication(command_argument) time.sleep(2) # check that starting is successful or not! answer = aria2Version() # return result return process, answer # check aria2 release version . Persepolis uses this function to # check that aria2 RPC connection is available or not. def aria2Version(): try: answer = server.aria2.getVersion() except: # write ERROR messages in terminal and log logger.sendToLog("Aria2 didn't respond!", "ERROR") answer = "did not respond" return answer # this function sends download request to aria2 def downloadAria(parent, gid, main_window): # add_link_dictionary is a dictionary that contains user download request # information. # get information from data_base add_link_dictionary = main_window.persepolis_db.searchGidInAddLinkTable(gid) link = add_link_dictionary['link'] proxy_host = add_link_dictionary['ip'] proxy_port = add_link_dictionary['port'] proxy_user = add_link_dictionary['proxy_user'] proxy_passwd = add_link_dictionary['proxy_passwd'] download_user = add_link_dictionary['download_user'] download_passwd = add_link_dictionary['download_passwd'] proxy_type = add_link_dictionary['proxy_type'] connections = add_link_dictionary['connections'] limit = str(add_link_dictionary['limit_value']) start_time = add_link_dictionary['start_time'] end_time = add_link_dictionary['end_time'] header = add_link_dictionary['header'] out = add_link_dictionary['out'] user_agent = add_link_dictionary['user_agent'] cookies = add_link_dictionary['load_cookies'] referer = add_link_dictionary['referer'] # make download options and send them to aria2c # convert Mega to Kilo, RPC does not Support floating point numbers. if limit != '0': limit_number = limit[:-1] limit_number = float(limit_number) limit_unit = limit[-1] if limit_unit == 'K': limit_number = round(limit_number) else: limit_number = round(1024 * limit_number) limit_unit = 'K' limit = str(limit_number) + limit_unit # create header list header_list = [] if cookies: # in xmlrpc cookies must be passed as header cookies_list = cookies.split(';') for i in cookies_list: header_list.append(i) if header is not None: semicolon_split_header = header.split('; ') for i in semicolon_split_header: equal_split_header = i.split('=', 1) join_header = ':'.join(equal_split_header) if i != '': header_list.append(join_header) if len(header_list) == 0: header_list = None # update status and last_try_date in data_base if start_time: status = "scheduled" else: status = "waiting" # get last_try_date now_date = nowDate() # update data_base dict_ = {'gid': gid, 'status': status, 'last_try_date': now_date} main_window.persepolis_db.updateDownloadTable([dict_]) # call startTime if start_time is available # startTime creates sleep loop if user set start_time # see startTime function for more information. if start_time: start_time_status = startTime(start_time, gid, main_window) else: start_time_status = "downloading" if start_time_status == "scheduled": # read limit value again from data_base before starting download! # perhaps user changed this in progress bar window add_link_dictionary = main_window.persepolis_db.searchGidInAddLinkTable(gid) limit = add_link_dictionary['limit_value'] # convert Mega to Kilo, RPC does not Support floating point numbers. if limit != '0': limit_number = limit[:-1] limit_number = float(limit_number) limit_unit = limit[-1] if limit_unit == 'K': limit_number = round(limit_number) else: limit_number = round(1024 * limit_number) limit_unit = 'K' limit = str(limit_number) + limit_unit # set start_time value to None in data_base! main_window.persepolis_db.setDefaultGidInAddlinkTable(gid, start_time=True) persepolis_setting.sync() # Find user's selected download_path download_path = add_link_dictionary['download_path'] # Create download_path if not existed makeDirs(download_path) if start_time_status != 'stopped': # send download request to aria2 aria_dict = { 'gid': gid, 'max-tries': str(persepolis_setting.value('settings/max-tries')), 'retry-wait': int(persepolis_setting.value('settings/retry-wait')), 'timeout': int(persepolis_setting.value('settings/timeout')), 'header': header_list, 'out': out, 'user-agent': user_agent, 'referer': referer, 'max-download-limit': limit, 'split': '16', 'max-connection-per-server': str(connections), 'min-split-size': '1M', 'continue': 'true', 'dir': str(download_path) } # check certificate if str(persepolis_setting.value('settings/dont-check-certificate')) == 'yes': aria_dict['check-certificate'] = 'false' # remote time if str(persepolis_setting.value('settings/remote-time')) == 'yes': aria_dict['remote-time'] = 'true' # if user used user name and password for download if download_user: aria_dict['http-user'] = download_user aria_dict['http-passwd'] = download_passwd # Persepolis supports 3 type of proxy: http, https, socks5 # aria2c can't use socks5. so persepolis converts socks to http and send it to aria2c. # create ip_port in desired format. # for example "127.0.0.1:8118" if proxy_host: # if user checked socks5 proxy then run converter of socks5 to http # don't run new instance, if it's still running # write http_host and http_port to aria_dict create_new_socks5_to_http_convertor = True if proxy_type == 'socks5': for instance in main_window.socks5_to_http_convertor_list: try: if instance.isRunning() is True: if instance.socks5_host == proxy_host and instance.socks5_port == int(proxy_port) and instance.socks5_username == proxy_user: # so we don't need new stance. get instance information. # "socks5 to http convertor" creates local http server. create_new_socks5_to_http_convertor = False ip_port = instance.http_host + ":" + str(instance.http_port) aria_dict['all-proxy'] = ip_port break else: create_new_socks5_to_http_convertor = True except: create_new_socks5_to_http_convertor = True # no instance finded. so create new instance. if create_new_socks5_to_http_convertor: new_socks5_to_http_convertor = Socks5ToHttpConvertor(proxy_host, int(proxy_port), proxy_user, proxy_passwd, main_window, parent) main_window.socks5_to_http_convertor_list.append(new_socks5_to_http_convertor) main_window.socks5_to_http_convertor_list[-1].run() # wait until new_socks5_to_http_convertor starts time.sleep(2) # get instance information ip_port = new_socks5_to_http_convertor.http_host + ":" + str(new_socks5_to_http_convertor.http_port) aria_dict['all-proxy'] = ip_port # http and https proxy else: ip_port = proxy_host + ":" + str(proxy_port) aria_dict['all-proxy'] = ip_port aria_dict['all-proxy-user'] = proxy_user aria_dict['all-proxy-passwd'] = proxy_passwd aria_dict_copy = aria_dict.copy() # remove empty key[value] from aria_dict for aria_dict_key in aria_dict_copy.keys(): if aria_dict_copy[aria_dict_key] in [None, 'None', '']: del aria_dict[aria_dict_key] try: answer = server.aria2.addUri([link], aria_dict) logger.sendToLog(answer + " Starts", 'INFO') if end_time: endTime(end_time, gid, main_window) except: # write error status in data_base dict_ = {'gid': gid, 'status': 'error'} main_window.persepolis_db.updateDownloadTable([dict_]) # write ERROR messages in log logger.sendToLog("Download did not start", "ERROR") error_message = str(traceback.format_exc()) logger.sendToLog(error_message, "ERROR") downloadStop(gid, main_window) # check if aria2c is crashed. # if "No URI to download" is in error message then restart aria2c if error_message.find('No URI to download') != -1: logger.sendToLog("aria2c is restarted!", "INFO") # reset aria2c main_window.threadPool[0].restartAria2c() # return False! return False else: # if start_time_status is "stopped" it means download Canceled by user logger.sendToLog("Download Canceled", "INFO") # this function returns list of download information def tellActive(): # get download information from aria2 try: downloads_status = server.aria2.tellActive( ['gid', 'status', 'connections', 'errorCode', 'errorMessage', 'downloadSpeed', 'connections', 'dir', 'totalLength', 'completedLength', 'files']) except: return None, None download_status_list = [] gid_list = [] # convert download information in desired format. for dict_ in downloads_status: converted_info_dict = convertDownloadInformation(dict_) # add gid to gid_list gid_list.append(dict_['gid']) # add converted information to download_status_list download_status_list.append(converted_info_dict) # return results return gid_list, download_status_list # this function returns download status that specified by gid! def tellStatus(gid, parent): # get download status from aria2 try: download_status = server.aria2.tellStatus( gid, ['status', 'connections', 'errorCode', 'errorMessage', 'downloadSpeed', 'connections', 'dir', 'totalLength', 'completedLength', 'files']) download_status['gid'] = str(gid) except: return None # convert download_status in desired format converted_info_dict = convertDownloadInformation(download_status) # if download has completed , then move file to the download folder if (converted_info_dict['status'] == "complete"): file_name = converted_info_dict['file_name'] # find user preferred download_path from addlink_db_table in data_base add_link_dictionary = parent.persepolis_db.searchGidInAddLinkTable(gid) persepolis_setting.sync() download_path = add_link_dictionary['download_path'] # if user specified download_path is equal to persepolis_setting download_path, # then subfolder must added to download path. if persepolis_setting.value('settings/download_path') == download_path: download_path = findDownloadPath( file_name, download_path, persepolis_setting.value('settings/subfolder')) # find temp download path file_status = str(download_status['files']) file_status = file_status[1:-1] file_status = ast.literal_eval(file_status) path = str(file_status['path']) # file_name file_name = urllib.parse.unquote(os.path.basename(path)) # find file_size try: file_size = int(download_status['totalLength']) except: file_size = None # if file is related to VideoFinder thread, don't move it from temp folder... video_finder_dictionary = parent.persepolis_db.searchGidInVideoFinderTable(gid) if video_finder_dictionary: file_path = path else: file_path = downloadCompleteAction(parent, path, download_path, file_name, file_size) # update download_path in addlink_db_table add_link_dictionary['download_path'] = file_path parent.persepolis_db.updateAddLinkTable([add_link_dictionary]) # if an error occurred! if (converted_info_dict['status'] == "error"): # add errorMessage to converted_info_dict converted_info_dict['error'] = str(download_status['errorMessage']) # remove download from aria2 server.aria2.removeDownloadResult(gid) # return results in dictionary format return converted_info_dict # this function converts download information that received from aria2 in desired format. # input format must be a dictionary. def convertDownloadInformation(download_status): # find file_name try: # file_status contains name of download file and link of download file file_status = str(download_status['files']) file_status = file_status[1:-1] file_status = ast.literal_eval(file_status) path = str(file_status['path']) file_name = urllib.parse.unquote(os.path.basename(path)) if not (file_name): file_name = None uris = file_status['uris'] uri = uris[0] link = uri['uri'] except: file_name = None link = None for i in download_status.keys(): if not (download_status[i]): download_status[i] = None # find file_size try: file_size = float(download_status['totalLength']) except: file_size = None # find downloaded size try: downloaded = float(download_status['completedLength']) except: downloaded = None # convert file_size and downloaded_size to KiB and MiB and GiB if (downloaded is not None and file_size is not None and file_size != 0): file_size_back = file_size # converting file_size to KiB or MiB or GiB size_str = humanReadableSize(file_size) downloaded_back = downloaded downloaded_str = humanReadableSize(downloaded) # find download percent from file_size and downloaded_size file_size = file_size_back downloaded = downloaded_back percent = int(downloaded * 100 / file_size) percent_str = str(percent) + "%" else: percent_str = None size_str = None downloaded_str = None # find download_speed try: download_speed = int(download_status['downloadSpeed']) except: download_speed = 0 # convert download_speed to desired units. # and find estimate_time_left if (downloaded is not None and download_speed != 0): estimate_time_left = int((file_size - downloaded) / download_speed) # converting file_size to KiB or MiB or GiB download_speed_str = humanReadableSize(download_speed, 'speed') + '/s' eta = "" if estimate_time_left >= 3600: eta = eta + str(int(estimate_time_left / 3600)) + "h" estimate_time_left = estimate_time_left % 3600 eta = eta + str(int(estimate_time_left / 60)) + "m" estimate_time_left = estimate_time_left % 60 eta = eta + str(estimate_time_left) + "s" elif estimate_time_left >= 60: eta = eta + str(int(estimate_time_left / 60)) + "m" estimate_time_left = estimate_time_left % 60 eta = eta + str(estimate_time_left) + "s" else: eta = eta + str(estimate_time_left) + "s" estimate_time_left_str = eta else: download_speed_str = "0" estimate_time_left_str = None # find number of connections try: connections_str = str(download_status['connections']) except: connections_str = None # find status of download try: status_str = str(download_status['status']) except: status_str = None # rename active status to downloading if (status_str == "active"): status_str = "downloading" # rename removed status to stopped if (status_str == "removed"): status_str = "stopped" if (status_str == "None"): status_str = None # set 0 second for estimate_time_left_str if download is completed. if status_str == 'complete': estimate_time_left_str = '0s' # return information in dictionary format download_info = { 'gid': download_status['gid'], 'file_name': file_name, 'status': status_str, 'size': size_str, 'downloaded_size': downloaded_str, 'percent': percent_str, 'connections': connections_str, 'rate': download_speed_str, 'estimate_time_left': estimate_time_left_str, 'link': link } return download_info # download complete actions! # this method is returning file_path of file in the user's download folder # and move downloaded file after download completion. def downloadCompleteAction(parent, path, download_path, file_name, file_size): # remove query from name, If file_name contains query components. # check if query existed. # query form is 1.mp3?foo=bar 2.mp3?blatz=pow 3.mp3?fizz=buzz file_name_split = file_name.split('.') file_extension = file_name_split[-1] file_name_without_extension = file_name_split[0] # if '?' in file_extension, then file_name contains query components. if '?' in file_extension: file_extension = file_extension.split('?')[0] file_name = '.'.join([file_name_without_extension, file_extension]) # rename file if file already existed i = 1 file_path = os.path.join(download_path, file_name) while os.path.isfile(file_path): file_name_split = file_name.split('.') extension_length = len(file_name_split[-1]) + 1 new_name = file_name[0:-extension_length] + \ '_' + str(i) + file_name[-extension_length:] file_path = os.path.join(download_path, new_name) i = i + 1 free_space = freeSpace(download_path) if free_space is not None and file_size is not None: # compare free disk space and file_size if free_space >= file_size: # move the file to the download folder move_answer = moveFile(str(path), str(file_path), 'file') if not (move_answer): # write error message in log logger.sendToLog('Persepolis can not move file', "ERROR") file_path = path else: # notify user if we have insufficient disk space # and do not move file from temp download folder to download folder file_path = path logger.sendToLog('Insufficient disk space in download folder', "ERROR") # show notification notifySend("Insufficient disk space!", 'Please change download folder', 10000, 'fail', parent=parent) else: # move the file to the download folder move_answer = moveFile(str(path), str(file_path), 'file') if not (move_answer): logger.sendToLog('Persepolis can not move file', "ERROR") file_path = path return str(file_path) # this function returns folder of download according to file extension def findDownloadPath(file_name, download_path, subfolder): file_name_split = file_name.split('.') file_extension = file_name_split[-1] # convert extension letters to lower case # for example "JPG" will be converted in "jpg" file_extension = file_extension.lower() # remove query from file_extension if existed # if '?' in file_extension, then file_name contains query components. if '?' in file_extension: file_extension = file_extension.split('?')[0] # audio formats audio = ['act', 'aiff', 'aac', 'amr', 'ape', 'au', 'awb', 'dct', 'dss', 'dvf', 'flac', 'gsm', 'iklax', 'ivs', 'm4a', 'm4p', 'mmf', 'mp3', 'mpc', 'msv', 'ogg', 'oga', 'opus', 'ra', 'raw', 'sln', 'tta', 'vox', 'wav', 'wma', 'wv'] # video formats video = ['3g2', '3gp', 'asf', 'avi', 'drc', 'flv', 'm4v', 'mkv', 'mng', 'mov', 'qt', 'mp4', 'm4p', 'mpg', 'mp2', 'mpeg', 'mpe', 'mpv', 'm2v', 'mxf', 'nsv', 'ogv', 'rmvb', 'roq', 'svi', 'vob', 'webm', 'wmv', 'yuv', 'rm'] # document formats document = ['doc', 'docx', 'html', 'htm', 'fb2', 'odt', 'sxw', 'pdf', 'ps', 'rtf', 'tex', 'txt', 'epub', 'pub' 'mobi', 'azw', 'azw3', 'azw4', 'kf8', 'chm', 'cbt', 'cbr', 'cbz', 'cb7', 'cba', 'ibooks', 'djvu', 'md'] # compressed formats compressed = ['a', 'ar', 'cpio', 'shar', 'LBR', 'iso', 'lbr', 'mar', 'tar', 'bz2', 'F', 'gz', 'lz', 'lzma', 'lzo', 'rz', 'sfark', 'sz', 'xz', 'Z', 'z', 'infl', '7z', 's7z', 'ace', 'afa', 'alz', 'apk', 'arc', 'arj', 'b1', 'ba', 'bh', 'cab', 'cfs', 'cpt', 'dar', 'dd', 'dgc', 'dmg', 'ear', 'gca', 'ha', 'hki', 'ice', 'jar', 'kgb', 'lzh', 'lha', 'lzx', 'pac', 'partimg', 'paq6', 'paq7', 'paq8', 'pea', 'pim', 'pit', 'qda', 'rar', 'rk', 'sda', 'sea', 'sen', 'sfx', 'sit', 'sitx', 'sqx', 'tar.gz', 'tgz', 'tar.Z', 'tar.bz2', 'tbz2', 'tar.lzma', 'tlz', 'uc', 'uc0', 'uc2', 'ucn', 'ur2', 'ue2', 'uca', 'uha', 'war', 'wim', 'xar', 'xp3', 'yz1', 'zip', 'zipx', 'zoo', 'zpaq', 'zz', 'ecc', 'par', 'par2'] # return download_path if str(subfolder) == 'yes': if file_extension in audio: return os.path.join(download_path, 'Audios') # aria2c downloads youtube links file_name with 'videoplayback' name?! elif (file_extension in video) or (file_name == 'videoplayback'): return os.path.join(download_path, 'Videos') elif file_extension in document: return os.path.join(download_path, 'Documents') elif file_extension in compressed: return os.path.join(download_path, 'Compressed') else: return os.path.join(download_path, 'Others') else: return download_path # shutdown aria2 def shutDown(): try: answer = server.aria2.shutdown() logger.sendToLog("Aria2 Shutdown : " + str(answer), "INFO") return True except: logger.sendToLog("Aria2 Shutdown Error", "ERROR") return False # downloadStop stops download completely # this function sends remove request to aria2 # and changes status of download to "stopped" in data_base def downloadStop(gid, main_window): # get download status from data_base dict_ = main_window.persepolis_db.searchGidInDownloadTable(gid) status = dict_['status'] # if status is "scheduled", then download request has not been sended to aria2! # so no need to send stop request to aria2. # if status in not "scheduled" so stop request must be sended to aria2. if status != 'scheduled': try: # send remove download request to aria2. # see aria2 documentation for more information. answer = server.aria2.remove(gid) if status == 'downloading': server.aria2.removeDownloadResult(gid) except Exception as error: logger.sendToLog(str(error), "ERROR") answer = "None" # reset aria2c main_window.threadPool[0].restartAria2c() logger.sendToLog("aria2c is restarted!", "INFO") # write a messages in log and terminal logger.sendToLog(answer + " stopped", "INFO") # if download has not been completed yet, # so just chang status of download to "stopped" in data base. else: answer = 'stopped' if status != 'complete': # change start_time end_time and after_download value to None in date base main_window.persepolis_db.setDefaultGidInAddlinkTable(gid, start_time=True, end_time=True, after_download=True) # change status of download to "stopped" in data base dict_ = {'gid': gid, 'status': 'stopped'} main_window.persepolis_db.updateDownloadTable([dict_]) return answer # downloadPause pauses download def downloadPause(gid, main_window): # see aria2 documentation for more information # send pause request to aria2 . try: answer = server.aria2.pause(gid) except Exception as error: logger.sendToLog(str(error), "ERROR") # stop download downloadStop(gid, main_window) answer = None logger.sendToLog(str(answer) + " paused", "INFO") return answer # downloadUnpause unpauses download def downloadUnpause(gid): try: # send unpause request to aria2 answer = server.aria2.unpause(gid) except Exception as error: logger.sendToLog(str(error), "ERROR") answer = None logger.sendToLog(str(answer) + " unpaused", "INFO") return answer # limitSpeed limits download speed def limitSpeed(gid, limit): limit = str(limit) # convert Mega to Kilo, RPC does not Support floating point numbers. if limit != '0': limit_number = limit[:-1] limit_number = float(limit_number) limit_unit = limit[-1] if limit_unit == 'K': limit_number = round(limit_number) else: limit_number = round(1024 * limit_number) limit_unit = 'K' limit = str(limit_number) + limit_unit try: server.aria2.changeOption(gid, {'max-download-limit': limit}) logger.sendToLog("Download speed limit value is changed", "INFO") except: logger.sendToLog("Speed limitation was unsuccessful", "ERROR") # this function returns GID of active downloads in list format. def activeDownloads(): try: answer = server.aria2.tellActive(['gid']) except: answer = [] active_gids = [] for i in answer: # extract gid from dictionary dict_ = i gid = dict_['gid'] # add gid to list active_gids.append(gid) # return results return active_gids # This function returns data and time in string format # for example >> 2017/09/09 , 13:12:26 def nowDate(): date = time.strftime("%Y/%m/%d , %H:%M:%S") return date # sigmaTime gets hours and minutes for input. # and converts hours to minutes and returns summation in minutes # input format is HH:MM def sigmaTime(time): hour, minute = time.split(":") return (int(hour) * 60 + int(minute)) # nowTime returns now time in HH:MM format! def nowTime(): now_time = time.strftime("%H:%M") return sigmaTime(now_time) # this function creates sleep time,if user sets "start time" for download. def startTime(start_time, gid, parent): # write some messages logger.sendToLog("Download starts at " + start_time, "INFO") # start_time that specified by user sigma_start = sigmaTime(start_time) # get current time sigma_now = nowTime() status = 'scheduled' # this loop is continuing until download time arrival! while sigma_start != sigma_now: time.sleep(2.1) sigma_now = nowTime() # check download status from data_base dict_ = parent.persepolis_db.searchGidInDownloadTable(gid) data_base_download_status = dict_['status'] # if data_base_download_status = stopped >> it means that user # canceled download and loop must break! if data_base_download_status == 'stopped': status = 'stopped' break else: status = 'scheduled' # if user canceled download , then return 'stopped' and if download time arrived then return 'scheduled'! return status def endTime(end_time, gid, parent): logger.sendToLog("End time is activated " + gid, "INFO") sigma_end = sigmaTime(end_time) # get current time sigma_now = nowTime() answer = 'end' # while current time is not equal to end_time, continue the loop while sigma_end != sigma_now: # get download status from data_base dict_ = parent.persepolis_db.searchGidInDownloadTable(gid) status = dict_['status'] # check download status if status == 'scheduled' or status == 'downloading' or status == 'paused' or status == 'waiting': # download continues! answer = 'continue' else: # Download completed or stopped by user # so break the loop answer = 'end' logger.sendToLog("Download has been finished! " + str(gid), "INFO") break # get current time sigma_now = nowTime() time.sleep(2.1) # Time is up! if answer != 'end': logger.sendToLog("Time is up!", "INFO") answer = downloadStop(gid, parent) i = 0 # try to stop download 10 times while answer == 'None' and (i <= 9): time.sleep(1) answer = downloadStop(gid, parent) i = i + 1 # If aria2c not respond, so kill it. R.I.P :)) if (answer == 'None') and (os_type != OS.WINDOWS): subprocess.Popen(['killall', 'aria2c'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # change end_time value to None in data_base parent.persepolis_db.setDefaultGidInAddlinkTable(gid, end_time=True) persepolisdm-persepolis-867ee76/persepolis/scripts/error_window.py000066400000000000000000000074671464161131600257470ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # try: from PySide6.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QHBoxLayout, QPushButton, QLabel from PySide6.QtGui import QIcon from PySide6.QtCore import Qt, QSize, QSettings except: from PyQt5.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QHBoxLayout, QPushButton, QLabel from PyQt5.QtCore import Qt, QSize, QSettings from PyQt5.QtGui import QIcon from persepolis.scripts.data_base import PersepolisDB from persepolis.scripts import osCommands from persepolis.gui import resources class ErrorWindow(QWidget): def __init__(self, text): super().__init__() # finding windows_size self.setMinimumSize(QSize(363, 300)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/com.github.persepolisdm.persepolis.svg'))) self.setWindowTitle('Persepolis Download Manager') verticalLayout = QVBoxLayout(self) horizontalLayout = QHBoxLayout() horizontalLayout.addStretch(1) self.text_edit = QTextEdit(self) self.text_edit.setReadOnly(True) self.text_edit.insertPlainText(text) verticalLayout.addWidget(self.text_edit) self.label2 = QLabel(self) self.label2.setText('Reseting persepolis may solving problem.\nDo not panic!If you add your download links again,\npersepolis will resume your downloads\nPlease copy this error message and press "Report Issue" button\nand open a new issue in Github for it.\nWe answer you as soon as possible. \nreporting this issue help us to improve persepolis.\nThank you!') verticalLayout.addWidget(self.label2) self.report_pushButton = QPushButton(self) self.report_pushButton.setText("Report Issue") horizontalLayout.addWidget(self.report_pushButton) self.reset_persepolis_pushButton = QPushButton(self) self.reset_persepolis_pushButton.clicked.connect( self.resetPushButtonPressed) self.reset_persepolis_pushButton.setText('Reset Persepolis') horizontalLayout.addWidget(self.reset_persepolis_pushButton) self.close_pushButton = QPushButton(self) self.close_pushButton.setText('close') horizontalLayout.addWidget(self.close_pushButton) verticalLayout.addLayout(horizontalLayout) self.report_pushButton.clicked.connect(self.reportPushButtonPressed) self.close_pushButton.clicked.connect(self.closePushButtonPressed) def reportPushButtonPressed(self, button): osCommands.xdgOpen('https://github.com/persepolisdm/persepolis/issues') # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closePushButtonPressed(self, button): self.close() def resetPushButtonPressed(self, button): # create an object for PersepolisDB persepolis_db = PersepolisDB() # Reset data base persepolis_db.resetDataBase() # close connections persepolis_db.closeConnections() # Reset persepolis_setting persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') persepolis_setting.clear() persepolis_setting.sync() persepolisdm-persepolis-867ee76/persepolis/scripts/initialization.py000066400000000000000000000163771464161131600262560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # THIS FILE CONTAINING SOME VARIABLES , ... THAT USING FOR INITIALIZING PERSEPOLIS from persepolis.scripts.data_base import PersepolisDB, PluginsDB from persepolis.scripts import logger from persepolis.scripts.useful_tools import determineConfigFolder, returnDefaultSettings from persepolis.scripts.browser_integration import browserIntegration from persepolis.scripts import osCommands import time import os try: from PySide6.QtCore import QSettings except: from PyQt5.QtCore import QSettings # initialization # download manager config folder . config_folder = determineConfigFolder() # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') # create folders for folder in [config_folder, persepolis_tmp]: osCommands.makeDirs(folder) # persepolisdm.log file contains persepolis log. # refresh logs! log_file = os.path.join(str(config_folder), 'persepolisdm.log') # get current time current_time = time.strftime('%Y/%m/%d %H:%M:%S') # find number of lines in log_file. with open(log_file) as f: lines = sum(1 for _ in f) # if number of lines in log_file is more than 300, then keep last 200 lines in log_file. if lines < 300: f = open(log_file, 'a') f.writelines('===================================================\n' + 'Persepolis Download Manager, ' + current_time + '\n') f.close() else: # keep last 200 lines line_num = lines - 200 f = open(log_file, 'r') f_lines = f.readlines() f.close() line_counter = 1 f = open(log_file, 'w') for line in f_lines: if line_counter > line_num: f.writelines(str(line)) line_counter = line_counter + 1 f.close() f = open(log_file, 'a') f.writelines('Persepolis Download Manager, ' + current_time + '\n') f.close() # create an object for PersepolisDB persepolis_db = PersepolisDB() # create tables persepolis_db.createTables() # close connections persepolis_db.closeConnections() # create an object for PluginsDB plugins_db = PluginsDB() # create tables plugins_db.createTables() # delete old links plugins_db.deleteOldLinks() # close connections plugins_db.closeConnections() # import persepolis_setting # persepolis is using QSettings for saving windows size and windows # position and program settings. persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') persepolis_setting.beginGroup('settings') default_setting_dict = returnDefaultSettings() # this loop is checking values in persepolis_setting . if value is not # valid then value replaced by default_setting_dict value for key in default_setting_dict.keys(): setting_value = persepolis_setting.value(key, default_setting_dict[key]) persepolis_setting.setValue(key, setting_value) # set default dwonload path if not (os.path.exists(persepolis_setting.value('download_path'))): persepolis_setting.setValue('download_path', default_setting_dict['download_path']) persepolis_setting.sync() # Create downloads folder and subfolders. # download sub folders if they did not existed. download_path = persepolis_setting.value('download_path') folder_list = [download_path] # add subfolders to folder_list if user checked subfolders check box in setting window. if persepolis_setting.value('subfolder') == 'yes': for folder in ['Audios', 'Videos', 'Others', 'Documents', 'Compressed']: folder_list.append(os.path.join(download_path, folder)) # create folders in folder_list for folder in folder_list: osCommands.makeDirs(folder) persepolis_setting.endGroup() # Browser integration for Firefox and chromium and google chrome for browser in ['chrome', 'chromium', 'opera', 'vivaldi', 'firefox', 'brave']: json_done, native_done, log_message2 = browserIntegration(browser) log_message = browser if json_done is True: log_message = log_message + ': ' + 'Json file is created successfully.\n' else: log_message = log_message + ': ' + 'Json ERROR!\n' if native_done is True: log_message = log_message + 'persepolis executer file is created successfully.\n' elif native_done is False: log_message = log_message + ': ' + 'persepolis executer file ERROR!\n' logger.sendToLog(log_message) logger.sendToLog(log_message2[0], log_message2[1]) # get locale and set ui direction locale = str(persepolis_setting.value('settings/locale')) # right to left languages rtl_locale_list = ['fa_IR', 'ar'] # left to right languages ltr_locale_list = ['en_US', 'zh_CN', 'fr_FR', 'pl_PL', 'nl_NL', 'pt_BR', 'es_ES', 'hu', 'tr', 'tr_TR'] if locale in rtl_locale_list: persepolis_setting.setValue('ui_direction', 'rtl') else: persepolis_setting.setValue('ui_direction', 'ltr') # compatibility persepolis_version = float(persepolis_setting.value('version/version', 2.5)) if persepolis_version < 2.6: from persepolis.scripts.compatibility import compatibility try: compatibility() except Exception as e: # create an object for PersepolisDB persepolis_db = PersepolisDB() # create tables persepolis_db.resetDataBase() # close connections persepolis_db.closeConnections() # write error in log logger.sendToLog( "compatibility ERROR!", "ERROR") logger.sendToLog( str(e), "ERROR") persepolis_version = 2.6 if persepolis_version < 3.1: # create an object for PersepolisDB persepolis_db = PersepolisDB() # correct data base persepolis_db.correctDataBase() # close connections persepolis_db.closeConnections() persepolis_version = 3.1 if persepolis_version < 4.0: persepolis_setting.beginGroup('settings') for key in default_setting_dict.keys(): setting_value = default_setting_dict[key] persepolis_setting.setValue(key, setting_value) persepolis_setting.endGroup() if persepolis_version < 4.1: # create an object for PersepolisDB persepolis_db = PersepolisDB() # correct data base persepolis_db.correctDataBaseForVersion410() # close connections persepolis_db.closeConnections() persepolis_setting.setValue('version/version', 4.1) if persepolis_version < 4.11: # create an object for PersepolisDB persepolis_db = PersepolisDB() # correct data base persepolis_db.correctDataBaseForVersion411() # close connections persepolis_db.closeConnections() persepolis_setting.setValue('version/version', 4.11) persepolis_setting.setValue('version/version', 4.2) persepolis_setting.setValue('version/version', 4.3) persepolis_setting.sync() persepolisdm-persepolis-867ee76/persepolis/scripts/log_window.py000066400000000000000000000112111464161131600253550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from persepolis.scripts.useful_tools import determineConfigFolder from persepolis.gui.log_window_ui import LogWindow_Ui from persepolis.scripts import osCommands import os try: from PySide6.QtCore import Qt, QPoint, QSize from PySide6.QtGui import QIcon from PySide6 import QtWidgets except: from PyQt5.QtCore import Qt, QPoint, QSize from PyQt5.QtGui import QIcon from PyQt5 import QtWidgets # config_folder config_folder = determineConfigFolder() class LogWindow(LogWindow_Ui): def __init__(self, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.copy_log_pushButton.setEnabled(False) # log file address self.log_file = os.path.join(str(config_folder), 'persepolisdm.log') f = open(self.log_file, 'r') f_lines = f.readlines() f.close() self.text = 'Log File:\n' for line in f_lines: self.text = self.text + str(line) + '\n' self.text_edit.insertPlainText(self.text) self.text_edit.copyAvailable.connect( self.copyAvailableSignalHandler) self.copy_log_pushButton.clicked.connect( self.copyPushButtonPressed) self.report_pushButton.clicked.connect( self.reportPushButtonPressed) self.close_pushButton.clicked.connect( self.closePushButtonPressed) self.refresh_log_pushButton.clicked.connect( self.refreshLogPushButtonPressed) self.clear_log_pushButton.clicked.connect( self.clearLogPushButtonPressed) # setting window size and position size = self.persepolis_setting.value( 'LogWindow/size', QSize(720, 300)) position = self.persepolis_setting.value( 'LogWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) self.minimum_height = self.height() def clearLogPushButtonPressed(self, button): f = open(self.log_file, 'w') f.close() self.text = 'Log File:\n' self.text_edit.clear() self.text_edit.insertPlainText(self.text) def reportPushButtonPressed(self, button): osCommands.xdgOpen('https://github.com/persepolisdm/persepolis/issues') def closePushButtonPressed(self, button): self.close() def copyAvailableSignalHandler(self, signal): if signal: self.copy_log_pushButton.setEnabled(True) else: self.copy_log_pushButton.setEnabled(False) def copyPushButtonPressed(self, button): # clipboard = QApplication.clipboard() # clipboard.setText(self.text) self.text_edit.copy() # this method is refresh log messages in text_edit def refreshLogPushButtonPressed(self, button): f = open(self.log_file, 'r') f_lines = f.readlines() f.close() self.text = 'Log File:\n' for line in f_lines: self.text = self.text + str(line) + '\n' self.text_edit.clear() self.text_edit.insertPlainText(self.text) # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): self.layout().setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) self.setMinimumSize(QSize(self.width(), self.minimum_height)) self.resize(QSize(self.width(), self.minimum_height)) self.persepolis_setting.setValue('LogWindow/size', self.size()) self.persepolis_setting.setValue('LogWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.close_pushButton.setIcon(QIcon(icons + 'remove')) self.copy_log_pushButton.setIcon(QIcon(icons + 'clipboard')) self.report_pushButton.setIcon(QIcon(icons + 'about')) self.refresh_log_pushButton.setIcon(QIcon(icons + 'refresh')) persepolisdm-persepolis-867ee76/persepolis/scripts/logger.py000066400000000000000000000033551464161131600244760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from persepolis.scripts.useful_tools import determineConfigFolder from persepolis.scripts.osCommands import touch import logging import os # config_folder config_folder = determineConfigFolder() # create a directory if it does not exist if not os.path.exists(config_folder): os.makedirs(config_folder) # log file address log_file = os.path.join(str(config_folder), 'persepolisdm.log') if not os.path.isfile(log_file): touch(log_file) # define logging object logObj = logging.getLogger("Persepolis") logObj.setLevel(logging.INFO) # don't show log in console logObj.propagate = False # create a file handler handler = logging.FileHandler(log_file) handler.setLevel(logging.INFO) # create a logging format formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # add the handlers to the logger logObj.addHandler(handler) def sendToLog(text="", type="INFO"): if type == "INFO": logObj.info(text) elif type == "ERROR": logObj.error(text) else: logObj.warning(text) persepolisdm-persepolis-867ee76/persepolis/scripts/mainwindow.py000066400000000000000000007661661464161131600254130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . import os import ast import sys import time import random import requests import tempfile import subprocess import urllib.parse from time import sleep from copy import deepcopy from functools import partial from persepolis.constants import OS from persepolis.gui import resources from persepolis.scripts import spider from persepolis.scripts import logger from persepolis.scripts import download from persepolis.scripts import osCommands from persepolis.scripts.bubble import notifySend from persepolis.scripts.about import AboutWindow from persepolis.scripts.shutdown import shutDown from persepolis.scripts.log_window import LogWindow from persepolis.scripts.text_queue import TextQueue from persepolis.scripts.addlink import AddLinkWindow from persepolis.scripts.progress import ProgressWindow from persepolis.scripts.setting import PreferencesWindow from persepolis.scripts.properties import PropertiesWindow from persepolis.scripts.after_download import AfterDownloadWindow from persepolis.scripts.browser_plugin_queue import BrowserPluginQueue from persepolis.scripts.data_base import PluginsDB, PersepolisDB, TempDB from persepolis.gui.mainwindow_ui import MainWindow_Ui, QTableWidgetItem from persepolis.scripts.video_finder_progress import VideoFinderProgressWindow from persepolis.scripts.useful_tools import muxer, freeSpace, determineConfigFolder, osAndDesktopEnvironment, getExecPath, ffmpegVersion, socks5ToHttpConvertorVersion global pyside6_is_installed try: from PySide6.QtWidgets import QCheckBox, QLineEdit, QAbstractItemView, QFileDialog, QSystemTrayIcon, QMenu, QApplication, QInputDialog, QMessageBox from PySide6.QtCore import QDir, QTime, QCoreApplication, QSize, QPoint, QThread, Signal, Qt, QTranslator, QLocale from PySide6.QtGui import QFont, QIcon, QStandardItem, QCursor, QAction from PySide6 import __version__ as PYQT_VERSION_STR from PySide6.QtCore import __version__ as QT_VERSION_STR pyside6_is_installed = True except: from PyQt5.QtWidgets import QCheckBox, QLineEdit, QAbstractItemView, QAction, QFileDialog, QSystemTrayIcon, QMenu, QApplication, QInputDialog, QMessageBox from PyQt5.QtCore import QDir, QTime, QCoreApplication, QSize, QPoint, QThread, Qt, QTranslator, QLocale, QT_VERSION_STR from PyQt5.QtGui import QFont, QIcon, QStandardItem, QCursor from PyQt5.Qt import PYQT_VERSION_STR from PyQt5.QtCore import pyqtSignal as Signal pyside6_is_installed = False global youtube_dl_is_installed try: from persepolis.scripts.video_finder_addlink import VideoFinderAddLink youtube_dl_is_installed = True except ModuleNotFoundError: # if youtube_dl module is not installed: logger.sendToLog( "yt-dlp is not installed.", "ERROR") youtube_dl_is_installed = False # CheckVersionsThread thread can change this variables. global ffmpeg_is_installed ffmpeg_is_installed = False global socks5_to_http_convertor_is_installed socks5_to_http_convertor_is_installed = False # The GID (or gid) is a key to manage each download. Each download will be assigned a unique GID. # The GID is stored as 64-bit binary value in aria2. For RPC access, # it is represented as a hex string of 16 characters (e.g., 2089b05ecca3d829). # Normally, aria2 generates this GID for each download, but the user can # specify GIDs manually # shutdown_notification = 0 >> persepolis is running # 1 >> persepolis is ready for closing(closeEvent is called) # 2 >> OK, let's close application! global shutdown_notification shutdown_notification = 0 # checking_flag : 0 >> normal situation ; # 1 >> remove button or delete button pressed or sorting form viewMenu or ... toggled by user ; # 2 >> check_download_info function is stopping until remove operation done ; # 3 >> deleteFileAction is done it's job and It is called removeButtonPressed. global checking_flag checking_flag = 0 # when rpc connection between persepolis and aria is disconnected >> # aria2_disconnected = 1 # aria2_disconnected = 0 >> every thing is ok :) global aria2_disconnected aria2_disconnected = 0 global aria_startup_answer aria_startup_answer = None global button_pressed_counter button_pressed_counter = 0 global plugin_links_checked plugin_links_checked = False # find os platform os_type, desktop_env = osAndDesktopEnvironment() # config_folder config_folder = determineConfigFolder() download_info_folder = os.path.join(config_folder, "download_info") # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') # see persepolis.py file for show_window_file and plugin_ready plugin_ready = os.path.join(persepolis_tmp, 'persepolis-plugin-ready') show_window_file = os.path.join(persepolis_tmp, 'show-window') # this thread checks ffmpeg and gost availability. # this thread checks ffmpeg and python and pyqt and qt versions and write them in log file. # this thread writes os type and desktop env. in log file. class CheckVersionsThread(QThread): TYPEOFCONVERTORSIGNAL = Signal(str) def __init__(self, parent): QThread.__init__(self) self.parent = parent def run(self): global ffmpeg_is_installed # check ffmpeg version ffmpeg_is_installed, ffmpeg_output, ffmpeg_command_log_list = ffmpegVersion() logger.sendToLog(ffmpeg_command_log_list[0], ffmpeg_command_log_list[1]) logger.sendToLog(ffmpeg_output, "INFO") global socks5_to_http_convertor_is_installed # check socks5_to_http_convertor version socks5_to_http_convertor_is_installed, socks5_to_http_convertor_output, socks5_to_http_convertor_command_log_list, type_of_convertor = socks5ToHttpConvertorVersion() logger.sendToLog(socks5_to_http_convertor_command_log_list[0], socks5_to_http_convertor_command_log_list[1]) logger.sendToLog(socks5_to_http_convertor_output, "INFO") # log python version logger.sendToLog('python version: ' + str(sys.version)) # log qt version logger.sendToLog('QT version: ' + str(QT_VERSION_STR)) # log pyqt version if pyside6_is_installed: madule_str = 'PySide version: ' else: madule_str = 'PyQt version: ' logger.sendToLog(madule_str + str(PYQT_VERSION_STR)) # log os and desktop env. logger.sendToLog('Operating system: ' + os_type) # windows and mac haven't desktop_env if desktop_env: logger.sendToLog('Desktop env.: ' + str(desktop_env)) if type_of_convertor: self.TYPEOFCONVERTORSIGNAL.emit(type_of_convertor) # check clipboard class CheckClipBoardThread(QThread): CHECKCLIPBOARDSIGNAL = Signal() def __init__(self, parent): QThread.__init__(self) global shutdown_notification def run(self): # shutdown_notification = 0 >> persepolis is running # 1 >> persepolis is ready for closing(closeEvent called) # 2 >> OK, let's close application! while shutdown_notification == 0 and aria_startup_answer != 'ready': sleep(1) clipboard = QApplication.clipboard() old_clipboard = "" while shutdown_notification == 0: sleep(0.5) new_clipboard = clipboard.text() if (new_clipboard != old_clipboard) and (new_clipboard != ""): self.CHECKCLIPBOARDSIGNAL.emit() old_clipboard = new_clipboard # check if any thing in clipboard or not class CheckClipboardStateThread(QThread): WINDOWISACTIVESIGNAL = Signal() def __init__(self): QThread.__init__(self) def run(self): while (QApplication.clipboard().text() == ""): sleep(0.1) self.WINDOWISACTIVESIGNAL.emit() # check for newer version of Persepolis class CheckNewerVersionThread(QThread): NEWVERSIONISAVAILABLESIGNAL = Signal(str) def __init__(self, parent): QThread.__init__(self) # get current_version from QSettings self.current_version = parent.persepolis_setting.value('version/version') def run(self): try: # get information dictionary from github updatesource = requests.get('https://persepolisdm.github.io/version', timeout=5) updatesource_text = updatesource.text updatesource_dict = ast.literal_eval(updatesource_text) # get latest stable version server_version = updatesource_dict['version'] # Comparison if float(server_version) > float(self.current_version): self.NEWVERSIONISAVAILABLESIGNAL.emit(str(server_version)) except Exception as e: logger.sendToLog("An error occurred while checking for a new release:") logger.sendToLog("{}".format(str(e))) # start aria2 when Persepolis starts class StartAria2Thread(QThread): ARIA2RESPONDSIGNAL = Signal(str) def __init__(self, parent): QThread.__init__(self) self.main_window = parent self.process = None def restartAria2c(self): # kill process and create new process again if self.process: self.process.kill() self.process.communicate() sleep(1) self.run() def run(self): # aria_startup_answer is None when Persepolis starts! and after # ARIA2RESPONDSIGNAL emitting yes , then startAriaMessage function # changing aria_startup_answer to 'Ready' # ARIA2RESPONDSIGNAL have 3 conditions >>> # 1. no (aria didn't respond) 2. yes(aria is respond) 3.try again(Persepolis retry to connecting aria2) global aria_startup_answer # check that aria2 is running or not! answer = download.aria2Version() # if Aria2 wasn't started before, so start it! if answer == 'did not respond': # write in log file. logger.sendToLog("Starting Aria2", "INFO") # try 5 time if aria2 doesn't respond! for i in range(5): self.process, answer = download.startAria(self) if answer == 'did not respond' and i != 4: signal_str = 'try again' self.ARIA2RESPONDSIGNAL.emit(signal_str) sleep(2) else: break # if Aria2 doesn't respond to Persepolis ,ARIA2RESPONDSIGNAL is # emitting no if answer == 'did not respond': signal_str = 'no' else: # Aria2 is responding :) signal_str = 'yes' logger.sendToLog("Aria2 is running", "INFO") logger.sendToLog("Aria2 version: " + answer['version'], "INFO") # emit the signal # ARIA2RESPONDSIGNAL have 3 conditions >>> # 1. no (aria didn't respond) 2. yes(aria is respond) 3.try again(Persepolis retry to connecting aria2) self.ARIA2RESPONDSIGNAL.emit(signal_str) # This thread checking that which row in download_table highlighted by user class CheckSelectedRowThread(QThread): CHECKSELECTEDROWSIGNAL = Signal() def __init__(self): QThread.__init__(self) def run(self): while shutdown_notification == 0 and aria_startup_answer != 'ready': sleep(1) while shutdown_notification == 0: sleep(0.2) self.CHECKSELECTEDROWSIGNAL.emit() # This thread is getting download information from aria2 and updating database # this class is checking aria2 rpc connection! if aria rpc is not # available , this class restarts aria! class CheckDownloadInfoThread(QThread): DOWNLOAD_INFO_SIGNAL = Signal(list) RECONNECTARIASIGNAL = Signal(str) def __init__(self, parent): QThread.__init__(self) self.parent = parent def run(self): global checking_flag global shutdown_notification while True: # shutdown_notification = 0 >> persepolis is running # 1 >> persepolis is ready for closing(closeEvent called) # 2 >> OK, let's close application! # checking_flag : 0 >> normal situation ; # 1 >> remove button or delete button pressed or sorting form viewMenu selected by user ; # 2 >> check_download_info function is stopping until remove operation done ; # 3 >> deleteFileAction is done it's job and It is called removeButtonPressed. # wait until aria gets ready!(see StartAria2Thread for more information) while shutdown_notification == 0 and aria_startup_answer != 'ready': sleep(1) # data base is updated one time in five times. update_data_base = False update_data_base_counter = 0 while shutdown_notification != 1: sleep(0.2) # if checking_flag is equal to 1, it means that user pressed # remove or delete button . so checking download information # must stop until removing is done! It avoids possibility of crashing! if checking_flag == 1: # Ok loop is stopped! checking_flag = 2 # check that when job is done! while checking_flag != 0: sleep(0.2) # lets getting downloads information from aria and putting them in download_status_list! # find gid of active downloads first! (get them from data base) # output of this method is a list of gid active_gid_list = self.parent.temp_db.returnActiveGids() # get download status of active downloads from aria2 # download_status_list is a list that contains some dictionaries. # every dictionary contains download information. # gid_list is a list that contains gid of downloads in download_status_list. # see download.py file for more information. gid_list, download_status_list = download.tellActive() try: for gid in active_gid_list: # if gid not in gid_list, so download is completed or stopped or error occurred! # because aria2 returns active downloads status with tellActive function in download.py file. # and complete or stopped or errored downloads are not active downloads. # so we must get download information with tellStatus function. # see download.py file (tellStatus and tellActive functions) for more information. # if aria doesn't not return download information with tellStatus and tellActive, # then perhaps some error occurred.so download information must be in data_base. if gid not in gid_list: returned_dict = download.tellStatus(gid, self.parent) if returned_dict: download_status_list.append(returned_dict) update_data_base = True else: # check data_base returned_dict = self.parent.persepolis_db.searchGidInDownloadTable(gid) download_status_list.append(returned_dict) # if returned_dict in None, check for availability of RPC connection. if not (returned_dict): self.reconnectAria() continue if not (download_status_list): download_status_list = [] # now we have a list that contains download information (download_status_list) # lets update download table in main window and update data base! # first emit a signal for updating MainWindow. self.DOWNLOAD_INFO_SIGNAL.emit(download_status_list) # data base is updated 1 time in 5 times. if update_data_base_counter == 4: update_data_base = True else: update_data_base_counter = update_data_base_counter + 1 # update data base! if update_data_base: self.parent.persepolis_db.updateDownloadTable(download_status_list) # data base is updated 1 time in 5 times. update_data_base = False update_data_base_counter = -1 except: # continue the loop if any error occurred. self.reconnectAria() continue # Ok exit loop! get ready for shutting down! shutdown_notification = 2 break # when rpc connection between persepolis and aria is # disconnected then aria2_disconnected = 1 def reconnectAria(self): global aria2_disconnected aria2_disconnected = 0 # check aria2 availability by aria2Version function(see download.py file fore more information) answer = download.aria2Version() if answer == 'did not respond': # so aria2 connection in disconnected! # lets try to reconnect aria 5 times! for i in range(5): answer = download.startAria(self) # start aria2 if answer == 'did not respond' and i != 4: # check answer sleep(2) else: # emit answer. # if answer is 'did not respond', it means that reconnecting aria was not successful self.RECONNECTARIASIGNAL.emit(str(answer)) break # SpiderThread calls spider in spider.py . # spider finds file size and file name of download file . # spider works similar to spider in wget. class SpiderThread(QThread): SPIDERSIGNAL = Signal(dict) def __init__(self, add_link_dictionary, parent): QThread.__init__(self) self.add_link_dictionary = add_link_dictionary self.parent = parent def run(self): try: # get file_name and file size with spider file_name, size = spider.spider(self.add_link_dictionary) # update data base dictionary = {'file_name': file_name, 'size': size, 'gid': self.add_link_dictionary['gid']} self.parent.persepolis_db.updateDownloadTable([dictionary]) # update table in MainWindow self.SPIDERSIGNAL.emit(dictionary) except: # write ERROR message logger.sendToLog( "Spider couldn't find download information", "ERROR") # this thread sending download request to aria2 class DownloadLink(QThread): ARIA2NOTRESPOND = Signal() def __init__(self, gid, parent): QThread.__init__(self) self.gid = gid self.parent = parent def run(self): # add gid of download to the active gids in temp_db # or update data base , if it was existed before try: self.parent.temp_db.insertInSingleTable(self.gid) except: # release lock self.parent.temp_db.lock = False dictionary = {'gid': self.gid, 'status': 'active'} self.parent.temp_db.updateSingleTable(dictionary) # check aria2c availability first. then send the download request to aria2c version_answer = download.aria2Version() if version_answer == 'did not respond': answer = download.downloadStop(self.gid, self.parent) self.ARIA2NOTRESPOND.emit() return answer else: # if request is not successful then persepolis is checking rpc # connection with download.aria2Version() function answer = download.downloadAria(self, self.gid, self.parent) if answer is False: version_answer = download.aria2Version() if version_answer == 'did not respond': self.ARIA2NOTRESPOND.emit() # Persepolis download audio and video separately and the muxing them :) # VideoFinder do this duty for Persepolis. # see data_base.py for understanding the code # we have video_finder_db_table in data base. it's contains some items that helps # VideoFinder for managing the situation. # video_gid >> GID of video link # audio_gid >> GID of audio link # video_completed >> Is video downloaded completely? # audio_completed >> Is audio downloaded completely? # checking >> VideoFinder must checking or not! class VideoFinder(QThread): VIDEOFINDERCOMPLETED = Signal(dict) def __init__(self, video_finder_dictionary, parent): QThread.__init__(self) self.parent = parent self.video_finder_dictionary = video_finder_dictionary # First: Download video # Second: Download audio # Third: Mux video and audio def run(self): self.video_completed = self.video_finder_dictionary['video_completed'] self.audio_completed = self.video_finder_dictionary['audio_completed'] self.muxing = 'no' self.checking = 'no' self.active = 'yes' video_gid = self.video_finder_dictionary['video_gid'] audio_gid = self.video_finder_dictionary['audio_gid'] # find category dictionary = self.parent.persepolis_db.searchGidInDownloadTable(video_gid) category = dictionary['category'] # VideoFinder handles downloads by itself, if category is "Single Downloads" if category == 'Single Downloads': # create an item for this thread in temp_db if not exists! try: video_finder_plus_gid = 'video_finder_' + str(video_gid) self.parent.temp_db.insertInQueueTable(video_finder_plus_gid) except: # release lock self.parent.temp_db.lock = False # check start time and end time add_link_dictionary = self.parent.persepolis_db.searchGidInAddLinkTable(video_gid) start_time = add_link_dictionary['start_time'] if self.video_completed == 'no' and start_time: # set start time only for video and cancel start time for audio. # because video will downloaded first and start time must be set for first video! not second one self.parent.persepolis_db.setDefaultGidInAddlinkTable(audio_gid, start_time=True) # update checking status in data base for starting the job! self.checking = 'yes' self.video_finder_dictionary['checking'] = 'yes' self.parent.persepolis_db.updateVideoFinderTable([self.video_finder_dictionary]) # if category "Single Downloads" >> manage download yourself. # if category is not "Single Download" >> just check the status time to time and wait until download ends! if self.video_completed == 'no': if category == "Single Downloads": # start video downloading new_download = DownloadLink(video_gid, self.parent) self.parent.threadPool.append(new_download) self.parent.threadPool[-1].start() self.parent.threadPool[-1].ARIA2NOTRESPOND.connect(self.parent.aria2NotRespond) # check the download status # continue loop and check the download status # if checking == 'no' >> problem occurred and downloading canceled. while self.video_completed != 'yes' and self.checking == 'yes': sleep(1) if self.video_completed == 'yes': if self.video_finder_dictionary['video_completed'] == 'no': # update data base self.video_finder_dictionary['video_completed'] = 'yes' self.parent.persepolis_db.updateVideoFinderTable([self.video_finder_dictionary]) # video is downloaded completely! # let's start audio downloading if self.audio_completed == 'no': # if category "Single Downloads" >> start download yourself. # if category is not "Single Download" >> just check the status time to time if category == "Single Downloads": new_download = DownloadLink(audio_gid, self.parent) self.parent.threadPool.append(new_download) self.parent.threadPool[-1].start() self.parent.threadPool[-1].ARIA2NOTRESPOND.connect(self.parent.aria2NotRespond) # check the download status # continue loop and check the download status # if checking == 'no' >> problem occurred and downloading canceled. while self.audio_completed != 'yes' and self.checking == 'yes': sleep(1) self.checking = 'no' # lets start muxing! if self.video_completed == 'yes' and self.audio_completed == 'yes': self.video_finder_dictionary['audio_completed'] = 'yes' self.video_finder_dictionary['checking'] = 'no' self.video_finder_dictionary['muxing_status'] = 'started' self.muxing = 'started' # update data base self.parent.persepolis_db.updateVideoFinderTable([self.video_finder_dictionary]) # audio and video files are downloaded completely. # lets start muxing result_dictionary = muxer(self.parent, self.video_finder_dictionary) error_message = result_dictionary['error'] ffmpeg_error_message = result_dictionary['ffmpeg_error_message'] if ffmpeg_error_message: logger.sendToLog('ffmpeg error: ' + str(ffmpeg_error_message), 'ERROR') if error_message == 'no error': self.video_finder_dictionary['muxing_status'] = 'complete' self.muxing = 'complete' else: self.video_finder_dictionary['muxing_status'] = 'error' self.muxing = 'error' # update data base self.parent.persepolis_db.updateVideoFinderTable([self.video_finder_dictionary]) complete_dictionary = {'error': error_message, 'final_path': result_dictionary['final_path'], 'final_size': result_dictionary['final_size'], 'video_gid': self.video_finder_dictionary['video_gid'], 'audio_gid': self.video_finder_dictionary['audio_gid'], 'download_path': self.video_finder_dictionary['download_path'], 'category': category} # emit error_message self.VIDEOFINDERCOMPLETED.emit(complete_dictionary) self.active = 'no' if category == 'Single Downloads': # check if user selected shutdown after download in progress window. shutdown_dict = self.parent.temp_db.returnCategory(video_finder_plus_gid) shutdown_status = shutdown_dict['shutdown'] if shutdown_status == 'wait': # it means user want to persepolis shutdown system after download. # write 'shutdown' value for this category in temp_db shutdown_dict = {'category': video_finder_plus_gid, 'shutdown': 'shutdown'} self.parent.temp_db.updateQueueTable(shutdown_dict) # this thread is managing queue and sending download request to aria2 class Queue(QThread): # this signal emitted when download status of queue changes to stop REFRESHTOOLBARSIGNAL = Signal(str) def __init__(self, category, start_time, end_time, parent): QThread.__init__(self) self.category = str(category) self.parent = parent self.start_time = start_time self.end_time = end_time def run(self): self.start = True self.stop = False self.limit = False self.limit_changed = False self.after = False self.break_for_loop = False queue_counter = 0 # this list contains gid_list of all active video finder in queue. video_finder_list = [] # queue repeats 5 times! # and every time loads queue list again! # It is helps for checking new downloads in queue # and retrying failed downloads. for counter in range(5): # read downloads information from data base download_table_dict = self.parent.persepolis_db.returnItemsInDownloadTable(self.category) category_table_dict = self.parent.persepolis_db.searchCategoryInCategoryTable(self.category) gid_list = category_table_dict['gid_list'] # sort downloads top to the bottom of the list OR bottom to the top if not (self.parent.reverse_checkBox.isChecked()): gid_list.reverse() # check that if user set start time if self.start_time and counter == 0: # find first download # set start time for first download in queue # status of first download must not be complete for gid in gid_list: # get download information dictionary dictionary = download_table_dict[gid] # find status of download status = dictionary['status'] if status != 'complete': # We find first item! GREAT! add_link_dict = {'gid': gid} # set start_time for this download add_link_dict['start_time'] = self.start_time # write changes in data base self.parent.persepolis_db.updateAddLinkTable([add_link_dict]) # delete add_link_dict del add_link_dict # job is done! break the loop break for gid in gid_list: # if gid is related to video finder, so start Video Finder thread for checking status # check video_finder_threads_dict, perhaps a thread started before for this gid if (gid in self.parent.all_video_finder_gid_list): video_finder_dictionary = self.parent.persepolis_db.searchGidInVideoFinderTable(gid) if video_finder_dictionary['video_gid'] not in self.parent.video_finder_threads_dict.keys(): # start new video finder thread video_finder_gid_list = [video_finder_dictionary['video_gid'], video_finder_dictionary['audio_gid']] new_video_finder = VideoFinder(video_finder_dictionary, self.parent) self.parent.threadPool.append(new_video_finder) self.parent.threadPool[-1].start() self.parent.threadPool[-1].VIDEOFINDERCOMPLETED.connect(self.parent.videoFinderCompleted) # add thread to video_finder_threads_dict self.parent.video_finder_threads_dict[video_finder_dictionary['video_gid']] = new_video_finder video_finder_list.append(video_finder_gid_list) add_link_dict = {'gid': gid} # find download information dictionary = download_table_dict[gid] # if download was completed, continue the loop # with the next iteration of the loop! # We don't want to download it two times :) if dictionary['status'] == 'complete': continue queue_counter = queue_counter + 1 # change status of download to waiting status = 'waiting' dictionary['status'] = status if self.end_time: # it means user was set end time for download # set end_hour and end_minute add_link_dict['end_time'] = self.end_time # user can set sleep time between download items in queue. # see preferences window! # find wait_queue value wait_queue_list = self.parent.persepolis_setting.value('settings/wait-queue') wait_queue_hour = int(wait_queue_list[0]) wait_queue_minute = int(wait_queue_list[1]) # check if user set sleep time between downloads in queue in setting window. # if queue_counter is 1 , it means we are in the first download item in queue. # and no need to wait for first item. if (wait_queue_hour != 0 or wait_queue_minute != 0) and queue_counter != 1: now_time_hour = int(time.strftime("%H")) now_time_minute = int(time.strftime("%M")) now_time_second = int(time.strftime("%S")) # add extra minute if we are in second half of minute if now_time_second > 30: now_time_minute = now_time_minute + 1 # hour value can not be more than 23 and minute value can not be more than 59. sigma_minute = wait_queue_minute + now_time_minute sigma_hour = wait_queue_hour + now_time_hour if sigma_minute > 59: sigma_minute = sigma_minute - 60 sigma_hour = sigma_hour + 1 if sigma_hour > 23: sigma_hour = sigma_hour - 24 # setting sigma_hour and sigma_minute for download's start time! add_link_dict['start_time'] = str(sigma_hour) + ':' + str(sigma_minute) # write changes in data base self.parent.persepolis_db.updateAddLinkTable([add_link_dict]) # delete add_link_dict del add_link_dict # start new thread for download new_download = DownloadLink(gid, self.parent) self.parent.threadPool.append(new_download) self.parent.threadPool[-1].start() self.parent.threadPool[-1].ARIA2NOTRESPOND.connect(self.parent.aria2NotRespond) sleep(3) # limit download speed if user limited speed for previous download if self.limit: self.limit_changed = True # continue loop until download has finished while status == 'downloading' or status == 'waiting' or status == 'paused' or status == 'scheduled': sleep(1) dictionary = self.parent.persepolis_db.searchGidInDownloadTable(gid) status = dictionary['status'] if status == 'error': error = 'error' # write error_message in log file error_message = 'Download failed - GID : '\ + str(gid)\ + '- Message : '\ + error logger.sendToLog(error_message, 'ERROR') elif status == 'complete': complete_message = 'Download complete - GID : '\ + str(gid) # write in log the complete_message logger.sendToLog(complete_message, 'INFO') # check that is this related to video finder thread or not. if gid in self.parent.all_video_finder_gid_list: # find related thread for list in video_finder_list: if gid in list: video_gid = list[0] if video_gid in self.parent.video_finder_threads_dict: video_finder_thread = self.parent.video_finder_threads_dict[video_gid] # check the video and audio and muxing_status if video_finder_thread.video_completed == 'yes' and video_finder_thread.audio_completed == 'yes': # wait until end of muxing while video_finder_thread.active == 'yes': sleep(0.5) break if self.stop: # it means user stopped queue answer = download.downloadStop(gid, self.parent) # if aria2 did not respond , then this function is checking # for aria2 availability , and if aria2 disconnected then # aria2Disconnected is executed if answer == 'None': version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() status = 'stopped' if self.limit and status == 'downloading' and self.limit_changed: # It means user want to limit download speed # get limitation value self.limit_comboBox_value = self.parent.limit_comboBox.currentText() self.limit_spinBox_value = self.parent.limit_spinBox.value() if self.limit_comboBox_value == "KiB/s": limit = str(self.limit_spinBox_value) + str("K") else: limit = str(self.limit_spinBox_value) + str("M") # apply limitation download.limitSpeed(gid, limit) # done! self.limit_changed = False if not (self.limit) and status == 'downloading' and self.limit_changed: # speed limitation is canceled by user! # cancel limitation download.limitSpeed(gid, "0") # done! self.limit_changed = False # it means queue stopped at end time or user stopped queue if status == 'stopped': for video_finder_gid_list in video_finder_list: video_gid = video_finder_gid_list[0] video_finder_dictionary = self.parent.persepolis_db.searchGidInVideoFinderTable(video_gid) if video_finder_dictionary: # tell video finder thread to stop checking if video_finder_dictionary['video_completed'] == 'no' or video_finder_dictionary['audio_completed'] == 'no': video_finder_dictionary['checking'] = 'no' self.parent.persepolis_db.updateVideoFinderTable([video_finder_dictionary]) video_finder_thread = self.parent.video_finder_threads_dict[video_gid] video_finder_thread.checking = 'no' elif not (self.stop) and self.after and video_finder_dictionary['muxing_status'] == 'started': # downloads were completed and video finder started Muxing # wait until the end of muxing # don't turn of the computer. # video finder will be deleted from data base when muxing ended. # so check data base every second video_finder_thread = self.parent.video_finder_threads_dict[video_finder_dictionary['video_gid']] while video_finder_thread.active == 'yes': sleep(1) if self.stop and self.after: # It means user activated shutdown before and now user # stopped queue . so after download must be canceled self.parent.after_checkBox.setChecked(False) self.stop = True self.limit = False self.limit_changed = False # it means that break outer "for" loop self.break_for_loop = True if str(self.parent.category_tree.currentIndex().data()) == str(self.category): self.REFRESHTOOLBARSIGNAL.emit(self.category) # show notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Persepolis"), QCoreApplication.translate("mainwindow_src_ui_tr", "Queue Stopped!"), 10000, 'no', parent=self.parent) # write message in log logger.sendToLog('Queue stopped', 'INFO') break if self.break_for_loop: break if self.start: # if queue finished : self.start = False # this section is sending shutdown signal to the shutdown script(if user # select shutdown for after download) if self.after: # shutdown aria2c answer = download.shutDown() # KILL aria2c if didn't respond. R.I.P :)) if not (answer) and (os_type != OS.WINDOWS): subprocess.Popen(['killall', 'aria2c'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # write 'shutdown' value for this category in temp_db shutdown_dict = {'category': self.category, 'shutdown': 'shutdown'} self.parent.temp_db.updateQueueTable(shutdown_dict) # show a notification about system is shutting down now! notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", 'Persepolis is shutting down'), QCoreApplication.translate("mainwindow_src_ui_tr", 'your system in 20 seconds'), 15000, 'warning', parent=self.parent) # show notification for queue completion notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Persepolis"), QCoreApplication.translate("mainwindow_src_ui_tr", 'Queue completed!'), 10000, 'queue', parent=self.parent) # write a message in log logger.sendToLog('Queue completed', 'INFO') self.stop = True self.limit = False self.limit_changed = False self.after = False if str(self.parent.category_tree.currentIndex().data()) == str(self.category): self.REFRESHTOOLBARSIGNAL.emit(self.category) # CheckingThread have 2 duty! # 1-this class is checking that if user add a link with browsers plugin. # 2-assume that user executed program before . # if user is clicking on persepolis icon in menu this tread emits SHOWMAINWINDOWSIGNAL class CheckingThread(QThread): CHECKPLUGINDBSIGNAL = Signal() SHOWMAINWINDOWSIGNAL = Signal() def __init__(self): QThread.__init__(self) def run(self): global shutdown_notification global plugin_links_checked # shutdown_notification = 0 >> persepolis is running # 1 >> persepolis is ready for closing(closeEvent called) # 2 >> OK, let's close application! while shutdown_notification == 0 and aria_startup_answer != 'ready': sleep(1) while shutdown_notification == 0: sleep(0.2) # it means , user clicked on persepolis icon and persepolis is # still running. see persepolis file for more details. if os.path.isfile(show_window_file): # OK! we catch notification! remove show_window_file now! osCommands.remove(show_window_file) # emit a signal to notify MainWindow for showing itself! self.SHOWMAINWINDOWSIGNAL.emit() # It means new browser plugin call is available! if os.path.isfile(plugin_ready): # OK! We received notification! remove plugin_ready file osCommands.remove(plugin_ready) # When checkPluginCall method considered request , then # plugin_links_checked is changed to True plugin_links_checked = False self.CHECKPLUGINDBSIGNAL.emit() # notifying that we have browser_plugin request while plugin_links_checked is not True: # wait for persepolis consideration! sleep(0.5) # if checking_flag is equal to 1, it means that user pressed remove or delete button or ... . so checking download information must be stopped until job is done! # this thread checks checking_flag and when checking_flag changes to 2 # QTABLEREADY signal is emitted class WaitThread(QThread): QTABLEREADY = Signal() def __init__(self): QThread.__init__(self) def run(self): global checking_flag checking_flag = 1 while checking_flag != 2: sleep(0.05) self.QTABLEREADY.emit() # button_pressed_counter changed if user pressed move up and move down and ... actions # this thread is changing checking_flag to zero if button_pressed_counter # don't change for 2 seconds class ButtonPressedThread(QThread): def __init__(self): QThread.__init__(self) def run(self): global checking_flag current_button_pressed_value = deepcopy(button_pressed_counter) + 1 while current_button_pressed_value != button_pressed_counter: current_button_pressed_value = deepcopy(button_pressed_counter) sleep(2) # job is done! checking_flag = 0 class ShutDownThread(QThread): def __init__(self, parent, category, password=None): QThread.__init__(self) self.category = category self.password = password self.parent = parent self.crash = False def run(self): shutDown(self.parent, category=self.category, password=self.password) # this thread is keeping system awake! because if system sleeps , then internet connection is disconnected! # strategy is simple! a loop is checking mouse position every 20 seconds. # if mouse position didn't change, cursor is moved by QCursor.setPos() (see keepAwake method) ! so this is keeping system awake! # class KeepAwakeThread(QThread): KEEPSYSTEMAWAKESIGNAL = Signal(bool) def __init__(self): QThread.__init__(self) def run(self): while shutdown_notification == 0: while aria_startup_answer != 'ready': sleep(1) old_cursor_array = [0, 0] add = True while shutdown_notification == 0: # sleep 20 if persepolis not exited. for i in range(1, 20): if shutdown_notification == 0: sleep(1) else: break # finding cursor position cursor_position = QCursor.pos() new_cursor_array = [int(cursor_position.x()), int(cursor_position.y())] if new_cursor_array == old_cursor_array: # So cursor position didn't change for 20 second. if add: # Moving mouse position one time +10 pixel and one time -10 pixel! self.KEEPSYSTEMAWAKESIGNAL.emit(add) add = False else: self.KEEPSYSTEMAWAKESIGNAL.emit(add) add = True old_cursor_array = new_cursor_array # This thread moves files to another destination. # see moveSelectedDownloads method for more information. class MoveThread(QThread): def __init__(self, parent, gid_list, new_folder_path): QThread.__init__(self) self.new_folder_path = new_folder_path self.parent = parent self.gid_list = gid_list def run(self): add_link_dict_list = [] # move selected downloads # find row number for specific gid for gid in self.gid_list: # find download path dictionary = self.parent.persepolis_db.searchGidInAddLinkTable(gid) self.old_file_path = dictionary['download_path'] # find file_name self.file_name = os.path.basename(self.old_file_path) self.move = osCommands.moveFile(self.old_file_path, self.new_folder_path) # if moving is not successful, notify user. if not (self.move): notifySend(str(self.file_name), QCoreApplication.translate("mainwindow_src_ui_tr", 'Operation was not successful!'), 5000, 'warning', parent=self.parent) else: new_file_path = os.path.join(self.new_folder_path, self.file_name) add_link_dict = {'gid': gid, 'download_path': new_file_path} # add add_link_dict to add_link_dict_list add_link_dict_list.append(add_link_dict) # update data base self.parent.persepolis_db.updateAddLinkTable(add_link_dict_list) # notify user that job is done! notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Moving is"), QCoreApplication.translate("mainwindow_src_ui_tr", 'finished!'), 5000, 'warning', parent=self.parent) class MainWindow(MainWindow_Ui): def __init__(self, start_in_tray, persepolis_main, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.persepolis_main = persepolis_main global icons icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # this variable is changed to True, # if user highlights multiple items in download_table self.multi_items_selected = False # this variable is changed to False when # user clicks on 'hide options' button in # side panel. # see showQueuePanelOptions method for more information. self.show_queue_panel = True # system_tray_icon self.system_tray_icon = QSystemTrayIcon() self.system_tray_icon.setIcon( QIcon.fromTheme('persepolis-tray', QIcon(':/persepolis-tray.svg'))) # menu of system tray icon system_tray_menu = QMenu() system_tray_menu.addAction(self.addlinkAction) system_tray_menu.addAction(self.videoFinderAddLinkAction) system_tray_menu.addAction(self.stopAllAction) system_tray_menu.addAction(self.addFromClipboardAction) system_tray_menu.addAction(self.minimizeAction) system_tray_menu.addAction(self.exitAction) self.system_tray_icon.setContextMenu(system_tray_menu) # if system tray icon pressed: self.system_tray_icon.activated.connect(self.systemTrayPressed) # show system_tray_icon self.system_tray_icon.show() # check trayAction self.trayAction.setChecked(True) # check user preference for showing or hiding system_tray_icon if self.persepolis_setting.value('settings/tray-icon') != 'yes' and start_in_tray is False: self.minimizeAction.setEnabled(False) self.trayAction.setChecked(False) self.system_tray_icon.hide() # hide MainWindow if start_in_tray is equal to "yes" if start_in_tray: self.minimizeAction.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Show main Window')) self.minimizeAction.setIcon(QIcon(icons + 'window')) # check user preference for showing or hiding menubar. # (It's not for mac osx or DE that have global menu like kde plasma) if self.persepolis_setting.value('settings/show-menubar') == 'yes': self.menubar.show() self.showMenuBarAction.setChecked(True) self.toolBar2.hide() else: self.menubar.hide() self.showMenuBarAction.setChecked(False) self.toolBar2.show() if os_type == OS.OSX: self.showMenuBarAction.setEnabled(False) # check user preferences for showing or hiding sidepanel. if self.persepolis_setting.value('settings/show-sidepanel') == 'yes': self.category_tree_qwidget.show() self.showSidePanelAction.setChecked(True) else: self.category_tree_qwidget.hide() self.showSidePanelAction.setChecked(False) # set message for statusbar self.statusbar.showMessage(QCoreApplication.translate("mainwindow_src_ui_tr", 'Please Wait...')) self.checkSelectedRow() # list of threads self.threadPool = [] # list of SocksToHttpConvertor self.socks5_to_http_convertor_list = [] # get execution path information self.exec_dictionary = getExecPath() self.exec_file_path = self.exec_dictionary['exec_file_path'] logger.sendToLog("Persepolis path is:\n\t" + self.exec_file_path, "INFO") if self.exec_dictionary['bundle']: # Persepolis is run as a bundle. self.is_bundle = True logger.sendToLog("Persepolis is run as a bundle.", "INFO") else: self.is_bundle = False if self.exec_dictionary['test']: # Persepolis is run from test directory. self.is_test = True logger.sendToLog("Persepolis is run from test directory.", "INFO") else: self.is_test = False if not (self.is_bundle) and not (self.is_test): self.is_test = False logger.sendToLog("Persepolis is run as installed python madule.", "INFO") # start aria2c start_aria = StartAria2Thread(self) self.threadPool.append(start_aria) self.threadPool[0].start() self.threadPool[0].ARIA2RESPONDSIGNAL.connect(self.startAriaMessage) # initializing # create an object for PluginsDB self.plugins_db = PluginsDB() # create an object for PersepolisDB self.persepolis_db = PersepolisDB() # create an object fo TempDB self.temp_db = TempDB() # create tables self.temp_db.createTables() # check tables in data_base, and change required values to default value. # see data_base.py for more information. self.persepolis_db.setDBTablesToDefaultValue() # get queues name from data base queues_list = self.persepolis_db.categoriesList() # add queues to category_tree(left side panel) for category_name in queues_list: new_queue_category = QStandardItem(category_name) font = QFont() font.setBold(True) new_queue_category.setFont(font) new_queue_category.setEditable(False) self.category_tree_model.appendRow(new_queue_category) # read from data base # add download items to the download_table # read download items from data base download_table_dict = self.persepolis_db.returnItemsInDownloadTable() # read gid_list from date base category_dict = self.persepolis_db.searchCategoryInCategoryTable('All Downloads') gid_list = category_dict['gid_list'] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] # insert items in download_table for gid in gid_list: # create new row self.download_table.insertRow(0) dict = download_table_dict[gid] i = 0 for key in keys_list: item = QTableWidgetItem(str(dict[key])) self.download_table.setItem(0, i, item) i = i + 1 # get video_finder gids self.all_video_finder_gid_list, self.all_video_finder_video_gid_list, self.all_video_finder_audio_gid_list = self.persepolis_db.returnVideoFinderGids() # defining some lists and dictionaries for running addlinkwindows and # propertieswindows and propertieswindows , ... self.addlinkwindows_list = [] self.propertieswindows_list = [] self.progress_window_list = [] self.afterdownload_list = [] self.text_queue_window_list = [] self.about_window_list = [] self.plugin_queue_window_list = [] self.logwindow_list = [] self.progress_window_list_dict = {} self.capturekeywindows_list = [] # queue_list_dict contains queue threads >> queue_list_dict[name of queue] self.queue_list_dict = {} # this dictionary contains VideoFinder threads # key = video_gid and value = VideoFinder thread self.video_finder_threads_dict = {} # no convert_socks5 thread is running now self.socks5_to_http_convertor_is_still_running = False # CheckDownloadInfoThread check_download_info = CheckDownloadInfoThread(self) self.threadPool.append(check_download_info) self.threadPool[1].start() self.threadPool[1].DOWNLOAD_INFO_SIGNAL.connect(self.checkDownloadInfo) self.threadPool[1].RECONNECTARIASIGNAL.connect(self.reconnectAria) # CheckSelectedRowThread check_selected_row = CheckSelectedRowThread() self.threadPool.append(check_selected_row) self.threadPool[2].start() self.threadPool[2].CHECKSELECTEDROWSIGNAL.connect( self.checkSelectedRow) # CheckingThread check_browser_plugin = CheckingThread() self.threadPool.append(check_browser_plugin) self.threadPool[3].start() self.threadPool[3].CHECKPLUGINDBSIGNAL.connect(self.checkPluginCall) self.threadPool[3].SHOWMAINWINDOWSIGNAL.connect(self.showMainWindow) # Checking clipboard if str(self.persepolis_setting.value('settings/check-clipboard')) == 'yes': # QApplication.clipboard().dataChanged.connect(self.importLinksFromClipboard) check_clipboard_thread = CheckClipBoardThread(self) self.threadPool.append(check_clipboard_thread) self.threadPool[-1].start() self.threadPool[-1].CHECKCLIPBOARDSIGNAL.connect( self.importLinksFromClipboard) # keepawake self.ongoing_downloads = 0 keep_awake = KeepAwakeThread() self.threadPool.append(keep_awake) self.threadPool[-1].start() self.threadPool[-1].KEEPSYSTEMAWAKESIGNAL.connect(self.keepAwake) # this thread checks ffmpeg and gost availability. # this thread checks ffmpeg and python and pyqt and qt versions and write them in log file. # this thread writes osi type and desktop env. in log file. self.type_of_convertor = None check_version_thread = CheckVersionsThread(self) self.threadPool.append(check_version_thread) self.threadPool[-1].start() self.threadPool[-1].TYPEOFCONVERTORSIGNAL.connect(self.typeOfConvertor) # finding number or row that user selected! self.download_table.itemSelectionChanged.connect(self.selectedRow) # if user doubleclicks on an item in download_table , then openFile # function executes self.download_table.itemDoubleClicked.connect(self.openFile) # connecting queue_panel_show_button to showQueuePanelOptions self.queue_panel_show_button.clicked.connect( self.showQueuePanelOptions) # connecting start_checkBox to startFrame self.start_checkBox.toggled.connect(self.startFrame) self.start_checkBox.setChecked(False) # connecting end_checkBox to endFrame self.end_checkBox.toggled.connect(self.endFrame) self.end_checkBox.setChecked(False) # connecting after_checkBox to afterFrame self.after_checkBox.toggled.connect(self.afterFrame) self.after_checkBox.setChecked(False) # connecting limit_checkBox to limitFrame self.limit_checkBox.toggled.connect(self.limitFrame) # connecting limit_pushButton to limitPushButtonPressed self.limit_pushButton.clicked.connect(self.limitPushButtonPressed) # connecting limit_comboBox and limit_spinBox to limitComboBoxChanged self.limit_comboBox.currentIndexChanged.connect( self.limitComboBoxChanged) self.limit_spinBox.valueChanged.connect(self.limitComboBoxChanged) # connecting after_pushButton to afterPushButtonPressed self.after_pushButton.clicked.connect(self.afterPushButtonPressed) # setting index of all downloads for category_tree global current_category_tree_index current_category_tree_index = self.category_tree_model.index(0, 0) self.category_tree.setCurrentIndex(current_category_tree_index) # this line set toolBar And Context Menu Items self.toolBarAndContextMenuItems('All Downloads') # It will be enabled after aria2 startup!(see startAriaMessage method) # .This line added for solving crash problems on startup self.category_tree_qwidget.setEnabled(False) # keep_awake_checkBox if str(self.persepolis_setting.value('settings/awake')) == 'yes': self.keep_awake_checkBox.setChecked(True) else: self.keep_awake_checkBox.setChecked(False) self.keep_awake_checkBox.toggled.connect(self.keepAwakeCheckBoxToggled) self.muxing_pushButton.clicked.connect(self.muxingPushButtonPressed) # finding windows_size size = self.persepolis_setting.value( 'MainWindow/size', QSize(900, 500)) position = self.persepolis_setting.value( 'MainWindow/position', QPoint(300, 300)) # setting window size self.resize(size) self.move(position) # download_table column size # column 0 size = self.persepolis_setting.value( 'MainWindow/column0', '300') self.download_table.setColumnWidth(0, int(size)) # column 1 size = self.persepolis_setting.value( 'MainWindow/column1', '100') self.download_table.setColumnWidth(1, int(size)) # column 2 size = self.persepolis_setting.value( 'MainWindow/column2', '100') self.download_table.setColumnWidth(2, int(size)) # column 3 size = self.persepolis_setting.value( 'MainWindow/column3', '120') self.download_table.setColumnWidth(3, int(size)) # column 4 size = self.persepolis_setting.value( 'MainWindow/column4', '100') self.download_table.setColumnWidth(4, int(size)) # column 5 size = self.persepolis_setting.value( 'MainWindow/column5', '120') self.download_table.setColumnWidth(5, int(size)) # column 6 size = self.persepolis_setting.value( 'MainWindow/column6', '100') self.download_table.setColumnWidth(6, int(size)) # column 7 size = self.persepolis_setting.value( 'MainWindow/column7', '100') self.download_table.setColumnWidth(7, int(size)) # column 10 size = self.persepolis_setting.value( 'MainWindow/column10', '200') self.download_table.setColumnWidth(10, int(size)) # column 11 size = self.persepolis_setting.value( 'MainWindow/column11', '200') self.download_table.setColumnWidth(11, int(size)) # column 12 size = self.persepolis_setting.value( 'MainWindow/column11', '200') self.download_table.setColumnWidth(12, int(size)) # check maximizing situation in persepolis_setting if str(self.persepolis_setting.value('MainWindow/maximized')) == 'yes': self.showMaximized() # get columns visibility situation from persepolis_setting if str(self.persepolis_setting.value('settings/column0')) == 'yes': self.download_table.setColumnHidden(0, False) else: self.download_table.setColumnHidden(0, True) if str(self.persepolis_setting.value('settings/column1')) == 'yes': self.download_table.setColumnHidden(1, False) else: self.download_table.setColumnHidden(1, True) if str(self.persepolis_setting.value('settings/column2')) == 'yes': self.download_table.setColumnHidden(2, False) else: self.download_table.setColumnHidden(2, True) if str(self.persepolis_setting.value('settings/column3')) == 'yes': self.download_table.setColumnHidden(3, False) else: self.download_table.setColumnHidden(3, True) if str(self.persepolis_setting.value('settings/column4')) == 'yes': self.download_table.setColumnHidden(4, False) else: self.download_table.setColumnHidden(4, True) if str(self.persepolis_setting.value('settings/column5')) == 'yes': self.download_table.setColumnHidden(5, False) else: self.download_table.setColumnHidden(5, True) if str(self.persepolis_setting.value('settings/column6')) == 'yes': self.download_table.setColumnHidden(6, False) else: self.download_table.setColumnHidden(6, True) if str(self.persepolis_setting.value('settings/column7')) == 'yes': self.download_table.setColumnHidden(7, False) else: self.download_table.setColumnHidden(7, True) if str(self.persepolis_setting.value('settings/column10')) == 'yes': self.download_table.setColumnHidden(10, False) else: self.download_table.setColumnHidden(10, True) if str(self.persepolis_setting.value('settings/column11')) == 'yes': self.download_table.setColumnHidden(11, False) else: self.download_table.setColumnHidden(11, True) if str(self.persepolis_setting.value('settings/column12')) == 'yes': self.download_table.setColumnHidden(12, False) else: self.download_table.setColumnHidden(12, True) icons_size = int(self.persepolis_setting.value('settings/toolbar_icon_size')) self.toolBar.setIconSize(QSize(icons_size, icons_size)) self.toolBar2.setIconSize(QSize(icons_size, icons_size)) # check reverse_checkBox self.reverse_checkBox.setChecked(False) # This method set type_of_convertor_variable # see TYPEOFCONVERTORSIGNAL and CheckVersionThread def typeOfConvertor(self, message): self.type_of_convertor = message # startAriaMessage function is showing some message on statusbar and # sending notification when aria failed to start! see StartAria2Thread for # more details def startAriaMessage(self, message): global aria_startup_answer if message == 'yes': sleep(0.5) self.statusbar.showMessage(QCoreApplication.translate("mainwindow_src_ui_tr", 'Ready...')) aria_startup_answer = 'ready' self.category_tree_qwidget.setEnabled(True) # Check for newer version of Persepolis # start aria2c check_for_newer_version = CheckNewerVersionThread(self) self.threadPool.append(check_for_newer_version) self.threadPool[-1].start() self.threadPool[-1].NEWVERSIONISAVAILABLESIGNAL.connect(self.newVersionIsAvailable) elif message == 'try again': self.statusbar.showMessage( QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds!")) logger.sendToLog( "Aria2 didn't respond! be patient!Persepolis tries again in 2 seconds!", "WARNING") else: self.statusbar.showMessage(QCoreApplication.translate("mainwindow_src_ui_tr", 'Error...')) notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", 'Persepolis can not connect to Aria2'), QCoreApplication.translate("mainwindow_src_ui_tr", 'Check your network & Restart Persepolis'), 10000, 'critical', parent=self) logger.sendToLog('Persepolis can not connect to Aria2', 'ERROR') self.propertiesAction.setEnabled(True) self.category_tree_qwidget.setEnabled(True) # this method is executing if RECONNECTARIASIGNAL is emitted by CheckingThread . # if message is 'did not respond' then a message(Persepolis can not connect to Aria2) shown # if message is not 'did not respond' , it means that reconnecting # Aria2 was successful. # This method checks newer version of Persepolis is released or not. def reconnectAria(self, message): if message == 'did not respond': self.statusbar.showMessage(QCoreApplication.translate("mainwindow_src_ui_tr", 'Error...')) notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", 'Persepolis can not connect to Aria2'), QCoreApplication.translate("mainwindow_src_ui_tr", 'Restart Persepolis'), 10000, 'critical', parent=self) logger.sendToLog('Persepolis can not connect to Aria2', 'ERROR') else: self.statusbar.showMessage(QCoreApplication.translate("mainwindow_src_ui_tr", 'Reconnecting Aria2...')) logger.sendToLog('Reconnecting Aria2 ...', 'INFO') # get items with 'downloading' or 'waiting' status from data base and restart them. downloading_gid_list = self.persepolis_db.returnDownloadingItems() for gid in downloading_gid_list: new_download = DownloadLink(gid, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].ARIA2NOTRESPOND.connect(self.aria2NotRespond) # get download items with 'paused' status and stop them. paused_gid_list = self.persepolis_db.returnPausedItems() for gid in paused_gid_list: download.downloadStop(gid, self) self.statusbar.showMessage( QCoreApplication.translate("mainwindow_src_ui_tr", 'Persepolis reconnected aria2 successfully')) logger.sendToLog('Persepolis reconnected aria2 successfully', 'INFO') # when this function is called , aria2_disconnected value is changing to # 1! and it means that aria2 rpc connection disconnected.so CheckingThread # is trying to fix it . def aria2Disconnected(self): global aria2_disconnected aria2_disconnected = 1 # read KeepAwakeThread for more information def keepAwake(self, add): # finding cursor position cursor_position = QCursor.pos() cursor_array = [int(cursor_position.x()), int(cursor_position.y())] # check user selected option. # don't do anything if we haven't any active downloads if self.persepolis_setting.value('settings/awake') == 'yes' and self.ongoing_downloads != 0: if add is True and self.keep_awake_checkBox.isChecked() is True: # Moving mouse position one time +1 pixel and one time -1 pixel! QCursor.setPos(cursor_array[0] + 1, cursor_array[1] + 1) else: QCursor.setPos(cursor_array[0] - 1, cursor_array[1] - 1) # This method notifies user about newer version of Persepolis def newVersionIsAvailable(self, message): new_version = str(message) new_version = new_version[0:-1] + '.' + new_version[-1] # notify user about newer version notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Version {} is available!".format(new_version)), QCoreApplication.translate("mainwindow_src_ui_tr", "Please update Persepolis."), 10000, '', parent=self) # if keep_awake_checkBox toggled by user , this method is called. def keepAwakeCheckBoxToggled(self, checkbox): if self.keep_awake_checkBox.isChecked(): self.persepolis_setting.setValue('settings/awake', 'yes') self.keep_awake_checkBox.setChecked(True) else: self.persepolis_setting.setValue('settings/awake', 'no') self.keep_awake_checkBox.setChecked(False) self.persepolis_setting.sync() # this method updates download_table in MainWindow # # download_table_header = ['File Name', 'Status', 'Size', 'Downloaded', 'Percentage', 'Connections', # 'Transfer rate', 'Estimated time left', 'Gid', 'Link', 'First try date', 'Last try date', 'Category'] def checkDownloadInfo(self, list): # number of ongoing downloads. # this variable helps keepAwake method. self.ongoing_downloads = len(list) systemtray_tooltip_text = 'Persepolis Download Manager' for dict in list: gid = dict['gid'] status = dict['status'] if status == 'complete' or status == 'error' or status == 'stopped': # eliminate gid from active_downloads in data base temp_dict = {'gid': gid, 'status': 'deactive'} self.temp_db.updateSingleTable(temp_dict) # add download percent to the tooltip text for persepolis system tray icon try: if status == 'downloading': system_tray_file_name = dict['file_name'] if len(system_tray_file_name) > 20: system_tray_file_name = system_tray_file_name[0:19] + '...' systemtray_tooltip_text = systemtray_tooltip_text + '\n'\ + system_tray_file_name + ': '\ + dict['percent'] except: pass # Is the link related to VideoFinder? if gid in self.all_video_finder_gid_list: video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) video_finder_thread = self.video_finder_threads_dict[video_finder_dictionary['video_gid']] video_finder_link = True # is gid related to video? or audio if gid == video_finder_dictionary['video_gid']: video_finder_video_gid = True else: video_finder_video_gid = False # if download is completed update video finder data base if status == 'complete': if video_finder_video_gid: video_finder_dictionary['video_completed'] = 'yes' video_finder_thread.video_completed = 'yes' else: video_finder_dictionary['audio_completed'] = 'yes' video_finder_thread.audio_completed = 'yes' # update data base self.persepolis_db.updateVideoFinderTable([video_finder_dictionary]) # if download stopped, VideoFinder must be notified. so update data base. if video_finder_dictionary['checking'] == 'yes' and (status == 'error' or status == 'stopped'): video_finder_dictionary['checking'] = 'no' video_finder_thread.checking = 'no' # update data base self.persepolis_db.updateVideoFinderTable([video_finder_dictionary]) else: video_finder_link = False if status == 'error': # check free space in download_folder # perhaps insufficient space in hard disk caused this error! # find free space in KiB # find download path dictionary = self.persepolis_db.searchGidInAddLinkTable(gid) download_path = dictionary['download_path'] free_space = freeSpace(download_path) # find file size file_size = dict['size'] if file_size is not None: if file_size[-2:] != ' B': unit = file_size[-3:] try: if unit == 'TiB' or unit == 'GiB': size_value = float(file_size[:-4]) else: size_value = int(file_size[:-4]) except: size_value = None else: unit = None try: size_value = int(file_size) except: size_value = None if free_space is not None and size_value is not None: if unit == 'TiB': free_space = free_space / (1073741824 * 1024) free_space = round(free_space, 2) elif unit == 'GiB': free_space = free_space / 1073741824 free_space = round(free_space, 2) elif unit == 'MiB': free_space = int(free_space / 1048576) elif unit == 'KiB': free_space = int(free_space / 1024) else: free_space = int(free_space) if free_space < size_value: error = 'Insufficient disk space!' # write error_message in log file error_message = 'Download failed - GID : '\ + str(gid)\ + '- Message : '\ + error logger.sendToLog(error_message, 'ERROR') # show notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Error: ") + error, QCoreApplication.translate("mainwindow_src_ui_tr", 'There is not enough disk space available at the download folder! Please choose another one or clear some space.'), 10000, 'fail', parent=self) # find row of this gid in download_table! row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break # update download_table items if row is not None: update_list = [dict['file_name'], dict['status'], dict['size'], dict['downloaded_size'], dict['percent'], dict['connections'], dict['rate'], dict['estimate_time_left'], dict['gid'], None, None, None, None] for i in range(12): # update download_table cell if update_list item in not None if update_list[i]: text = update_list[i] else: text = self.download_table.item(row, i).text() # create a QTableWidgetItem item = QTableWidgetItem(text) # set item try: self.download_table.setItem(row, i, item) except Exception as problem: logger.sendToLog( "Error occurred while updating download table", "INFO") logger.sendToLog(problem, "ERROR") # update download_table (refreshing!) self.download_table.viewport().update() # update progresswindow labels # check that any progress_window is available for this gid or not! if gid in self.progress_window_list_dict.keys(): # find progress_window for this gid member_number = self.progress_window_list_dict[gid] progress_window = self.progress_window_list[member_number] # if link is related to video finder if video_finder_link: # download percent value = dict['percent'] if not (value): value = '0%' if video_finder_dictionary['video_completed'] == 'yes': video_status = 'Completed' elif video_finder_video_gid: video_status = value + ' downloaded' else: video_status = 'Not completed' video_status = QCoreApplication.translate("video_finder_progress_ui_tr", "Video file status: ")\ + video_status progress_window.video_status_label.setText(video_status) if video_finder_dictionary['audio_completed'] == 'yes': audio_status = 'Completed' elif not (video_finder_video_gid): audio_status = value + ' downloaded' else: audio_status = 'Not completed' audio_status = QCoreApplication.translate("video_finder_progress_ui_tr", "Audio file status: ")\ + audio_status progress_window.audio_status_label.setText(audio_status) if video_finder_dictionary['video_completed'] == 'yes' and video_finder_dictionary['audio_completed'] == 'yes': muxing_status = 'Started!' else: muxing_status = 'Not started!' muxing_status = QCoreApplication.translate("video_finder_progress_ui_tr", "Muxing status: ")\ + muxing_status progress_window.muxing_status_label.setText(muxing_status) # tell to progress_window what gid is in progress progress_window.gid = gid # link link = QCoreApplication.translate("mainwindow_src_ui_tr", "Link: ") + str(dict['link']) progress_window.link_label.setText(link) progress_window.link_label.setToolTip(link) # downloaded downloaded_size = dict['downloaded_size'] if downloaded_size is None: downloaded_size = 'None' file_size = dict['size'] if file_size is None: file_size = 'None' downloaded = QCoreApplication.translate("mainwindow_src_ui_tr", "Downloaded: ") \ + str(downloaded_size) \ + "/" \ + str(file_size) progress_window.downloaded_label.setText(downloaded) # Transfer rate rate = QCoreApplication.translate("mainwindow_src_ui_tr", "Transfer rate: ") \ + str(dict['rate']) progress_window.rate_label.setText(rate) # Estimate time left estimate_time_left = QCoreApplication.translate("mainwindow_src_ui_tr", "Estimated time left: ") \ + str(dict['estimate_time_left']) progress_window.time_label.setText(estimate_time_left) # Connections connections = QCoreApplication.translate("mainwindow_src_ui_tr", "Connections: ") \ + str(dict['connections']) progress_window.connections_label.setText(connections) # progressbar value = dict['percent'] file_name = str(dict['file_name']) if file_name != "***": windows_title = '(' + str(value) + ')' + str(file_name) progress_window.setWindowTitle(windows_title) try: value = int(value[:-1]) except: value = 0 progress_window.download_progressBar.setValue(value) # status progress_window.status = str(dict['status']) status = QCoreApplication.translate("mainwindow_src_ui_tr", "Status: ") + progress_window.status progress_window.status_label.setText(status) # activate/deactivate progress_window buttons according to status if progress_window.status == "downloading": progress_window.resume_pushButton.setEnabled(False) progress_window.stop_pushButton.setEnabled(True) progress_window.pause_pushButton.setEnabled(True) elif progress_window.status == "paused": progress_window.resume_pushButton.setEnabled(True) progress_window.stop_pushButton.setEnabled(True) progress_window.pause_pushButton.setEnabled(False) elif progress_window.status == "waiting": progress_window.resume_pushButton.setEnabled(False) progress_window.stop_pushButton.setEnabled(True) progress_window.pause_pushButton.setEnabled(False) elif progress_window.status == "scheduled": progress_window.resume_pushButton.setEnabled(False) progress_window.stop_pushButton.setEnabled(True) progress_window.pause_pushButton.setEnabled(False) # it means download has finished! # lets do finishing jobs! elif progress_window.status == "stopped" or progress_window.status == "error" or progress_window.status == "complete": # close progress_window if download status is stopped or # completed or error # if window is related to video finder and download is completed, the don't close window if (video_finder_link is True and progress_window.status == 'complete'): # disable stop and pause and push buttons progress_window.resume_pushButton.setEnabled(False) progress_window.stop_pushButton.setEnabled(False) progress_window.pause_pushButton.setEnabled(False) else: progress_window.close() # eliminate window information from progress_window_list_dict del self.progress_window_list_dict[gid] # if download stopped: if progress_window.status == "stopped": # write message in log stop_message = 'Download stopped - GID : '\ + str(gid) logger.sendToLog(stop_message, 'INFO') # show notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download Stopped"), str(dict['file_name']), 10000, 'no', parent=self) # if download status is error! elif progress_window.status == "error": # get error message from dict if 'error' in dict.keys(): error = dict['error'] else: error = 'Error' # write error_message in log file error_message = 'Download failed - GID : '\ + str(gid)\ + '- Message : '\ + error logger.sendToLog(error_message, 'ERROR') # show notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Error - ") + error, str(dict['file_name']), 10000, 'fail', parent=self) # set "None" for start_time and end_time and after_download value # in data_base, because download has finished self.persepolis_db.setDefaultGidInAddlinkTable( gid=gid, start_time=True, end_time=True, after_download=True) # THIS PART IS NOT RELATED TO VIDEO FINDER LINKS # if user selects shutdown option for after download progress # value of 'shutdown' in data base will changed to 'wait' for this category # (see ShutDownThread and shutdown.py for more information) # shutDown method will check that value in a loop. # when "wait" changes to "shutdown" then shutdown.py script # will shut down the system shutdown_dict = self.temp_db.returnGid(gid) # get shutdown value for this gid from data base shutdown_status = shutdown_dict['shutdown'] # if status is complete or error, and user selected "shutdown after download" option: if shutdown_status == 'wait': # shutdown aria! answer = download.shutDown() # KILL aria2c in Unix like systems, if didn't respond. R.I.P :)) if not (answer) and (os_type != OS.WINDOWS): subprocess.Popen(['killall', 'aria2c'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # send notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", 'Persepolis is shutting down'), QCoreApplication.translate("mainwindow_src_ui_tr", 'your system in 20 seconds'), 15000, 'warning', parent=self) # write "shutdown" message in data base for this gid >> Shutdown system! shutdown_dict = {'gid': gid, 'shutdown': 'shutdown'} self.temp_db.updateSingleTable(shutdown_dict) # sync persepolis_setting before checking! self.persepolis_setting.sync() if progress_window.status == "complete" and video_finder_link is False: # write message in log file complete_message = 'Download complete - GID : '\ + str(gid) logger.sendToLog(complete_message, 'INFO') # play notification notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download Complete"), dict['file_name'], 10000, 'ok', parent=self) # check user's Preferences if self.persepolis_setting.value('settings/after-dialog') == 'yes': # show download complete dialog afterdownloadwindow = AfterDownloadWindow( self, dict, self.persepolis_setting) self.afterdownload_list.append(afterdownloadwindow) self.afterdownload_list[-1].show() # bringing AfterDownloadWindow on top self.afterdownload_list[-1].raise_() self.afterdownload_list[-1].activateWindow() # set tooltip for system_tray_icon self.system_tray_icon.setToolTip(systemtray_tooltip_text) # drag and drop for links def dragEnterEvent(self, droplink): text = str(droplink.mimeData().text()) if ("tp:/" in text[2:6]) or ("tps:/" in text[2:7]): droplink.accept() else: droplink.ignore() def dropEvent(self, droplink): link_clipboard = QApplication.clipboard() link_clipboard.clear(mode=link_clipboard.Clipboard) link_string = droplink.mimeData().text() link_clipboard.setText(str(link_string), mode=link_clipboard.Clipboard) self.addLinkButtonPressed(button=link_clipboard) # aria2 identifies each download by the ID called GID. # The GID must be hex string of 16 characters, # thus [0-9a-zA-Z] are allowed and leading zeros must # not be stripped. The GID all 0 is reserved and must # not be used. The GID must be unique, otherwise error # is reported and the download is not added. # gidGenerator generates GID for downloads def gidGenerator(self): # this loop repeats until we have a unique GID while True: # generate a random hex value between 1152921504606846976 and 18446744073709551615 # for download GID my_gid = hex(random.randint(1152921504606846976, 18446744073709551615)) my_gid = my_gid[2:18] my_gid = str(my_gid) # check my_gid used before or not! category_dict = self.persepolis_db.searchCategoryInCategoryTable('All Downloads') gid_list = category_dict['gid_list'] if not (my_gid in gid_list): break return my_gid # this method returns index of all selected rows in list format def userSelectedRows(self): try: # Find selected rows rows_list = [] rows_index = self.download_table.selectionModel().selectedRows() for index in rows_index: rows_list.append(index.row()) # sort list by number rows_list.sort() except: rows_list = [] return rows_list # this method returns number of selected row # if user selected one row! def selectedRow(self): rows_list = self.userSelectedRows() if len(rows_list) == 0: return None else: return rows_list[0] # this method activates/deactivates QActions according to selected row! def checkSelectedRow(self): rows_list = self.userSelectedRows() # check if user selected multiple items if len(rows_list) <= 1: multi_items_selected = False else: multi_items_selected = True # if any thing changed ... if (multi_items_selected and not (self.multi_items_selected)) or (not (multi_items_selected) and self.multi_items_selected): if multi_items_selected: self.multi_items_selected = True else: self.multi_items_selected = False self.selectDownloads() if len(rows_list) != 0: selected_row_return = rows_list[0] status = self.download_table.item(selected_row_return, 1).text() category = self.download_table.item(selected_row_return, 12).text() link = self.download_table.item(selected_row_return, 9).text() self.statusbar.showMessage(str(link)) self.removeSelectedAction.setEnabled(True) self.deleteSelectedAction.setEnabled(True) if category == 'Single Downloads': if status == "scheduled": self.resumeAction.setEnabled(False) self.pauseAction.setEnabled(False) self.stopAction.setEnabled(True) self.propertiesAction.setEnabled(False) self.progressAction.setEnabled(True) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) elif status == "stopped" or status == "error": self.stopAction.setEnabled(False) self.pauseAction.setEnabled(False) self.resumeAction.setEnabled(True) self.propertiesAction.setEnabled(True) self.progressAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) elif status == "downloading": self.resumeAction.setEnabled(False) self.pauseAction.setEnabled(True) self.stopAction.setEnabled(True) self.propertiesAction.setEnabled(False) self.progressAction.setEnabled(True) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) elif status == "waiting": self.stopAction.setEnabled(True) self.resumeAction.setEnabled(False) self.pauseAction.setEnabled(False) self.propertiesAction.setEnabled(False) self.progressAction.setEnabled(True) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) elif status == "complete": self.stopAction.setEnabled(False) self.resumeAction.setEnabled(False) self.pauseAction.setEnabled(False) self.propertiesAction.setEnabled(True) self.progressAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(True) self.openFileAction.setEnabled(True) self.moveSelectedDownloadsAction.setEnabled(True) elif status == "paused": self.stopAction.setEnabled(True) self.resumeAction.setEnabled(True) self.pauseAction.setEnabled(False) self.propertiesAction.setEnabled(False) self.progressAction.setEnabled(True) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) else: self.progressAction.setEnabled(False) self.resumeAction.setEnabled(False) self.stopAction.setEnabled(False) self.pauseAction.setEnabled(False) self.propertiesAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) else: self.resumeAction.setEnabled(True) self.pauseAction.setEnabled(True) self.stopAction.setEnabled(True) if status == 'complete': self.propertiesAction.setEnabled(True) self.progressAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(True) self.openFileAction.setEnabled(True) self.moveSelectedDownloadsAction.setEnabled(True) elif status == "stopped" or status == "error": self.propertiesAction.setEnabled(True) self.progressAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) elif status == "scheduled" or status == "downloading" or status == "paused" or status == "waiting": self.propertiesAction.setEnabled(False) self.progressAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) # video_finder_widget # hide video_finder_widget if selected item is not related to video finder if not (self.multi_items_selected): gid = self.download_table.item(selected_row_return, 8).text() if gid in self.all_video_finder_gid_list: # show widget self.video_finder_widget.show() # gid is related to audio or video?! if gid in self.all_video_finder_video_gid_list: video_gid = gid # set video_label # get video download's percentage self.video_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Video file status: ") + self.download_table.item(selected_row_return, 4).text() + QCoreApplication.translate("mainwindow_ui_tr", " downloaded")) # find audio information # find row of audio_gid in download_table! audio_gid = self.all_video_finder_audio_gid_list[self.all_video_finder_video_gid_list.index( gid)] row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if audio_gid == row_gid: row = i break # set audio_label # get audio download's percentage self.audio_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Audio file status: ") + self.download_table.item(row, 4).text() + QCoreApplication.translate("mainwindow_ui_tr", " downloaded")) else: # set audio_label # get audio download's percentage self.audio_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Audio file status: ") + self.download_table.item(selected_row_return, 4).text() + QCoreApplication.translate("mainwindow_ui_tr", " downloaded")) # find video information video_gid = self.all_video_finder_video_gid_list[self.all_video_finder_audio_gid_list.index( gid)] # find video row row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if video_gid == row_gid: row = i break # set video_label # get video download's percentage self.video_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Video file status: ") + self.download_table.item(row, 4).text() + QCoreApplication.translate("mainwindow_ui_tr", " downloaded")) # set activity status and muxing status # show/hide muxing_pushButton if video_gid in self.video_finder_threads_dict.keys(): # find thread video_finder_thread = self.video_finder_threads_dict[video_gid] # check activity if video_finder_thread.active == 'yes': video_finder_status = QCoreApplication.translate('mainwindow_ui_tr', 'Active') # hide muxing_pushButton self.muxing_pushButton.hide() else: video_finder_status = QCoreApplication.translate('mainwindow_ui_tr', 'Not Active') if video_finder_thread.video_completed == 'yes' and video_finder_thread.audio_completed == 'yes': # show muxing_pushButton self.muxing_pushButton.show() # check muxing status muxing = video_finder_thread.muxing if muxing == 'no': muxing_status = QCoreApplication.translate('mainwindow_ui_tr', 'Not Active') elif muxing == 'started': muxing_status = QCoreApplication.translate('mainwindow_ui_tr', 'Started') elif muxing == 'error': muxing_status = QCoreApplication.translate('mainwindow_ui_tr', 'Error') elif muxing == 'complete': muxing_status = QCoreApplication.translate('mainwindow_ui_tr', 'Complete') else: video_finder_status = QCoreApplication.translate('mainwindow_ui_tr', 'Not Active') muxing_status = QCoreApplication.translate('mainwindow_ui_tr', 'Not Active') if self.download_table.item(selected_row_return, 1).text() == 'complete' and self.download_table.item(row, 1).text() == 'complete': # show muxing_pushButton self.muxing_pushButton.show() else: # hide muxing_pushButton self.muxing_pushButton.hide() # set labels self.video_finder_status_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Status: ") + video_finder_status) self.muxing_status_label.setText( QCoreApplication.translate("mainwindow_ui_tr", "Muxing status: ") + muxing_status) else: # hide video_finder_widget self.video_finder_widget.hide() else: # hide video_finder_widget self.video_finder_widget.hide() else: self.progressAction.setEnabled(False) self.resumeAction.setEnabled(False) self.stopAction.setEnabled(False) self.pauseAction.setEnabled(False) self.propertiesAction.setEnabled(False) self.openDownloadFolderAction.setEnabled(False) self.openFileAction.setEnabled(False) self.moveSelectedDownloadsAction.setEnabled(False) # hide video_finder_widget self.video_finder_widget.hide() # Check if this link is related to video finder or not def checkVideoFinderSupportedSites(self, link): # add your favorite site in this list # please don't add porn sites! supported_sites_list = [ 'youtube.com/watch', 'aparat.com/v/', 'vimeo.com/', 'dailymotion.com/video', 'https://soundcloud.com/' ] video_finder_supported = False for supported_site in supported_sites_list: if supported_site in link: video_finder_supported = True break return video_finder_supported # when user requests calls persepolis with browser plugin, # this method is called by CheckingThread. def checkPluginCall(self): global plugin_links_checked # get new links from plugins_db list_of_links = self.plugins_db.returnNewLinks() # notify that job is done!and new links can be received form plugins_db plugin_links_checked = True not_video_finder_links = [] # Store non-video_finder links to process normally. # get maximum of youtube,... link from persepolis_setting max_links = int(self.persepolis_setting.value('settings/video_finder/max_links', 3)) for link in list_of_links: video_finder_supported = self.checkVideoFinderSupportedSites(link['link']) # if link is on of supported_sites_list member, the open video_finder_addlink_window if max_links and video_finder_supported: max_links = max_links - 1 self.showVideoFinderAddLinkWindow(input_dict=link) else: # if link is not on of supported_sites_list then add it to not_video_finder_links not_video_finder_links.append(link) # video_finder links also will stay here, those coming after specified max. list_of_links = not_video_finder_links # It means we have only one link in list_of_links if len(list_of_links) == 1: # this line calls pluginAddLink method and send a dictionary that contains # link information if str(self.persepolis_setting.value('settings/dont-show-addlinkwindow')) == 'yes': # When a download request is sent from the browser extension, # the download will start without showing the Add Link window. # add default values to add_link_dictionary for key in ['start_time', 'end_time', 'ip', 'port', 'proxy_user', 'proxy_passwd', 'proxy_type', 'download_user', 'download_passwd']: list_of_links[0][key] = None list_of_links[0]['connections'] = int(self.persepolis_setting.value('settings/connections')) list_of_links[0]['limit_value'] = 0 list_of_links[0]['download_path'] = str(self.persepolis_setting.value('settings/download_path')) # Call callBack methods instead of pluginAddLink method. # In this case, the download will start without showing the add link window. self.callBack(list_of_links[0], False, 'Single Downloads') else: self.pluginAddLink(list_of_links[0]) elif len(list_of_links): # we have queue request from browser plugin # Length non-zero self.pluginQueue(list_of_links) # this method creates an addlinkwindow when user calls Persepolis with # browsers plugin (Single Download) def pluginAddLink(self, add_link_dictionary): # check if gost is installed global socks5_to_http_convertor_is_installed # create an object for AddLinkWindow and add it to addlinkwindows_list. addlinkwindow = AddLinkWindow(self, self.callBack, self.persepolis_setting, socks5_to_http_convertor_is_installed, add_link_dictionary) self.addlinkwindows_list.append(addlinkwindow) self.addlinkwindows_list[-1].show() # bring addlinkwindow on top self.addlinkwindows_list[-1].raise_() self.addlinkwindows_list[-1].activateWindow() # This method creates addlinkwindow when user presses plus button in MainWindow def addLinkButtonPressed(self, button=None): # check if gost is installed global socks5_to_http_convertor_is_installed addlinkwindow = AddLinkWindow(self, self.callBack, self.persepolis_setting, socks5_to_http_convertor_is_installed) self.addlinkwindows_list.append(addlinkwindow) self.addlinkwindows_list[-1].show() # callback of AddLinkWindow def callBack(self, add_link_dictionary, download_later, category): exists = self.persepolis_db.searchLinkInAddLinkTable(add_link_dictionary['link']) if exists: self.msgBox = QMessageBox() self.msgBox.setText(QCoreApplication.translate("mainwindow_src_ui_tr", "
This link has been added before!\ Are you sure you want to add it again?
")) self.msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) self.msgBox.setIcon(QMessageBox.Warning) reply = self.msgBox.exec_() # do nothing if user clicks NO if reply != QMessageBox.Yes: return category = str(category) # aria2 identifies each download by the ID called GID. The GID must be # hex string of 16 characters. # if user presses ok button on add link window , a gid generates for download. gid = self.gidGenerator() # add gid to add_link_dictionary add_link_dictionary['gid'] = gid # download_info_file_list is a list that contains ['file_name' , # 'status' , 'size' , 'downloaded size' ,'download percentage' , # 'number of connections' ,'Transfer rate' , 'estimate_time_left' , # 'gid' , 'link' , 'first_try_date' , 'last_try_date', 'category'] # if user or browser_plugin defined filename then file_name is valid in # add_link_dictionary['out'] if add_link_dictionary['out']: file_name = add_link_dictionary['out'] else: file_name = '***' # If user selected a queue in add_link window , then download must be # added to queue and and download must be started with queue so >> # download_later = True if str(category) != 'Single Downloads': download_later = True if not (download_later): status = 'waiting' else: status = 'stopped' # get now time and date date = download.nowDate() download_table_dict = {'file_name': file_name, 'status': status, 'size': '***', 'downloaded_size': '***', 'percent': '***', 'connections': '***', 'rate': '***', 'estimate_time_left': '***', 'gid': gid, 'link': add_link_dictionary['link'], 'first_try_date': date, 'last_try_date': date, 'category': category} # write information in data_base self.persepolis_db.insertInDownloadTable([download_table_dict]) self.persepolis_db.insertInAddLinkTable([add_link_dictionary]) # find selected category in left side panel for i in range(self.category_tree_model.rowCount()): category_tree_item_text = str( self.category_tree_model.index(i, 0).data()) if category_tree_item_text == category: category_index = i break # highlight selected category in category_tree category_tree_model_index = self.category_tree_model.index( category_index, 0) current_category_tree_text = current_category_tree_index.data() self.category_tree.setCurrentIndex(category_tree_model_index) if current_category_tree_text != category: self.categoryTreeSelected(category_tree_model_index) else: # create a row in download_table for new download download_table_list = [file_name, status, '***', '***', '***', '***', '***', '***', gid, add_link_dictionary['link'], date, date, category] self.download_table.insertRow(0) j = 0 # add item in list to the row for i in download_table_list: item = QTableWidgetItem(i) self.download_table.setItem(0, j, item) j = j + 1 # if user didn't press download_later_pushButton in add_link window # then create new qthread for new download! if not (download_later): new_download = DownloadLink(gid, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].ARIA2NOTRESPOND.connect(self.aria2NotRespond) # open progress window for download. self.progressBarOpen(gid) # notify user # check that download scheduled or not if not (add_link_dictionary['start_time']): message = QCoreApplication.translate("mainwindow_src_ui_tr", "Download Starts") else: new_spider = SpiderThread(add_link_dictionary, self) self.threadPool.append(new_spider) self.threadPool[-1].start() self.threadPool[-1].SPIDERSIGNAL.connect(self.spiderUpdate) message = QCoreApplication.translate("mainwindow_src_ui_tr", "Download Scheduled") notifySend(message, '', 10000, 'no', parent=self) else: new_spider = SpiderThread(add_link_dictionary, self) self.threadPool.append(new_spider) self.threadPool[-1].start() self.threadPool[-1].SPIDERSIGNAL.connect(self.spiderUpdate) # when user presses resume button this method is called def resumeButtonPressed(self, button=None): self.resumeAction.setEnabled(False) # find user's selected row selected_row_return = self.selectedRow() if selected_row_return is not None: # find download category category = self.download_table.item(selected_row_return, 12).text() # if category is not "single downloads" , then send notification for error if category != "Single Downloads": notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful."), QCoreApplication.translate("mainwindow_src_ui_tr", "Please resume the following category: ") + category, 10000, 'fail', parent=self) return # find download gid gid = self.download_table.item(selected_row_return, 8).text() download_status = self.download_table.item( selected_row_return, 1).text() # this 'if' checks status of download before resuming! If download status # is 'paused' then download must be resumed and if status isn't 'paused' new # download thread must be created ! if download_status == "paused": answer = download.downloadUnpause(gid) # if aria2 did not respond , then this function checks for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # called. if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.aria2Disconnected() notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Persepolis is trying to connect!be patient!"), 10000, 'warning', parent=self) else: notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Try again!"), 10000, 'warning', parent=self) else: # check if the gid is related to video finder if gid in self.all_video_finder_gid_list: result_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if result_dictionary['checking'] == 'no': # create new thread for this download # see VideoFinder thread for more information new_download = VideoFinder(result_dictionary, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].VIDEOFINDERCOMPLETED.connect(self.videoFinderCompleted) # add thread to video_finder_threads_dict self.video_finder_threads_dict[result_dictionary['video_gid']] = new_download else: # we already have an active tread for this download... notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) # show the download progress window if gid in self.progress_window_list_dict.keys(): # find progress_window for this gid and show it to user member_number = self.progress_window_list_dict[gid] progress_window = self.progress_window_list[member_number] progress_window.show() progress_window.raise_() progress_window.activateWindow() else: # create new download thread new_download = DownloadLink(gid, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].ARIA2NOTRESPOND.connect(self.aria2NotRespond) # create new progress_window self.progressBarOpen(gid) # this method called if aria2 crashed or disconnected! def aria2NotRespond(self): self.aria2Disconnected() notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", 'Aria2 did not respond'), QCoreApplication.translate("mainwindow_src_ui_tr", 'Try again'), 5000, 'critical', parent=self) self.reconnectAria('Please restart aria2c') # this method called if user presses stop button in MainWindow def stopButtonPressed(self, button=None): self.stopAction.setEnabled(False) selected_row_return = self.selectedRow() # finding user's selected row if selected_row_return is not None: # find download category category = self.download_table.item(selected_row_return, 12).text() # if category is not "single downloads" , then send notification for error if category != "Single Downloads": notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful."), QCoreApplication.translate("mainwindow_src_ui_tr", "Please stop the following category: ") + category, 10000, 'fail', parent=self) return gid = self.download_table.item(selected_row_return, 8).text() # check if this gid is related to video finder if gid in self.all_video_finder_gid_list: result_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) video_finder_plus_gid = 'video_finder_' + str(result_dictionary['video_gid']) # cancel shut down progress dictionary = {'category': video_finder_plus_gid, 'shutdown': 'canceled'} self.temp_db.updateQueueTable(dictionary) else: # change status of shutdown in temp_db dictionary = {'gid': gid, 'shutdown': 'canceled'} self.temp_db.updateSingleTable(dictionary) answer = download.downloadStop(gid, self) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if answer == 'None': version_answer = download.aria2Version() if version_answer == 'did not respond': self.aria2Disconnected() notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Persepolis is trying to connect!be patient!"), 10000, 'warning', parent=self) # this method called if user presses pause button in MainWindow def pauseButtonPressed(self, button=None): self.pauseAction.setEnabled(False) # find selected row selected_row_return = self.selectedRow() if selected_row_return is not None: # find download category category = self.download_table.item(selected_row_return, 12).text() # if category is not "single downloads" , then send notification for error if category != "Single Downloads": notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful."), QCoreApplication.translate("mainwindow_src_ui_tr", "Please stop the following category: ") + category, 10000, 'fail', parent=self) return # find download gid gid = self.download_table.item(selected_row_return, 8).text() # send pause request to aria2 answer = download.downloadPause(gid, self) # if aria2 did not respond , then check aria2 availability! # and if aria2 disconnected then call aria2Disconnected if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.aria2Disconnected() download.downloadStop(gid, self) notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Persepolis is trying to connect! be patient!"), 10000, 'warning', parent=self) else: notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Please try again."), 10000, 'critical', parent=self) # This method called if properties button pressed by user in MainWindow def propertiesButtonPressed(self, button=None): result_dictionary = None self.propertiesAction.setEnabled(False) selected_row_return = self.selectedRow() # finding user's selected row if selected_row_return is not None: # find gid of download gid = self.download_table.item(selected_row_return, 8).text() # check if the gid is related to video finder if gid in self.all_video_finder_gid_list: result_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if result_dictionary['checking'] == 'yes': # this link is in downloading queue by video finder notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) # show the download progress window if gid in self.progress_window_list_dict.keys(): # find progress_window for this gid and show it to user member_number = self.progress_window_list_dict[gid] progress_window = self.progress_window_list[member_number] progress_window.show() progress_window.raise_() progress_window.activateWindow() return # creating propertieswindow global socks5_to_http_convertor_is_installed propertieswindow = PropertiesWindow( self, self.propertiesCallback, gid, self.persepolis_setting, socks5_to_http_convertor_is_installed, result_dictionary) self.propertieswindows_list.append(propertieswindow) self.propertieswindows_list[-1].show() # callBack of PropertiesWindow def propertiesCallback(self, add_link_dictionary, gid, category, video_finder_dictionary=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect( partial(self.propertiesCallback2, add_link_dictionary, gid, category, video_finder_dictionary)) else: self.propertiesCallback2(add_link_dictionary, gid, category, video_finder_dictionary) def propertiesCallback2(self, add_link_dictionary, gid, category, video_finder_dictionary=None): # current_category_tree_text is current category # that highlighted by user # in the left side panel current_category_tree_text = str( self.category_tree.currentIndex().data()) selected_row_return = self.selectedRow() # find user's selected row # find current category before changing current_category = self.download_table.item( selected_row_return, 12).text() if video_finder_dictionary: # add audio and video gid to the gid list gid_list = [video_finder_dictionary['video_gid'], video_finder_dictionary['audio_gid']] else: gid_list = [gid] # find row of gid in gid_list! for gid in gid_list: row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break if row: if current_category_tree_text == 'All Downloads': # update category in download_table item = QTableWidgetItem(str(category)) self.download_table.setItem(row, 12, item) elif (str(current_category) != str(category)): # remove row from download_table self.download_table.removeRow(row) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # This method is called if user presses "show/hide progress window" button in # MainWindow def progressButtonPressed(self, button=None): # find user's selected row selected_row_return = self.selectedRow() if selected_row_return is not None: gid = self.download_table.item(selected_row_return, 8).text() # if gid is in self.progress_window_list_dict , it means that progress # window for this gid (for this download) is created before and it's # available! See progressBarOpen method for more information. if gid in self.progress_window_list_dict: # find member_number of window in progress_window_list_dict member_number = self.progress_window_list_dict[gid] # if window is visible >> hide it , # and if window is hide >> make it visible! if self.progress_window_list[member_number].isVisible(): self.progress_window_list[member_number].hide() else: self.progress_window_list[member_number].show() else: # if window is not availabile in progress_window_list_dict # so let's create it! self.progressBarOpen(gid) # This method creates new ProgressWindow def progressBarOpen(self, gid): dictionary = None # check if it's related to video finder or not if gid in self.all_video_finder_gid_list: dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) # it's related to video finder. so make a gid list for video and audio link! gid_list = [dictionary['video_gid'], dictionary['audio_gid']] # create a video finder progress window. progress_window = VideoFinderProgressWindow(self, gid_list, self.persepolis_setting) else: # create an ordinary progress_window progress_window = ProgressWindow( parent=self, gid=gid, persepolis_setting=self.persepolis_setting) # add progress window to progress_window_list self.progress_window_list.append(progress_window) member_number = len(self.progress_window_list) - 1 # in progress_window_list_dict , key is gid and value is member's # rank(number) in progress_window_list if dictionary: self.progress_window_list_dict[dictionary['video_gid']] = member_number self.progress_window_list_dict[dictionary['audio_gid']] = member_number else: self.progress_window_list_dict[gid] = member_number # check user preferences # user can hide progress window in settings window. if str(self.persepolis_setting.value('settings/show-progress')) == 'yes': # show progress window self.progress_window_list[member_number].show() else: # hide progress window self.progress_window_list[member_number].hide() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() # close event # when user closes application then this method is called def closeEvent(self, event=None): if str(self.persepolis_setting.value('settings/hide-window')) == 'yes': # set close event just for minimizing to tray self.minimizeAction.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Show main Window')) self.minimizeAction.setIcon(QIcon(icons + 'window')) else: # close window and exit application self.closeAction(event) # close application actions is in this method (to close program completely this method must call) def closeAction(self, event=None): # save window size and position self.persepolis_setting.setValue('MainWindow/size', self.size()) self.persepolis_setting.setValue('MainWindow/position', self.pos()) # save columns size self.persepolis_setting.setValue('MainWindow/column0', self.download_table.columnWidth(0)) self.persepolis_setting.setValue('MainWindow/column1', self.download_table.columnWidth(1)) self.persepolis_setting.setValue('MainWindow/column2', self.download_table.columnWidth(2)) self.persepolis_setting.setValue('MainWindow/column3', self.download_table.columnWidth(3)) self.persepolis_setting.setValue('MainWindow/column4', self.download_table.columnWidth(4)) self.persepolis_setting.setValue('MainWindow/column5', self.download_table.columnWidth(5)) self.persepolis_setting.setValue('MainWindow/column6', self.download_table.columnWidth(6)) self.persepolis_setting.setValue('MainWindow/column7', self.download_table.columnWidth(7)) self.persepolis_setting.setValue('MainWindow/column10', self.download_table.columnWidth(10)) self.persepolis_setting.setValue('MainWindow/column11', self.download_table.columnWidth(11)) self.persepolis_setting.setValue('MainWindow/column12', self.download_table.columnWidth(12)) # save maximizing situation if self.isMaximized(): self.persepolis_setting.setValue('MainWindow/maximized', 'yes') else: self.persepolis_setting.setValue('MainWindow/maximized', 'no') # sync persepolis_setting # make sure all settings is saved. self.persepolis_setting.sync() # hide MainWindow self.hide() # write message in log and console logger.sendToLog("Please wait ...", "INFO") # stop all downloads self.stopAllDownloads(event) # hide system_tray_icon self.system_tray_icon.hide() download.shutDown() # shutting down Aria2 sleep(0.5) global shutdown_notification # see start of this script and see inherited QThreads # shutdown_notification = 0 >> persepolis running , 1 >> persepolis is # ready for close(closeEvent called) , 2 >> OK, let's close application! shutdown_notification = 1 while shutdown_notification != 2: sleep(0.1) # close data bases connections for db in self.persepolis_db, self.plugins_db, self.temp_db: db.closeConnections() for i in self.threadPool: i.quit() i.wait() for i in self.socks5_to_http_convertor_list: i.stop() QCoreApplication.instance().quit logger.sendToLog("Persepolis closed!", "INFO") sys.exit(0) # showTray method shows/hides persepolis's icon in system tray icon def showTray(self, menu=None): # check if user checked trayAction in menu or not if self.trayAction.isChecked(): # show system_tray_icon self.system_tray_icon.show() # enable minimizeAction in menu self.minimizeAction.setEnabled(True) tray_icon = 'yes' else: # hide system_tray_icon self.system_tray_icon.hide() # disabaling minimizeAction in menu self.minimizeAction.setEnabled(False) tray_icon = 'no' # write changes in persepolis_setting self.persepolis_setting.setValue('settings/tray-icon', tray_icon) self.persepolis_setting.sync() # this method shows/hides menubar and # it's called when user toggles showMenuBarAction in view menu def showMenuBar(self, menu=None): # persepolis has 2 menu bar # 1. menubar in main window # 2. qmenu(see mainwindow_ui.py file for more information) # qmenu is in toolBar2 # user can toggle between viewing menu1 or menu2 with showMenuBarAction # check if showMenuBarAction is checked or unchecked if self.showMenuBarAction.isChecked(): # show menubar and hide toolBar2 self.menubar.show() self.toolBar2.hide() show_menubar = 'yes' else: # hide menubar and show toolBar2 self.menubar.hide() self.toolBar2.show() show_menubar = 'no' # writing changes to persepolis_setting self.persepolis_setting.setValue('settings/show-menubar', show_menubar) self.persepolis_setting.sync() # this method shows/hides left side panel # this method is called if user toggles showSidePanelAction in view menu def showSidePanel(self, menu=None): if self.showSidePanelAction.isChecked(): self.category_tree_qwidget.show() show_sidepanel = 'yes' else: self.category_tree_qwidget.hide() show_sidepanel = 'no' # write changes to persepolis_setting self.persepolis_setting.setValue( 'settings/show-sidepanel', show_sidepanel) self.persepolis_setting.sync() # when user left clicks on persepolis's system tray icon,then # this method is called def systemTrayPressed(self, click): if click == QSystemTrayIcon.Trigger: self.minMaxTray(click) # when minMaxTray method called ,this method shows/hides main window def minMaxTray(self, menu=None): # hide MainWindow if it's visible # Show MainWindow if it's hided if self.isVisible(): self.minimizeAction.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Show main Window')) self.minimizeAction.setIcon(QIcon(icons + 'window')) self.hide() else: self.show() self.minimizeAction.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Minimize to system tray')) self.minimizeAction.setIcon(QIcon(icons + 'minimize')) # showMainWindow shows main window in normal mode , see CheckingThread def showMainWindow(self): self.showNormal() self.minimizeAction.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Minimize to system tray')) self.minimizeAction.setIcon(QIcon(icons + 'minimize')) # stopAllDownloads stops all downloads def stopAllDownloads(self, menu=None): # stop all queues for queue in self.queue_list_dict.values(): queue.stop = True queue.start = False # stop single downloads # get active download list from data base active_gid_list = self.persepolis_db.findActiveDownloads('Single Downloads') for gid in active_gid_list: answer = download.downloadStop(gid, self) # if aria2 did not respond , then this function is checking for # aria2 availability , and if aria2 disconnected then # aria2Disconnected is executed if answer == 'None': version_answer = download.aria2Version() if version_answer == 'did not respond': self.aria2Disconnected() # this method creates Preferences window def openPreferences(self, menu=None): self.preferenceswindow = PreferencesWindow( self, self.persepolis_setting) # show Preferences Window self.preferenceswindow.show() # this method is creating AboutWindow def openAbout(self, menu=None): about_window = AboutWindow(self.persepolis_setting) self.about_window_list.append(about_window) self.about_window_list[-1].show() # This method opens user's default download folder def openDefaultDownloadFolder(self, menu=None): # find user's default download folder from persepolis_setting self.persepolis_setting.sync() download_path = self.persepolis_setting.value('settings/download_path') # check that if download folder is availabile or not if os.path.isdir(download_path): # open folder osCommands.xdgOpen(download_path, 'folder', 'folder') else: # show error message if folder didn't existed notifySend(str(download_path), QCoreApplication.translate("mainwindow_src_ui_tr", 'Not Found'), 5000, 'warning', parent=self) # this method opens download folder , if download was finished def openDownloadFolder(self, menu=None): # find user's selected row selected_row_return = self.selectedRow() if selected_row_return is not None: # find gid gid = self.download_table.item( selected_row_return, 8).text() # find status download_status = self.download_table.item( selected_row_return, 1).text() if download_status == 'complete': # check if this link is related to video finder # don't open download folder, if download progress for video and audio aren't completed yet. video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if video_finder_dictionary: notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) return # find download path dictionary = self.persepolis_db.searchGidInAddLinkTable(gid) download_path = dictionary['download_path'] # check that if download_path existed if os.path.isfile(download_path): # open file osCommands.xdgOpen(download_path, 'folder', 'file') else: # showing error message , if folder didn't existed notifySend(str(download_path), QCoreApplication.translate("mainwindow_src_ui_tr", 'Not Found'), 5000, 'warning', parent=self) # this method executes(opens) download file if download's progress was finished def openFile(self, menu=None): # find user's selected row selected_row_return = self.selectedRow() if selected_row_return is not None: # find gid gid = self.download_table.item( selected_row_return, 8).text() # find status download_status = self.download_table.item( selected_row_return, 1).text() if download_status == 'complete': # check if this link is related to video finder # don't open download folder, if download progress for video and audio aren't completed yet. video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if video_finder_dictionary: notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) return # find download path dictionary = self.persepolis_db.searchGidInAddLinkTable(gid) file_path = dictionary['download_path'] if os.path.isfile(file_path): # open file osCommands.xdgOpen(file_path) else: # show error message , if file was deleted or moved notifySend(str(file_path), QCoreApplication.translate("mainwindow_src_ui_tr", 'Not Found'), 5000, 'warning', parent=self) # this method is called when multiple items is selected by user! def selectDownloads(self): # find highlighted item in category_tree current_category_tree_text = str(current_category_tree_index.data()) self.toolBarAndContextMenuItems(current_category_tree_text) # change actions icon if self.multi_items_selected: self.removeSelectedAction.setIcon(QIcon(icons + 'multi_remove')) self.deleteSelectedAction.setIcon(QIcon(icons + 'multi_trash')) self.moveUpSelectedAction.setIcon(QIcon(icons + 'multi_up')) self.moveDownSelectedAction.setIcon(QIcon(icons + 'multi_down')) else: self.removeSelectedAction.setIcon(QIcon(icons + 'remove')) self.deleteSelectedAction.setIcon(QIcon(icons + 'trash')) self.moveUpSelectedAction.setIcon(QIcon(icons + 'up')) self.moveDownSelectedAction.setIcon(QIcon(icons + 'down')) # this method is called when user presses 'remove selected items' button def removeSelected(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.removeSelected2) else: self.removeSelected2() def removeSelected2(self): # find selected rows! gid_list = [] for row in self.userSelectedRows(): # get download status status = self.download_table.item(row, 1).text() # find category category = self.download_table.item(row, 12).text() if category != "Single Downloads": # check queue condition! # queue must be stopped first if str(category) in self.queue_list_dict.keys(): queue_status = self.queue_list_dict[str(category)].start else: queue_status = False if queue_status: # if queue was started # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful!"), QCoreApplication.translate( "mainwindow_src_ui_tr", "Operation was not successful! Please stop the following category first: ") + category, 5000, 'fail', parent=self) continue # find gid gid = self.download_table.item(row, 8).text() # check if this link is related to video finder if gid in self.all_video_finder_gid_list: video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if gid in self.video_finder_threads_dict.keys(): # check the Video Finder tread status video_finder_thread = self.video_finder_threads_dict[video_finder_dictionary['video_gid']] if video_finder_thread.active == 'yes': notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) continue # if Video Finder thread is not active so remove both of video and audio link. else: gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue # if Video Finder thread is not active so remove both of video and audio link. else: gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue # only download items with "complete", "error" and "stopped" can be removed if (status == 'complete' or status == 'error' or status == 'stopped'): # add gid to gid_list gid_list.append(gid) else: # find filename file_name = self.download_table.item(row, 0).text() # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Please stop the following download first: ") + file_name, 5000, 'fail', parent=self) # remove duplicate items gid_list = set(gid_list) # find row number for specific gid for gid in gid_list: for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break # find status status = self.download_table.item(row, 1).text() # find filename file_name = self.download_table.item(row, 0).text() # find category category = self.download_table.item(row, 12).text() # remove row from download_table self.download_table.removeRow(row) # find download_path dictionary = self.persepolis_db.searchGidInAddLinkTable(gid) download_path = dictionary['download_path'] # remove file of download from download folder if file_name != '***' and status != 'complete': file_name_path = os.path.join( download_path, str(file_name)) osCommands.remove(file_name_path) # remove file file_name_aria = file_name_path + str('.aria2') osCommands.remove(file_name_aria) # remove file.aria # remove download item from data base self.persepolis_db.deleteItemInDownloadTable(gid, category) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method is called when user presses 'delete selected items' def deleteSelected(self, menu=None): # showing Warning message to the user. # checking persepolis_setting first! # perhaps user was checking "do not show this message again" delete_warning_message = self.persepolis_setting.value( 'MainWindow/delete-warning', 'yes') if delete_warning_message == 'yes': self.msgBox = QMessageBox() self.msgBox.setText(QCoreApplication.translate("mainwindow_src_ui_tr", "
This operation will delete \ downloaded files from your hard disk
PERMANENTLY!
")) self.msgBox.setInformativeText(QCoreApplication.translate( "mainwindow_src_ui_tr", "
Do you want to continue?
")) self.msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) self.msgBox.setIcon(QMessageBox.Warning) dont_show_checkBox = QCheckBox("don't show this message again") self.msgBox.setCheckBox(dont_show_checkBox) reply = self.msgBox.exec_() # if user checks "do not show this message again!", change persepolis_setting! if self.msgBox.checkBox().isChecked(): self.persepolis_setting.setValue( 'MainWindow/delete-warning', 'no') # do nothing if user clicks NO if reply != QMessageBox.Yes: return # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.deleteSelected2) else: self.deleteSelected2() def deleteSelected2(self): gid_list = [] # find selected rows! for row in self.userSelectedRows(): # get download status status = self.download_table.item(row, 1).text() # find category category = self.download_table.item(row, 12).text() if category != "Single Downloads": # check queue condition! # queue must be stopped first if str(category) in self.queue_list_dict.keys(): queue_status = self.queue_list_dict[str(category)].start else: queue_status = False if queue_status: # if queue was started # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Please stop the following category first: ") + category, 5000, 'fail', parent=self) continue # find gid gid = self.download_table.item(row, 8).text() # check if this link is related to video finder if gid in self.all_video_finder_gid_list: video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) if gid in self.video_finder_threads_dict.keys(): # check the Video Finder tread status video_finder_thread = self.video_finder_threads_dict[video_finder_dictionary['video_gid']] if video_finder_thread.active == 'yes': notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Download is in progress by video finder!"), QCoreApplication.translate("mainwindow_src_ui_tr", "be patient!"), 10000, 'warning', parent=self) continue # if Video Finder thread is not active so remove both of video and audio link. else: gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue else: gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue # only download items with "complete", "error" and "stopped" can be removed if (status == 'complete' or status == 'error' or status == 'stopped'): # add gid to gid_list gid_list.append(gid) else: # find filename file_name = self.download_table.item(row, 0).text() # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Stop the following download first: ") + file_name, 5000, 'fail', parent=self) # remove selected rows # remove duplicate items gid_list = set(gid_list) # find row number for specific gid for gid in gid_list: for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break # find file_name file_name = self.download_table.item(row, 0).text() # find category category = self.download_table.item(row, 12).text() # find status status = self.download_table.item(row, 1).text() # if download is not completed, # remove downloaded file form download temp folder # find download path dictionary = self.persepolis_db.searchGidInAddLinkTable(gid) if dictionary: download_path = dictionary['download_path'] if file_name != '***' and status != 'complete': file_name_path = os.path.join( download_path, str(file_name)) # remove file : file_name_path osCommands.remove(file_name_path) # remove aria2 download information file : file_name_aria file_name_aria = file_name_path + str('.aria2') osCommands.remove(file_name_aria) # remove downloaded file, if download is completed elif status == 'complete': # download is complete. so download_path == file_name_path remove_answer = osCommands.remove(download_path) # if file not existed, notify user if remove_answer == 'no': notifySend(str(file_name), QCoreApplication.translate("mainwindow_src_ui_tr", 'Not Found'), 5000, 'warning', parent=self) # remove row from download_table self.download_table.removeRow(row) # remove download item from data base self.persepolis_db.deleteItemInDownloadTable(gid, category) # telling the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method sorts download table by name def sortByName(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.sortByName2) else: self.sortByName2() def sortByName2(self): # find names and gid of downloads and save them in name_gid_dict # gid is key and name is value. gid_name_dict = {} for row in range(self.download_table.rowCount()): name = self.download_table.item(row, 0).text() gid = self.download_table.item(row, 8).text() gid_name_dict[gid] = name # sort names gid_sorted_list = sorted(gid_name_dict, key=gid_name_dict.get) # clear download_table and add sorted items self.download_table.clearContents() # find name of selected category current_category_tree_text = str(current_category_tree_index.data()) # get download information from data base if current_category_tree_text == 'All Downloads': downloads_dict = self.persepolis_db.returnItemsInDownloadTable() else: downloads_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) j = 0 for gid in gid_sorted_list: # enter download rows according to gid_sorted_list download_info = downloads_dict[gid] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] i = 0 for key in keys_list: item = QTableWidgetItem(download_info[key]) # insert item in download_table self.download_table.setItem(j, i, item) i = i + 1 j = j + 1 # save sorted list (gid_sorted_list) in data base category_dict = {'category': current_category_tree_text} # update gid_list gid_sorted_list.reverse() category_dict['gid_list'] = gid_sorted_list # update category_db_table self.persepolis_db.updateCategoryTable([category_dict]) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method sorts items in download_table by size def sortBySize(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.sortBySize2) else: self.sortBySize2() def sortBySize2(self): # find name of selected category current_category_tree_text = str(current_category_tree_index.data()) # find gid and size of downloads gid_size_dict = {} for row in range(self.download_table.rowCount()): size_str = self.download_table.item(row, 2).text() gid = self.download_table.item(row, 8).text() # convert file size to the Byte try: size_int = float(size_str[:-3]) size_symbol = str(size_str[-2]) if size_symbol == 'G': size = size_int * 1073741824 elif size_symbol == 'M': size = size_int * 1048576 elif size_symbol == 'K': size = size_int * 1024 else: # Byte size = size_int except: size = 0 # create a dictionary from gid and size of files in Bytes # gid as key and size as value gid_size_dict[gid] = size # sort gid_size_dict gid_sorted_list = sorted( gid_size_dict, key=gid_size_dict.get, reverse=True) # clear download_table by size self.download_table.clearContents() # get download information from data base if current_category_tree_text == 'All Downloads': downloads_dict = self.persepolis_db.returnItemsInDownloadTable() else: downloads_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) j = 0 for gid in gid_sorted_list: # enter download rows according to gid_sorted_list download_info = downloads_dict[gid] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] i = 0 for key in keys_list: item = QTableWidgetItem(download_info[key]) # insert item in download_table self.download_table.setItem(j, i, item) i = i + 1 j = j + 1 # save sorted list (gid_sorted_list) in data base category_dict = {'category': current_category_tree_text} # update gid_list gid_sorted_list.reverse() category_dict['gid_list'] = gid_sorted_list # update category_db_table self.persepolis_db.updateCategoryTable([category_dict]) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method sorts download_table items with status def sortByStatus(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.sortByStatus2) else: self.sortByStatus2() def sortByStatus2(self): # find name of selected category current_category_tree_text = str(current_category_tree_index.data()) # find gid and status of downloads gid_status_dict = {} for row in range(self.download_table.rowCount()): status = self.download_table.item(row, 1).text() gid = self.download_table.item(row, 8).text() # assign a number to every status if status == 'complete': status_int = 1 elif status == 'stopped': status_int = 2 elif status == 'error': status_int = 3 elif status == 'downloading': status_int = 4 elif status == 'waiting': status_int = 5 else: status_int = 6 # create a dictionary from gid and size_int of files in Bytes gid_status_dict[gid] = status_int # sort gid_status_dict gid_sorted_list = sorted(gid_status_dict, key=gid_status_dict.get) # get download information from data base if current_category_tree_text == 'All Downloads': downloads_dict = self.persepolis_db.returnItemsInDownloadTable() else: downloads_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) # clear download_table self.download_table.clearContents() j = 0 for gid in gid_sorted_list: # enter download rows according to gid_sorted_list download_info = downloads_dict[gid] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] i = 0 for key in keys_list: item = QTableWidgetItem(download_info[key]) # insert item in download_table self.download_table.setItem(j, i, item) i = i + 1 j = j + 1 # save sorted list (gid_sorted_list) in data base category_dict = {'category': current_category_tree_text} # update gid_list gid_sorted_list.reverse() category_dict['gid_list'] = gid_sorted_list # update category_db_table self.persepolis_db.updateCategoryTable([category_dict]) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method sorts download table with date added information def sortByFirstTry(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.sortByFirstTry2) else: self.sortByFirstTry2() def sortByFirstTry2(self): # find gid and first try date gid_try_dict = {} for row in range(self.download_table.rowCount()): first_try_date = self.download_table.item(row, 10).text() gid = self.download_table.item(row, 8).text() # convert date and hour in first_try_date to a number # for example , first_try_date = '2016/11/05 , 07:45:38' # must be converted to 20161105074538 first_try_date_splited = first_try_date.split(' , ') date_list = first_try_date_splited[0].split('/') hour_list = first_try_date_splited[1].split(':') date_joind = "".join(date_list) hour_joind = "".join(hour_list) date_hour_str = date_joind + hour_joind date_hour = int(date_hour_str) # create a dictionary # gid as key and date_hour as value gid_try_dict[gid] = date_hour # sort gid_sorted_list = sorted( gid_try_dict, key=gid_try_dict.get, reverse=True) # clear download_table self.download_table.clearContents() # find name of selected category current_category_tree_text = str(current_category_tree_index.data()) # get download information from data base if current_category_tree_text == 'All Downloads': downloads_dict = self.persepolis_db.returnItemsInDownloadTable() else: downloads_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) j = 0 for gid in gid_sorted_list: # enter download rows according to gid_sorted_list download_info = downloads_dict[gid] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] i = 0 for key in keys_list: item = QTableWidgetItem(download_info[key]) # insert item in download_table self.download_table.setItem(j, i, item) i = i + 1 j = j + 1 # save sorted list (gid_list) in data base category_dict = {'category': current_category_tree_text} # update gid_sorted_list gid_sorted_list.reverse() category_dict['gid_list'] = gid_sorted_list # update category_db_table self.persepolis_db.updateCategoryTable([category_dict]) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method sorts download_table with order of last modify date def sortByLastTry(self, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.sortByLastTry2) else: self.sortByLastTry2() def sortByLastTry2(self): # create a dictionary # gid as key and date_hour as value gid_try_dict = {} # find gid and last try date for download items in download_table for row in range(self.download_table.rowCount()): last_try_date = self.download_table.item(row, 11).text() gid = self.download_table.item(row, 8).text() # convert date and hour in last_try_date to a number # for example , last_try_date = '2016/11/05 , 07:45:38' # must be converted to 20161105074538 last_try_date_splited = last_try_date.split(' , ') date_list = last_try_date_splited[0].split('/') hour_list = last_try_date_splited[1].split(':') date_joind = "".join(date_list) hour_joind = "".join(hour_list) date_hour_str = date_joind + hour_joind date_hour = int(date_hour_str) # add gid and date_hour to gid_try_dict gid_try_dict[gid] = date_hour # sort gid_sorted_list = sorted( gid_try_dict, key=gid_try_dict.get, reverse=True) # clear download_table self.download_table.clearContents() # find name of selected category current_category_tree_text = str(current_category_tree_index.data()) # get download information from data base if current_category_tree_text == 'All Downloads': downloads_dict = self.persepolis_db.returnItemsInDownloadTable() else: downloads_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) j = 0 for gid in gid_sorted_list: # enter download rows according to gid_sorted_list download_info = downloads_dict[gid] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] i = 0 for key in keys_list: item = QTableWidgetItem(download_info[key]) # insert item in download_table self.download_table.setItem(j, i, item) i = i + 1 j = j + 1 # save sorted list (gid_list) in data base category_dict = {'category': current_category_tree_text} # update gid_sorted_list gid_sorted_list.reverse() category_dict['gid_list'] = gid_sorted_list # update category_db_table self.persepolis_db.updateCategoryTable([category_dict]) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method called , when user clicks on 'create new queue' button in # main window. def createQueue(self, menu=None): text, ok = QInputDialog.getText( self, 'Queue', 'Enter queue name:', text='queue') if not (ok): return None queue_name = str(text) if ok and queue_name != '' and queue_name != 'Single Downloads': # check queue_name if exists! answer = self.persepolis_db.searchCategoryInCategoryTable(queue_name) # show Error window if queue before if answer: error_messageBox = QMessageBox() error_messageBox.setText( '"' + queue_name + QCoreApplication.translate("mainwindow_src_ui_tr", '" already exists!')) error_messageBox.setWindowTitle('Error!') error_messageBox.exec_() return None # insert new item in category_tree new_queue_category = QStandardItem(queue_name) font = QFont() font.setBold(True) new_queue_category.setFont(font) new_queue_category.setEditable(False) self.category_tree_model.appendRow(new_queue_category) dict = {'category': queue_name, 'start_time_enable': 'no', 'start_time': '0:0', 'end_time_enable': 'no', 'end_time': '0:0', 'reverse': 'no', 'limit_enable': 'no', 'limit_value': '0K', 'after_download': 'no', 'gid_list': '[]' } # insert new category in data base self.persepolis_db.insertInCategoryTable(dict) # highlight new category in category_tree # find item for i in range(self.category_tree_model.rowCount()): category_tree_item_text = str( self.category_tree_model.index(i, 0).data()) if category_tree_item_text == queue_name: category_index = i break # highlighting category_tree_model_index = self.category_tree_model.index( category_index, 0) self.category_tree.setCurrentIndex(category_tree_model_index) self.categoryTreeSelected(category_tree_model_index) # return queue_name return queue_name # this method creates a BrowserPluginQueue window for list of links. def pluginQueue(self, list_of_links): # create window global socks5_to_http_convertor_is_installed plugin_queue_window = BrowserPluginQueue( self, list_of_links, self.queueCallback, socks5_to_http_convertor_is_installed, self.persepolis_setting) self.plugin_queue_window_list.append(plugin_queue_window) self.plugin_queue_window_list[-1].show() # bring plugin_queue_window on top self.plugin_queue_window_list[-1].raise_() self.plugin_queue_window_list[-1].activateWindow() # this method is importing a text file for creating queue . # text file must contain links . 1 link per line! def importText(self, menu=None): # get file path f_path, filters = QFileDialog.getOpenFileName( self, 'Select the text file that contains links') # check if the gost is installed. global socks5_to_http_convertor_is_installed # if path is correct: if os.path.isfile(str(f_path)): # create a text_queue_window for getting information. text_queue_window = TextQueue( self, f_path, self.queueCallback, socks5_to_http_convertor_is_installed, self.persepolis_setting) self.text_queue_window_list.append(text_queue_window) self.text_queue_window_list[-1].show() # this method is importing download links from clipboard. # clipboard must contain links. def importLinksFromClipboard(self, menu=None): # show main window self.showMainWindow() check_main_window_state_thread = CheckClipboardStateThread() self.threadPool.append(check_main_window_state_thread) self.threadPool[-1].start() self.threadPool[-1].WINDOWISACTIVESIGNAL.connect( self.importLinksFromClipboard2) def importLinksFromClipboard2(self): # get links from clipboard clipboard = QApplication.clipboard().text() # create a list from links links_list = clipboard.splitlines() for item in links_list: if (("tp:/" in item[2:6]) or ("tps:/" in item[2:7])): continue else: links_list.remove(item) # create temp file to save links if len(links_list) == 1: video_finder_supported = self.checkVideoFinderSupportedSites(links_list[0]) if video_finder_supported is True: self.showVideoFinderAddLinkWindow() else: self.addLinkButtonPressed(button=None) elif len(links_list) > 1: temp = tempfile.NamedTemporaryFile(mode="w+", prefix="persepolis") temp.write(clipboard) temp.flush() temp_file_path = temp.name # create a text_queue_window for getting information. text_queue_window = TextQueue( self, temp_file_path, self.queueCallback, socks5_to_http_convertor_is_installed, self.persepolis_setting) self.text_queue_window_list.append(text_queue_window) self.text_queue_window_list[-1].show() # close temp file (delete file) temp.close() # callback of text_queue_window and plugin_queue_window.AboutWindow # See importText and pluginQueue method for more information. def queueCallback(self, add_link_dictionary_list, category): download_table_dict_list = [] # defining path of category_file selected_category = str(category) # highlight selected category in category_tree # first of all find category_index of item! for i in range(self.category_tree_model.rowCount()): category_tree_item_text = str( self.category_tree_model.index(i, 0).data()) if category_tree_item_text == selected_category: category_index = i break # second: find category_tree_model_index category_tree_model_index = self.category_tree_model.index( category_index, 0) # third: highlight item self.category_tree.setCurrentIndex(category_tree_model_index) self.categoryTreeSelected(category_tree_model_index) download_table_list = [] # get now time and date date = download.nowDate() # add dictionary of downloads to data base for add_link_dictionary in add_link_dictionary_list: # aria2 identifies each download by the ID called GID. The GID must # be hex string of 16 characters. gid = self.gidGenerator() add_link_dictionary['gid'] = gid # download_info_file_list is a list that contains ['file_name' , # 'status' , 'size' , 'downloaded size' ,'download percentage' , # 'number of connections' ,'Transfer rate' , 'estimate_time_left' , # 'gid' , 'link' , 'first_try_date' , 'last_try_date', 'category'] # if user or browser_plugin defined filename then file_name is valid in # add_link_dictionary['out'] if add_link_dictionary['out']: file_name = add_link_dictionary['out'] else: file_name = '***' download_table_list = [file_name, 'stopped', '***', '***', '***', '***', '***', '***', gid, add_link_dictionary['link'], date, date, category] dictionary = {'file_name': file_name, 'status': 'stopped', 'size': '***', 'downloaded_size': '***', 'percent': '***', 'connections': '***', 'rate': '***', 'estimate_time_left': '***', 'gid': gid, 'link': add_link_dictionary['link'], 'first_try_date': date, 'last_try_date': date, 'category': category} download_table_dict_list.append(dictionary) # create a row in download_table self.download_table.insertRow(0) j = 0 for i in download_table_list: item = QTableWidgetItem(i) self.download_table.setItem(0, j, item) j = j + 1 # spider is finding file size and file name new_spider = SpiderThread(add_link_dictionary, self) self.threadPool.append(new_spider) self.threadPool[-1].start() self.threadPool[-1].SPIDERSIGNAL.connect(self.spiderUpdate) # write information in data_base self.persepolis_db.insertInDownloadTable(download_table_dict_list) self.persepolis_db.insertInAddLinkTable(add_link_dictionary_list) # this method is called , when user clicks on an item in # category_tree (left side panel) def categoryTreeSelected(self, item): new_selection = item if current_category_tree_index != new_selection: # if checking_flag is equal to 1, it means that user pressed remove # or delete button or ... . so checking download information must # be stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect( partial(self.categoryTreeSelected2, new_selection)) else: self.categoryTreeSelected2(new_selection) def categoryTreeSelected2(self, new_selection): global current_category_tree_index # clear download_table self.download_table.setRowCount(0) # old_selection_index old_selection_index = current_category_tree_index # finding name of old_selection_index old_category_tree_item_text = str(old_selection_index.data()) queue_dict = {'category': old_category_tree_item_text} # start_checkBox if self.start_checkBox.isChecked(): queue_dict['start_time_enable'] = 'yes' else: queue_dict['start_time_enable'] = 'no' # end_checkBox if self.end_checkBox.isChecked(): queue_dict['end_time_enable'] = 'yes' else: queue_dict['end_time_enable'] = 'no' # start_time_qDataTimeEdit start_time = self.start_time_qDataTimeEdit.text() queue_dict['start_time'] = str(start_time) # end_time_qDateTimeEdit end_time = self.end_time_qDateTimeEdit.text() queue_dict['end_time'] = str(end_time) # reverse_checkBox if self.reverse_checkBox.isChecked(): queue_dict['reverse'] = 'yes' else: queue_dict['reverse'] = 'no' # limit_checkBox if self.limit_checkBox.isChecked(): queue_dict['limit_enable'] = 'yes' else: queue_dict['limit_enable'] = 'no' # limit_comboBox and limit_spinBox if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") queue_dict['limit_value'] = str(limit) # after_checkBox if self.after_checkBox.isChecked(): queue_dict['after_download'] = 'yes' else: queue_dict['after_download'] = 'no' # if old_selection_index.data() is equal to None >> It means queue is # deleted! and no text (data) available for it if old_selection_index.data(): # update data base self.persepolis_db.updateCategoryTable([queue_dict]) # update download_table current_category_tree_index = new_selection # find category current_category_tree_text = str( self.category_tree.currentIndex().data()) # read download items from data base if current_category_tree_text == 'All Downloads': download_table_dict = self.persepolis_db.returnItemsInDownloadTable() else: download_table_dict = self.persepolis_db.returnItemsInDownloadTable(current_category_tree_text) # get gid_list category_dict = self.persepolis_db.searchCategoryInCategoryTable(current_category_tree_text) gid_list = category_dict['gid_list'] keys_list = ['file_name', 'status', 'size', 'downloaded_size', 'percent', 'connections', 'rate', 'estimate_time_left', 'gid', 'link', 'first_try_date', 'last_try_date', 'category' ] # insert items in download_table for gid in gid_list: # create new row self.download_table.insertRow(0) dictionary = download_table_dict[gid] i = 0 for key in keys_list: item = QTableWidgetItem(str(dictionary[key])) self.download_table.setItem(0, i, item) i = i + 1 # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # update toolBar and tablewidget_menu items self.toolBarAndContextMenuItems(str(current_category_tree_text)) # this method changes toolabr and context menu items when new item # highlighted by user in category_tree def toolBarAndContextMenuItems(self, category): # clear toolBar and context menus. # it makes them ready for adding # new items that suitable with new selected category. # clear toolBar self.toolBar.clear() # clear context menu of download_table self.download_table.tablewidget_menu.clear() # clear context menu of category_tree self.category_tree.category_tree_menu.clear() queueAction = QAction(QIcon(icons + 'add'), 'Single Downloads', self, statusTip="Add to Single Downloads", triggered=partial(self.addToQueue, 'Single Downloads')) # check if user checked selection mode if self.multi_items_selected: self.download_table.sendMenu = self.download_table.tablewidget_menu.addMenu( QCoreApplication.translate("mainwindow_src_ui_tr", 'Send selected downloads to')) else: self.download_table.sendMenu = self.download_table.tablewidget_menu.addMenu( QCoreApplication.translate("mainwindow_src_ui_tr", 'Send to')) # get categories list from data base categories_list = self.persepolis_db.categoriesList() # add categories name to sendMenu for category_name in categories_list: if category_name != category and category_name != 'All Downloads': queueAction = QAction(QIcon(icons + 'add_queue'), category_name, self, statusTip="Add to" + category_name, triggered=partial(self.addToQueue, category_name)) self.download_table.sendMenu.addAction(queueAction) if category == 'All Downloads': # hide queue_panel_widget(lef side down panel) self.queue_panel_widget.hide() # update toolBar list = [self.addlinkAction, self.videoFinderAddLinkAction, self.resumeAction, self.pauseAction, self.stopAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.progressAction, self.minimizeAction, self.exitAction] for i in list: self.toolBar.addAction(i) self.toolBar.insertSeparator(self.resumeAction) self.toolBar.insertSeparator(self.removeSelectedAction) self.toolBar.insertSeparator(self.propertiesAction) self.toolBar.insertSeparator(self.minimizeAction) self.toolBar.addSeparator() # add actions to download_table's context menu list = [self.openFileAction, self.openDownloadFolderAction, self.resumeAction, self.pauseAction, self.stopAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.progressAction, self.moveSelectedDownloadsAction] for action in list: self.download_table.tablewidget_menu.addAction(action) elif category == 'Single Downloads': # hide queue_panel_widget self.queue_panel_widget.hide() self.queuePanelWidget(category) # update toolBar list = [self.addlinkAction, self.videoFinderAddLinkAction, self.resumeAction, self.pauseAction, self.stopAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.progressAction, self.minimizeAction, self.exitAction] for i in list: self.toolBar.addAction(i) self.toolBar.insertSeparator(self.resumeAction) self.toolBar.insertSeparator(self.removeSelectedAction) self.toolBar.insertSeparator(self.propertiesAction) self.toolBar.insertSeparator(self.minimizeAction) self.toolBar.addSeparator() # add actions to download_table's context menu list = [self.openFileAction, self.openDownloadFolderAction, self.resumeAction, self.pauseAction, self.stopAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.progressAction, self.moveSelectedDownloadsAction] for action in list: self.download_table.tablewidget_menu.addAction(action) elif (category != 'All Downloads' and category != 'Single Downloads'): # show queue_panel_widget self.queue_panel_widget.show() self.queuePanelWidget(category) # update toolBar list = [self.addlinkAction, self.videoFinderAddLinkAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.startQueueAction, self.stopQueueAction, self.removeQueueAction, self.moveUpSelectedAction, self.moveDownSelectedAction, self.minimizeAction, self.exitAction] for i in list: self.toolBar.addAction(i) self.toolBar.insertSeparator(self.removeSelectedAction) self.toolBar.insertSeparator(self.propertiesAction) self.toolBar.insertSeparator(self.startQueueAction) self.toolBar.insertSeparator(self.minimizeAction) self.toolBar.addSeparator() # add actions to download_table's context menu for action in [self.openFileAction, self.openDownloadFolderAction, self.removeSelectedAction, self.deleteSelectedAction, self.propertiesAction, self.moveSelectedDownloadsAction]: self.download_table.tablewidget_menu.addAction(action) # update category_tree_menu(right click menu for category_tree items) for i in self.startQueueAction, self.stopQueueAction, self.removeQueueAction: self.category_tree.category_tree_menu.addAction(i) # check queue condition if category != 'All Downloads' and category != 'Single Downloads': if str(category) in self.queue_list_dict.keys(): queue_status = self.queue_list_dict[str(category)].start else: queue_status = False if queue_status: # if queue started before self.stopQueueAction.setEnabled(True) self.startQueueAction.setEnabled(False) self.removeQueueAction.setEnabled(False) self.moveUpSelectedAction.setEnabled(False) self.moveDownSelectedAction.setEnabled(False) else: # if queue didn't start self.stopQueueAction.setEnabled(False) self.startQueueAction.setEnabled(True) self.removeQueueAction.setEnabled(True) self.moveUpSelectedAction.setEnabled(True) self.moveDownSelectedAction.setEnabled(True) else: # if category is All Downloads or Single Downloads self.stopQueueAction.setEnabled(False) self.startQueueAction.setEnabled(False) self.removeQueueAction.setEnabled(False) self.moveUpSelectedAction.setEnabled(False) self.moveDownSelectedAction.setEnabled(False) # add sortMenu to download_table context menu sortMenu = self.download_table.tablewidget_menu.addMenu( QCoreApplication.translate("mainwindow_src_ui_tr", 'Sort by')) sortMenu.addAction(self.sort_file_name_Action) sortMenu.addAction(self.sort_file_size_Action) sortMenu.addAction(self.sort_first_try_date_Action) sortMenu.addAction(self.sort_last_try_date_Action) sortMenu.addAction(self.sort_download_status_Action) # this method removes the queue that is selected in category_tree def removeQueue(self, menu=None): # show Warning message to user. # checks persepolis_setting first! # perhaps user was checking "do not show this message again" remove_warning_message = self.persepolis_setting.value( 'MainWindow/remove-queue-warning', 'yes') if remove_warning_message == 'yes': self.remove_queue_msgBox = QMessageBox() self.remove_queue_msgBox.setText(QCoreApplication.translate("mainwindow_src_ui_tr", '
This operation will remove \ all download items in this queue
from "All Downloads" list!
')) self.remove_queue_msgBox.setInformativeText(QCoreApplication.translate( "mainwindow_src_ui_tr", "
Do you want to continue?
")) self.remove_queue_msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) self.remove_queue_msgBox.setIcon(QMessageBox.Warning) dont_show_checkBox = QCheckBox("don't show this message again") self.remove_queue_msgBox.setCheckBox(dont_show_checkBox) reply = self.remove_queue_msgBox.exec_() # if user checks "do not show this message again!", change persepolis_setting! if self.remove_queue_msgBox.checkBox().isChecked(): self.persepolis_setting.setValue( 'MainWindow/remove-queue-warning', 'no') # do nothing if user clicks NO if reply != QMessageBox.Yes: return # find name of queue current_category_tree_text = str(current_category_tree_index.data()) if current_category_tree_text == 'Scheduled Downloads': error_messageBox = QMessageBox() error_messageBox.setText( QCoreApplication.translate("mainwindow_src_ui_tr", "Sorry! You can't remove default queue!")) error_messageBox.setWindowTitle('Error!') error_messageBox.exec_() return if current_category_tree_text != 'All Downloads' and current_category_tree_text != 'Single Downloads': # remove queue from category_tree row_number = current_category_tree_index.row() self.category_tree_model.removeRow(row_number) # delete category from data base self.persepolis_db.deleteCategory(current_category_tree_text) # highlight "All Downloads" in category_tree all_download_index = self.category_tree_model.index(0, 0) self.category_tree.setCurrentIndex(all_download_index) self.categoryTreeSelected(all_download_index) # this method starts the queue that is selected in category_tree def startQueue(self, menu=None): self.startQueueAction.setEnabled(False) # current_category_tree_text is the name of queue that is selected by user current_category_tree_text = str(current_category_tree_index.data()) # create an item for this category in temp_db if not exists! try: self.temp_db.insertInQueueTable(current_category_tree_text) except: # release lock self.temp_db.lock = False queue_info_dict = {'category': current_category_tree_text} # check that if user checks start_checkBox or not. if self.start_checkBox.isChecked(): queue_info_dict['start_time_enable'] = 'yes' # read start_time value start_time = self.start_time_qDataTimeEdit.text() else: queue_info_dict['start_time_enable'] = 'no' start_time = None # check that if user checked end_checkBox or not. if self.end_checkBox.isChecked(): queue_info_dict['end_time_enable'] = 'yes' # read end_time value end_time = self.end_time_qDateTimeEdit.text() else: queue_info_dict['end_time_enable'] = 'no' end_time = None # reverse_checkBox if self.reverse_checkBox.isChecked(): queue_info_dict['reverse'] = 'yes' else: queue_info_dict['reverse'] = 'no' # update data base self.persepolis_db.updateCategoryTable([queue_info_dict]) # create new Queue thread new_queue = Queue(current_category_tree_text, start_time, end_time, self) self.queue_list_dict[current_category_tree_text] = new_queue self.queue_list_dict[current_category_tree_text].start() self.queue_list_dict[current_category_tree_text].REFRESHTOOLBARSIGNAL.connect( self.toolBarAndContextMenuItems) self.toolBarAndContextMenuItems(current_category_tree_text) # this method stops the queue that is selected # by user in the left side panel def stopQueue(self, menu=None): self.stopQueueAction.setEnabled(False) # current_category_tree_text is the name of queue that is selected by user current_category_tree_text = str(current_category_tree_index.data()) queue = self.queue_list_dict[current_category_tree_text] queue.start = False queue.stop = True self.startQueueAction.setEnabled(True) # this method is called , when user want to add a download to a queue with # context menu. see also toolBarAndContextMenuItems() method def addToQueue(self, data, menu=None): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(partial(self.addToQueue2, data)) else: self.addToQueue2(data) def addToQueue2(self, data): send_message = False # new selected category new_category = str(data) gid_list = [] # find selected rows! for row in self.userSelectedRows(): status = self.download_table.item(row, 1).text() category = self.download_table.item(row, 12).text() # check status of old category if category in self.queue_list_dict.keys(): if self.queue_list_dict[category].start: # It means queue is in download progress status = 'downloading' # download must be in stopped situation. if (status == 'error' or status == 'stopped' or status == 'complete'): # find gid gid = self.download_table.item(row, 8).text() # check if this gid is related to video finder if gid in self.all_video_finder_gid_list: video_finder_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) # check the Video Finder tread status if video_finder_dictionary['video_gid'] in self.video_finder_threads_dict: video_finder_thread = self.video_finder_threads_dict[video_finder_dictionary['video_gid']] if video_finder_thread.active == 'no': # add both of video and audio links gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue else: send_message = True continue else: # add both of video and audio links gid_list.append(video_finder_dictionary['video_gid']) gid_list.append(video_finder_dictionary['audio_gid']) continue # append gid to gid_list gid_list.append(gid) else: send_message = True # remove duplicate items gid_list = set(gid_list) # find row number for specific gid for gid in gid_list: for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break # current_category = former selected category current_category = self.download_table.item(row, 12).text() if current_category != new_category: # write changes in data base dict = {'gid': gid, 'category': new_category} self.persepolis_db.updateDownloadTable([dict]) self.persepolis_db.setDefaultGidInAddlinkTable(gid, start_time=True, end_time=True, after_download=True) # delete item from gid_list in current_category current_category_dict = self.persepolis_db.searchCategoryInCategoryTable(current_category) # get gid_list current_category_gid_list = current_category_dict['gid_list'] # delete item current_category_gid_list = current_category_gid_list.remove(gid) # update category_db_table self.persepolis_db.updateCategoryTable([current_category_dict]) # add item to gid_list of new_category # get category_dict from data base new_category_dict = self.persepolis_db.searchCategoryInCategoryTable(new_category) # get gid_list new_category_gid_list = new_category_dict['gid_list'] # add gid of item to gid_list new_category_gid_list = new_category_gid_list.append(gid) # update category_db_table self.persepolis_db.updateCategoryTable([new_category_dict]) # update category in download_table current_category_tree_text = str(current_category_tree_index.data()) if current_category_tree_text == 'All Downloads': item = QTableWidgetItem(new_category) self.download_table.setItem(row, 12, item) else: self.download_table.removeRow(row) if send_message: # notify user that transfer was unsuccessful notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Some items didn't transferred successfully!"), QCoreApplication.translate("mainwindow_src_ui_tr", "Please stop download progress first."), 5000, 'no', parent=self) global checking_flag checking_flag = 0 # this method activates or deactivates start_frame according to situation def startFrame(self, checkBox): if self.start_checkBox.isChecked(): self.start_frame.setEnabled(True) else: self.start_frame.setEnabled(False) # this method activates or deactivates end_frame according to situation def endFrame(self, checkBox): if self.end_checkBox.isChecked(): self.end_frame.setEnabled(True) else: self.end_frame.setEnabled(False) # this method showing/hiding queue_panel_widget according to # queue_panel_show_button text def showQueuePanelOptions(self, button): if not (self.show_queue_panel): self.show_queue_panel = True self.queue_panel_widget_frame.show() self.queue_panel_show_button.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Hide options')) else: self.show_queue_panel = False self.queue_panel_widget_frame.hide() self.queue_panel_show_button.setText(QCoreApplication.translate("mainwindow_src_ui_tr", 'Show options')) # this metode is activating after_pushButton with limit_comboBox changing def limitComboBoxChanged(self, connect): self.limit_pushButton.setEnabled(True) # this method activates or deactivates limit_frame according to # limit_checkBox situation def limitFrame(self, checkBox): if self.limit_checkBox.isChecked(): self.limit_frame.setEnabled(True) self.limit_pushButton.setEnabled(True) else: self.limit_frame.setEnabled(False) # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str( current_category_tree_index.data()) # inform queue about changes if current_category_tree_text in self.queue_list_dict.keys(): self.queue_list_dict[current_category_tree_text].limit = False self.queue_list_dict[current_category_tree_text].limit_changed = True # this method limits download speed in queue def limitPushButtonPressed(self, button): self.limit_pushButton.setEnabled(False) # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str(current_category_tree_index.data()) # informing queue about changes self.queue_list_dict[current_category_tree_text].limit = True self.queue_list_dict[current_category_tree_text].limit_changed = True # this method handles user's shutdown request def afterPushButtonPressed(self, button): # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str(current_category_tree_index.data()) self.after_pushButton.setEnabled(False) if os_type != OS.WINDOWS: # For Linux and Mac OSX # get root password from user passwd, ok = QInputDialog.getText( self, 'PassWord', 'Please enter root password:', QLineEdit.Password) if ok: pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() while answer != 0: # ask password again! passwd, ok = QInputDialog.getText( self, 'PassWord', 'Wrong Password!\nPlease try again.', QLineEdit.Password) if ok: # checking password pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() else: ok = False break if ok: self.queue_list_dict[current_category_tree_text].after = True # send password and queue name to ShutDownThread shutdown_enable = ShutDownThread( self, current_category_tree_text, passwd) self.threadPool.append(shutdown_enable) self.threadPool[-1].start() else: self.after_checkBox.setChecked(False) self.queue_list_dict[current_category_tree_text].after = False else: self.after_checkBox.setChecked(False) self.queue_list_dict[current_category_tree_text].after = False else: # for windows shutdown_enable = ShutDownThread(self, current_category_tree_text) self.threadPool.append(shutdown_enable) self.threadPool[-1].start() # this method activates or deactivates after_frame according to # after_checkBox situation def afterFrame(self, checkBox): # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str(current_category_tree_index.data()) if self.after_checkBox.isChecked(): # enable after_frame self.after_frame.setEnabled(True) self.after_pushButton.setEnabled(True) else: self.after_frame.setEnabled(False) # disable after_frame # write 'canceled' for this category in temp_db . # see shutdown.py for more information if current_category_tree_text in self.queue_list_dict.keys(): if self.queue_list_dict[current_category_tree_text].after: shutdown_dict = {'category': current_category_tree_text, 'shutdown': 'canceled'} self.temp_db.updateQueueTable(shutdown_dict) self.queue_list_dict[current_category_tree_text].after = False # this method checks that queue started or not, # and it shows or hides widgets in queue_panel_widget # according to situation and set widgets in panel. def queuePanelWidget(self, category): # update queue panel widget items # read queue_info_dict from data base queue_info_dict = self.persepolis_db.searchCategoryInCategoryTable(category) # check queue condition if str(category) in self.queue_list_dict.keys(): queue_status = self.queue_list_dict[str(category)].start else: queue_status = False if queue_status: # queue started self.start_end_frame.hide() self.limit_after_frame.show() # check that if user set limit speed limit_status = self.queue_list_dict[str(category)].limit # check that if user selected 'shutdown after download' after_status = self.queue_list_dict[str(category)].after if limit_status: # It means queue's download speed limited by user # get limit_spinBox value and limit_comboBox value limit_number = self.queue_list_dict[str( category)].limit_spinBox_value limit_unit = self.queue_list_dict[str( category)].limit_comboBox_value # set limit_spinBox value self.limit_spinBox.setValue(limit_number) # set limit_comboBox value if limit_unit == 'K': self.after_comboBox.setCurrentIndex(0) else: self.after_comboBox.setCurrentIndex(1) # enable limit_frame self.limit_checkBox.setChecked(True) else: # disable limit_frame self.limit_checkBox.setChecked(False) # limit speed limit = str(queue_info_dict['limit_value']) # limit values limit_number = limit[0:-1] limit_unit = limit[-1] # limit_spinBox self.limit_spinBox.setValue(float(limit_number)) # limit_comboBox if limit_unit == 'K': self.limit_comboBox.setCurrentIndex(0) else: self.limit_comboBox.setCurrentIndex(1) # if after_status is True, # it means that user was selected # shutdown option, after queue completed. if after_status: self.after_checkBox.setChecked(True) else: self.after_checkBox.setChecked(False) else: # so queue is stopped self.start_end_frame.show() self.limit_after_frame.hide() # start time # start_checkBox if queue_info_dict['start_time_enable'] == 'yes': self.start_checkBox.setChecked(True) else: self.start_checkBox.setChecked(False) hour, minute = queue_info_dict['start_time'].split(':') q_time = QTime(int(hour), int(minute)) self.start_time_qDataTimeEdit.setTime(q_time) # end time # end_checkBox if queue_info_dict['end_time_enable'] == 'yes': self.end_checkBox.setChecked(True) else: self.end_checkBox.setChecked(False) hour, minute = queue_info_dict['end_time'].split(':') # set time q_time = QTime(int(hour), int(minute)) self.end_time_qDateTimeEdit.setTime(q_time) # reverse_checkBox if queue_info_dict['reverse'] == 'yes': self.reverse_checkBox.setChecked(True) else: self.reverse_checkBox.setChecked(False) self.limitFrame(category) self.afterFrame(category) self.startFrame(category) self.endFrame(category) # this method opens issues page in github def reportIssue(self, menu=None): osCommands.xdgOpen('https://github.com/persepolisdm/persepolis/issues') # this method opens persepolis wiki page in github def persepolisHelp(self, menu=None): osCommands.xdgOpen('https://github.com/persepolisdm/persepolis/wiki') # this method opens LogWindow def showLog(self, menu=None): logwindow = LogWindow( self.persepolis_setting) self.logwindow_list.append(logwindow) self.logwindow_list[-1].show() # this method is called when user pressed moveUpSelectedAction # this method subtituts selected items with upper one def moveUpSelected(self, menu=None): global button_pressed_counter button_pressed_counter = button_pressed_counter + 1 # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be stopped # until job is done! if checking_flag != 2: button_pressed_thread = ButtonPressedThread() self.threadPool.append(button_pressed_thread) self.threadPool[-1].start() wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.moveUpSelected2) else: self.moveUpSelected2() def moveUpSelected2(self): # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str(current_category_tree_index.data()) # get gid_list from data base category_dict = self.persepolis_db.searchCategoryInCategoryTable(current_category_tree_text) gid_list = category_dict['gid_list'] # find selected rows rows_list = self.userSelectedRows() new_rows_list = [] # move up selected rows for old_row in rows_list: new_row = int(old_row) - 1 old_row_items_list = [] new_row_items_list = [] if new_row >= 0: new_rows_list.append(new_row) # old index and new index of item in gid_list old_index = len(gid_list) - old_row - 1 new_index = old_index + 1 # subtitute items in gid_list gid_list[old_index], gid_list[new_index] = gid_list[new_index], gid_list[old_index] # subtitute items in download_table # read current items in download_table for i in range(13): old_row_items_list.append( self.download_table.item(old_row, i).text()) new_row_items_list.append( self.download_table.item(new_row, i).text()) # substituting for i in range(13): # old row item = QTableWidgetItem(new_row_items_list[i]) self.download_table.setItem(old_row, i, item) # new row item = QTableWidgetItem(old_row_items_list[i]) self.download_table.setItem(new_row, i, item) # remove highlight from old rows self.download_table.clearSelection() # Visit this link for more information # doc.qt.io/qt-5/qabstractitemview.html self.download_table.setSelectionMode(QAbstractItemView.MultiSelection) # Highlight newer rows for row in new_rows_list: self.download_table.selectRow(row) # change selection mode to the normal situation self.download_table.setSelectionMode(QAbstractItemView.ExtendedSelection) # update data base self.persepolis_db.updateCategoryTable([category_dict]) # this method is called if user pressed moveDownSelected action # this method is substituting selected download item with lower download item def moveDownSelected(self, menu=None): global button_pressed_counter button_pressed_counter = button_pressed_counter + 1 # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be stopped # until job is done! if checking_flag != 2: button_pressed_thread = ButtonPressedThread() self.threadPool.append(button_pressed_thread) self.threadPool[-1].start() wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.moveDownSelected2) else: self.moveDownSelected2() def moveDownSelected2(self): # an old row and new row must be substituted by each other # find selected rows rows_list = self.userSelectedRows() # current_category_tree_text is the name of queue that selected by user current_category_tree_text = str(current_category_tree_index.data()) # get gid_list from data base category_dict = self.persepolis_db.searchCategoryInCategoryTable( current_category_tree_text) gid_list = category_dict['gid_list'] rows_list.reverse() new_rows_list = [] # move up selected rows for old_row in rows_list: new_row = int(old_row) + 1 if new_row < self.download_table.rowCount(): new_rows_list.append(new_row) # old index and new index in gid_list old_index = len(gid_list) - old_row - 1 new_index = old_index - 1 # subtitute gids in gid_list gid_list[old_index], gid_list[new_index] = gid_list[new_index], gid_list[old_index] # subtitute items in download_table old_row_items_list = [] new_row_items_list = [] # read current items in download_table for i in range(13): old_row_items_list.append( self.download_table.item(old_row, i).text()) new_row_items_list.append( self.download_table.item(new_row, i).text()) # substituting for i in range(13): # old row item = QTableWidgetItem(new_row_items_list[i]) self.download_table.setItem(old_row, i, item) # new_row item = QTableWidgetItem(old_row_items_list[i]) self.download_table.setItem(new_row, i, item) # remove highlight from old rows self.download_table.clearSelection() # Visit this link for more information # doc.qt.io/qt-5/qabstractitemview.html self.download_table.setSelectionMode(QAbstractItemView.MultiSelection) # Highlight newer rows for row in new_rows_list: self.download_table.selectRow(row) # change selection mode to the normal situation self.download_table.setSelectionMode(QAbstractItemView.ExtendedSelection) # update data base self.persepolis_db.updateCategoryTable([category_dict]) # this method is called if user pressed moveSelectedDownloads action # this method moves download files to another destination. def moveSelectedDownloads(self, menu=None): # initialize the path. initializing_path = self.persepolis_setting.value( 'MainWindow/moving_path', None) # if initializing_path is not available, so use default download_path. if not (initializing_path): initializing_path = str( self.persepolis_setting.value('settings/download_path')) # open file manager and get new download path fname = QFileDialog.getExistingDirectory( self, 'Select a directory', initializing_path) if fname: # Returns pathName with the '/' separators converted to separators that are appropriate for the underlying operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". new_folder_path = QDir.toNativeSeparators(fname) # save new_folder_path as initializing_path self.persepolis_setting.setValue( 'MainWindow/moving_path', new_folder_path) else: return gid_list = [] # find selected rows! for row in self.userSelectedRows(): # get download status status = self.download_table.item(row, 1).text() # only download items with "complete" can be moved. if (status == 'complete'): # find gid gid = self.download_table.item(row, 8).text() # add gid to gid_list gid_list.append(gid) else: # find filename file_name = self.download_table.item(row, 0).text() # show error message # TODO: no value for message2 notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", message1='Operation was not successful! Following download must be completed first: '), message2=file_name, time=5000, sound='fail', parent=self) # move files with MoveThread # MoveThread is created to pervent UI freezing. move_thread = MoveThread(self, gid_list, new_folder_path) self.threadPool.append(move_thread) self.threadPool[-1].start() # see browser_plugin_queue.py file def queueSpiderCallBack(self, filename, child, row_number): item = QTableWidgetItem(str(filename)) # add checkbox to the item item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) if child.links_table.item(int(row_number), 0).checkState() == Qt.Checked: item.setCheckState(Qt.Checked) else: item.setCheckState(Qt.Unchecked) child.links_table.setItem(int(row_number), 0, item) # see addlink.py file def addLinkSpiderCallBack(self, spider_dict, child): # get file_name and file_size file_name = spider_dict['file_name'] file_size = spider_dict['file_size'] if file_size: file_size = 'Size: ' + str(file_size) child.size_label.setText(file_size) if file_name and not (child.change_name_checkBox.isChecked()): child.change_name_lineEdit.setText(file_name) child.change_name_checkBox.setChecked(True) def spiderUpdate(self, dict): gid = dict['gid'] row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if gid == row_gid: row = i break # update download_table items if row is not None: update_list = [dict['file_name'], dict['status'], dict['size'], dict['downloaded_size'], dict['percent'], dict['connections'], dict['rate'], dict['estimate_time_left'], dict['gid'], None, None, None, None] for i in range(12): # update download_table cell if update_list item in not None if update_list[i]: text = update_list[i] else: text = self.download_table.item(row, i).text() # create a QTableWidgetItem item = QTableWidgetItem(text) # set item try: self.download_table.setItem(row, i, item) except Exception as problem: logger.sendToLog( "Error occurred while updating download table", "INFO") logger.sendToLog(problem, "ERROR") # this method deletes all items in data base def clearDownloadList(self, item): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect(self.clearDownloadList2) else: self.clearDownloadList2() def clearDownloadList2(self): # all Downloads must be stopped by user gid_list = self.persepolis_db.findActiveDownloads() if len(gid_list) != 0: error_messageBox = QMessageBox() error_messageBox.setText( QCoreApplication.translate("mainwindow_src_ui_tr", 'Stop all downloads first!')) error_messageBox.setWindowTitle('Error!') error_messageBox.exec_() return # reset data base self.persepolis_db.resetDataBase() self.temp_db.resetDataBase() # highlight "All Downloads" in category_tree all_download_index = self.category_tree_model.index(0, 0) self.category_tree.setCurrentIndex(all_download_index) self.categoryTreeSelected(all_download_index) # clear download_table self.download_table.setRowCount(0) # tell the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 def showVideoFinderAddLinkWindow(self, input_dict=None, menu=None): # check if gost is installed. global socks5_to_http_convertor_is_installed # first check youtube_dl_is_installed and ffmpeg_is_installed value! # if youtube_dl or ffmpeg is not installed show an error message. if youtube_dl_is_installed and ffmpeg_is_installed: if not (input_dict): input_dict = {} video_finder_addlink_window = VideoFinderAddLink( parent=self, receiver_slot=self.videoFinderCallBack, socks5_to_http_convertor_is_installed=socks5_to_http_convertor_is_installed, settings=self.persepolis_setting, video_dict=input_dict) self.addlinkwindows_list.append(video_finder_addlink_window) video_finder_addlink_window.show() video_finder_addlink_window.raise_() video_finder_addlink_window.activateWindow() else: error_message = '' if not (youtube_dl_is_installed): error_message = QCoreApplication.translate("mainwindow_src_ui_tr", 'yt-dlp is not installed!') error_message = error_message + '\n' if not (ffmpeg_is_installed): error_message = error_message + \ QCoreApplication.translate("mainwindow_src_ui_tr", 'ffmpeg is not installed!') error_messageBox = QMessageBox() error_messageBox.setText(error_message) error_messageBox.setWindowTitle('Error!') error_messageBox.exec_() return # call back of VideoFinderAddLink window. def videoFinderCallBack(self, add_link_dictionary_list, download_later, category): # if we have only one link so we can download it like other ordinary links # but if we have seperated video and audio, then we must use VideoFinder thread and ... if len(add_link_dictionary_list) == 1: self.callBack(add_link_dictionary=add_link_dictionary_list[0], download_later=download_later, category=category) return category = str(category) for add_link_dictionary in add_link_dictionary_list: # aria2 identifies each download by the ID called GID. The GID must be # hex string of 16 characters. # if user presses ok button on add link window , a gid generates for download. gid = self.gidGenerator() # add gid to add_link_dictionary add_link_dictionary['gid'] = gid # download_info_file_list is a list that contains ['file_name' , # 'status' , 'size' , 'downloaded size' ,'download percentage' , # 'number of connections' ,'Transfer rate' , 'estimate_time_left' , # 'gid' , 'link' , 'first_try_date' , 'last_try_date', 'category'] # if user or browser_plugin defined filename then file_name is valid in # add_link_dictionary['out'] if add_link_dictionary['out']: file_name = add_link_dictionary['out'] else: file_name = '***' # If user selected a queue in add_link window , then download must be # added to queue and and download must be started with queue so >> # download_later = True if str(category) != 'Single Downloads': download_later = True # change video status to waiting if not (download_later) and gid == add_link_dictionary_list[0]['gid']: status = 'waiting' else: status = 'stopped' # get now time and date date = download.nowDate() dictionary = {'file_name': file_name, 'status': status, 'size': '***', 'downloaded_size': '***', 'percent': '***', 'connections': '***', 'rate': '***', 'estimate_time_left': '***', 'gid': gid, 'link': add_link_dictionary['link'], 'first_try_date': date, 'last_try_date': date, 'category': category} # write information in data_base self.persepolis_db.insertInDownloadTable([dictionary]) self.persepolis_db.insertInAddLinkTable([add_link_dictionary]) # find selected category in left side panel for i in range(self.category_tree_model.rowCount()): category_tree_item_text = str( self.category_tree_model.index(i, 0).data()) if category_tree_item_text == category: category_index = i break # highlight selected category in category_tree category_tree_model_index = self.category_tree_model.index( category_index, 0) current_category_tree_text = current_category_tree_index.data() self.category_tree.setCurrentIndex(category_tree_model_index) if current_category_tree_text != category: self.categoryTreeSelected(category_tree_model_index) else: # create a row in download_table for new download list = [file_name, status, '***', '***', '***', '***', '***', '***', gid, add_link_dictionary['link'], date, date, category] self.download_table.insertRow(0) j = 0 # add item in list to the row for i in list: item = QTableWidgetItem(i) self.download_table.setItem(0, j, item) j = j + 1 # add video_gid and audio_gid to data base dictionary = {'video_gid': add_link_dictionary_list[0]['gid'], 'audio_gid': add_link_dictionary_list[1]['gid'], 'video_completed': 'no', 'audio_completed': 'no', 'muxing_status': 'no', 'checking': 'no', 'download_path': add_link_dictionary_list[0]['download_path']} self.persepolis_db.insertInVideoFinderTable([dictionary]) # add video_gid and audio_gid to all_video_finder_gid_list self.all_video_finder_gid_list.append(dictionary['video_gid']) self.all_video_finder_video_gid_list.append(dictionary['video_gid']) self.all_video_finder_gid_list.append(dictionary['audio_gid']) self.all_video_finder_audio_gid_list.append(dictionary['audio_gid']) # if user didn't press download_later_pushButton in add_link window # then create new qthread for new download! if not (download_later): new_download = VideoFinder(dictionary, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].VIDEOFINDERCOMPLETED.connect(self.videoFinderCompleted) # add thread to video_finder_threads_dict self.video_finder_threads_dict[dictionary['video_gid']] = new_download # open progress window for download. self.progressBarOpen(dictionary['video_gid']) # notify user if not (add_link_dictionary_list[0]['start_time']): message = QCoreApplication.translate("mainwindow_src_ui_tr", "Download Starts") notifySend(message, '', 10000, 'no', parent=self) else: # write name and size of download files in download's table for add_link_dictionary in add_link_dictionary_list: new_spider = SpiderThread(add_link_dictionary, self) self.threadPool.append(new_spider) self.threadPool[-1].start() self.threadPool[-1].SPIDERSIGNAL.connect(self.spiderUpdate) else: # write name and size of download files in download's table for add_link_dictionary in add_link_dictionary_list: new_spider = SpiderThread(add_link_dictionary, self) self.threadPool.append(new_spider) self.threadPool[-1].start() self.threadPool[-1].SPIDERSIGNAL.connect(self.spiderUpdate) # this method is called by VideoFinder thread # this method handles error_message # if video finder done it's job successfully, # then this method shows AfterDownloadWindow def videoFinderCompleted(self, complete_dictionary): # if checking_flag is equal to 1, it means that user pressed remove or # delete button or ... . so checking download information must be # stopped until job is done! if checking_flag != 2: wait_check = WaitThread() self.threadPool.append(wait_check) self.threadPool[-1].start() self.threadPool[-1].QTABLEREADY.connect( partial(self.videoFinderCompleted2, complete_dictionary)) else: self.videoFinderCompleted2(complete_dictionary) def videoFinderCompleted2(self, complete_dictionary): # remove item from video_finder_threads_dict del self.video_finder_threads_dict[complete_dictionary['video_gid']] error_message = complete_dictionary['error'] # close progress window if complete_dictionary['video_gid'] in self.progress_window_list_dict.keys(): # find progress_window for this gid member_number = self.progress_window_list_dict[complete_dictionary['video_gid']] progress_window = self.progress_window_list[member_number] # close progress window progress_window.close() # download was successful if error_message == 'no error': # delete gids from all_video_finder_gid_list self.all_video_finder_gid_list.remove(complete_dictionary['video_gid']) self.all_video_finder_video_gid_list.remove(complete_dictionary['video_gid']) self.all_video_finder_gid_list.remove(complete_dictionary['audio_gid']) self.all_video_finder_audio_gid_list.remove(complete_dictionary['audio_gid']) # delete audio file # find row row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if complete_dictionary['audio_gid'] == row_gid: row = i break # muxing is complete # so remove unused files # find download path audio_add_link_dictionary = self.persepolis_db.searchGidInAddLinkTable(complete_dictionary['audio_gid']) video_add_link_dictionary = self.persepolis_db.searchGidInAddLinkTable(complete_dictionary['video_gid']) audio_file_path = audio_add_link_dictionary['download_path'] video_file_path = video_add_link_dictionary['download_path'] osCommands.remove(audio_file_path) osCommands.remove(video_file_path) # remove audio row from download_table if row is not None: self.download_table.removeRow(row) # remove download item from data base self.persepolis_db.deleteItemInDownloadTable( complete_dictionary['audio_gid'], complete_dictionary['category']) # file name and file size and downloaded size and download path must be changed for video video_add_link_dictionary['download_path'] = complete_dictionary['final_path'] # update data base self.persepolis_db.updateAddLinkTable([video_add_link_dictionary]) # get download_table_dict for video_gid video_download_table_dict = self.persepolis_db.searchGidInDownloadTable(complete_dictionary['video_gid']) video_download_table_dict['size'] = complete_dictionary['final_size'] video_download_table_dict['downloaded_size'] = complete_dictionary['final_size'] video_download_table_dict['file_name'] = urllib.parse.unquote( os.path.basename(complete_dictionary['final_path'])) # update data base self.persepolis_db.updateDownloadTable([video_download_table_dict]) # update download_table # find row row = None for i in range(self.download_table.rowCount()): row_gid = self.download_table.item(i, 8).text() if complete_dictionary['video_gid'] == row_gid: row = i break if row is not None: # create a QTableWidgetItem item = QTableWidgetItem(str(video_download_table_dict['file_name'])) # set item self.download_table.setItem(row, 0, item) # create a QTableWidgetItem item = QTableWidgetItem(str(video_download_table_dict['size'])) # set item self.download_table.setItem(row, 2, item) # create a QTableWidgetItem item = QTableWidgetItem(str(video_download_table_dict['downloaded_size'])) # set item self.download_table.setItem(row, 3, item) # update download_table (refreshing!) self.download_table.viewport().update() if complete_dictionary['category'] == 'Single Downloads': # show download complete dialog afterdownloadwindow = AfterDownloadWindow( self, video_download_table_dict, self.persepolis_setting) self.afterdownload_list.append(afterdownloadwindow) self.afterdownload_list[-1].show() # bringing AfterDownloadWindow on top self.afterdownload_list[-1].raise_() self.afterdownload_list[-1].activateWindow() elif error_message == 'not enough free space': # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Not enough free space in:"), complete_dictionary['download_path'], 10000, 'fail', parent=self) elif error_message == 'ffmpeg error': # show error message notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "an error occurred"), QCoreApplication.translate("mainwindow_src_ui_tr", "muxing error"), 10000, 'fail', parent=self) # telling the CheckDownloadInfoThread that job is done! global checking_flag checking_flag = 0 # this method is called, if user clicks on muxing_pushButton def muxingPushButtonPressed(self, button): # find user's selected row selected_row_return = self.selectedRow() if selected_row_return is not None: # find download category category = self.download_table.item(selected_row_return, 12).text() # if category is not "single downloads" , then send notification for error if category != "Single Downloads": notifySend(QCoreApplication.translate("mainwindow_src_ui_tr", "Operation was not successful."), QCoreApplication.translate("mainwindow_src_ui_tr", "Please resume the following category: ") + category, 10000, 'fail', parent=self) return # find download gid gid = self.download_table.item(selected_row_return, 8).text() # read data from data base result_dictionary = self.persepolis_db.searchGidInVideoFinderTable(gid) # create new thread for this download # see VideoFinder thread for more information new_download = VideoFinder(result_dictionary, self) self.threadPool.append(new_download) self.threadPool[-1].start() self.threadPool[-1].VIDEOFINDERCOMPLETED.connect(self.videoFinderCompleted) # add thread to video_finder_threads_dict self.video_finder_threads_dict[result_dictionary['video_gid']] = new_download # create new progress_window self.progressBarOpen(gid) def changeIcon(self, new_icons): global icons icons = ':/' + str(new_icons) + '/' action_icon_dict = {self.stopAllAction: 'stop_all', self.minimizeAction: 'minimize', self.addlinkAction: 'add', self.addtextfileAction: 'file', self.addFromClipboardAction: 'clipboard', self.resumeAction: 'play', self.pauseAction: 'pause', self.stopAction: 'stop', self.propertiesAction: 'setting', self.progressAction: 'window', self.openFileAction: 'file', self.openDownloadFolderAction: 'folder', self.openDefaultDownloadFolderAction: 'folder', self.exitAction: 'exit', self.createQueueAction: 'add_queue', self.removeQueueAction: 'remove_queue', self.startQueueAction: 'start_queue', self.stopQueueAction: 'stop_queue', self.preferencesAction: 'preferences', self.aboutAction: 'about', self.issueAction: 'about', self.videoFinderAddLinkAction: 'video_finder', self.qmenu: 'menu'} for key in action_icon_dict.keys(): key.setIcon(QIcon(icons + str(action_icon_dict[key]))) self.selectDownloads() persepolisdm-persepolis-867ee76/persepolis/scripts/newopen.py000066400000000000000000000030331464161131600246630ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . import ast # This function is writting a list in file_path in dictionary format def writeList(file_path, list): dictionary = {'list': list} f = open(file_path, 'w') f.writelines(str(dictionary)) f.close() # This function is reading file_path and return content of file in list format def readList(file_path, mode='dictionary'): f = open(file_path, 'r') f_string = f.readline() f.close() dictionary = ast.literal_eval(f_string.strip()) list = dictionary['list'] if mode == 'string': list[9] = str(list[9]) return list # this function is reading a file that contains dictionary , and extracts # dictionary from it. def readDict(file_path): f = open(file_path) f_lines = f.readlines() f.close() dict_str = str(f_lines[0].strip()) return_dict = ast.literal_eval(dict_str) return return_dict persepolisdm-persepolis-867ee76/persepolis/scripts/osCommands.py000066400000000000000000000210731464161131600253170ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.constants import OS import subprocess import platform import shutil import os os_type = platform.system() home_address = os.path.expanduser("~") # this method finds file manager in linux def findFileManager(): pipe = subprocess.check_output(['xdg-mime', 'query', 'default', 'inode/directory']) file_manager = pipe.decode('utf-8').strip().lower() return file_manager def touch(file_path): if not (os.path.isfile(file_path)): f = open(file_path, 'w') f.close() # xdgOpen opens files or folders def xdgOpen(file_path, f_type='file', path='file'): # we have a file path and we want to open it's directory. # highlit(select) file in file manager after opening. # it's help to find file easier :) if f_type == 'folder' and path == 'file': highlight = True else: highlight = False # for linux and bsd if os_type in OS.UNIX_LIKE: file_manager = findFileManager() # check default file manager. # some file managers wouldn't support highlighting. if highlight: # dolphin is kde plasma's file manager if 'dolphin' in file_manager: subprocess.Popen(['dolphin', '--select', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # dde-file-manager is deepin's file manager elif 'dde-file-manager' in file_manager: subprocess.Popen(['dde-file-manager', '--show-item', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # if file manager is nautilus or nemo or pantheon-file-manager elif file_manager in ['org.gnome.nautilus.desktop', 'nemo.desktop', 'io.elementary.files.desktop']: # nautilus is gnome's file manager. if 'nautilus' in file_manager: file_manager = 'nautilus' # pantheon-files is pantheon's file manager(elementary OS). elif 'elementary' in file_manager: file_manager = 'io.elementary.files' # nemo is cinnamon's file manager. elif 'nemo' in file_manager: file_manager = 'nemo' subprocess.Popen([file_manager, file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) else: # find folder path file_name = os.path.basename(str(file_path)) file_path_split = file_path.split(file_name) del file_path_split[-1] folder_path = file_name.join(file_path_split) subprocess.Popen(['xdg-open', folder_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) else: subprocess.Popen(['xdg-open', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # for Mac OS X elif os_type == OS.OSX: if highlight: subprocess.Popen(['open', '-R', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) else: subprocess.Popen(['open', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) # for MS Windows elif os_type == OS.WINDOWS: CREATE_NO_WINDOW = 0x08000000 if highlight: subprocess.Popen(['explorer.exe', '/select,', file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=CREATE_NO_WINDOW) else: subprocess.Popen(['cmd', '/C', 'start', file_path, file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=CREATE_NO_WINDOW) # remove file with path of file_path def remove(file_path): if os.path.isfile(file_path): try: # function returns ok, if operation was successful os.remove(file_path) return 'ok' except: # function returns this, if operation was not successful return 'cant' else: # function returns this , if file is not existed return 'no' # removeDir removes folder : folder_path def removeDir(folder_path): # check folder_path existence if os.path.isdir(folder_path): try: # remove folder shutil.rmtree(folder_path) return 'ok' except: # return 'cant' if removing was not successful return 'cant' else: # return 'no' if file didn't existed return 'no' # make directory def makeDirs(folder_path, hidden=False): if hidden: # create hidden attribute directory. if os_type == OS.WINDOWS: os.makedirs(folder_path, exist_ok=True) # in MS Windows "attrib +h" command hidden directory. CREATE_NO_WINDOW = 0x08000000 subprocess.Popen(['attrib', '+h', folder_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=CREATE_NO_WINDOW) else: # In linux and bsd a dot character must be added in the start of the directory's name dir_name = os.path.basename(folder_path) dir_name = '.' + dir_name folder_path = os.path.join(os.path.dirname(folder_path), dir_name) os.makedirs(folder_path, exist_ok=True) else: os.makedirs(folder_path, exist_ok=True) return folder_path # this function returns mount point def findMountPoint(path): while not os.path.ismount(path): path = os.path.dirname(path) return path # move downloaded file to another destination. def moveFile(old_file_path, new_path, new_path_type='folder'): # new_path_type can be file or folder # if it's folder so we have folder path # else we have new file path that includes file name if os.path.isfile(old_file_path): if new_path_type == 'folder': # check availability of directory check_path = os.path.isdir(new_path) else: check_path = True if check_path: try: # move file to new_path shutil.move(old_file_path, new_path) return True except: return False else: return False else: return False persepolisdm-persepolis-867ee76/persepolis/scripts/persepolis.py000066400000000000000000000443371464161131600254110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6 import QtWidgets, QtCore from PySide6.QtCore import __version__ as QT_VERSION_STR from PySide6.QtGui import QFont from PySide6.QtCore import QFile, QTextStream, QSettings, Qt except: from PyQt5 import QtWidgets, QtCore from PyQt5.QtGui import QFont from PyQt5.QtCore import QFile, QTextStream, QSettings, Qt, QT_VERSION_STR from persepolis.gui import resources import traceback from persepolis.scripts.error_window import ErrorWindow from persepolis.gui.palettes import DarkFusionPalette, LightFusionPalette import json import struct import argparse from persepolis.scripts import osCommands from persepolis.scripts.useful_tools import osAndDesktopEnvironment, determineConfigFolder from persepolis.constants import OS from copy import deepcopy import sys import os # finding os platform os_type, desktop_env = osAndDesktopEnvironment() # Don't run persepolis as root! if os_type in (OS.UNIX_LIKE + [OS.OSX]): uid = os.getuid() if uid == 0: print('Do not run persepolis as root.') sys.exit(1) # initialization # find home address home_address = os.path.expanduser("~") # persepolis config_folder config_folder = determineConfigFolder() # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') # if lock_file_validation == True >> not another instance running, # else >> another instance of persepolis is running now. global lock_file_validation if os_type != OS.WINDOWS: import fcntl user_name_split = home_address.split('/') user_name = user_name_split[2] # persepolis lock file lock_file = '/tmp/persepolis_exec_' + user_name + '.lock' # create lock file fp = open(lock_file, 'w') try: fcntl.lockf(fp, fcntl.LOCK_EX | fcntl.LOCK_NB) lock_file_validation = True # Lock file created successfully! except IOError: lock_file_validation = False # creating lock_file was unsuccessful! So persepolis is still running else: # for windows # pypiwin32 must be installed by pip from win32event import CreateMutex from win32api import GetLastError from winerror import ERROR_ALREADY_EXISTS handle = CreateMutex(None, 1, 'persepolis_download_manager') if GetLastError() == ERROR_ALREADY_EXISTS: lock_file_validation = False else: lock_file_validation = True # run persepolis mainwindow if lock_file_validation: # execute initialization script from persepolis.scripts import initialization from persepolis.scripts.mainwindow import MainWindow # set "persepolis" name for this process in linux and bsd if os_type in OS.UNIX_LIKE: try: from setproctitle import setproctitle setproctitle("persepolisdm") except: from persepolis.scripts import logger logger.sendToLog('setproctitle is not installed!', "ERROR") # load persepolis_settings persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') class PersepolisApplication(QtWidgets.QApplication): def __init__(self, argv): super().__init__(argv) def setPersepolisStyle(self, style): # set style self.persepolis_style = style self.setStyle(style) def setPersepolisFont(self, font, font_size, custom_font): # font and font_size self.persepolis_font = font self.persepolis_font_size = font_size if custom_font == 'yes': self.setFont(QFont(font, font_size)) # color_scheme def setPersepolisColorScheme(self, color_scheme): self.persepolis_color_scheme = color_scheme if color_scheme == 'Dark Fusion': dark_fusion = DarkFusionPalette() self.setPalette(dark_fusion) file = QFile(":/dark_style.qss") file.open(QFile.ReadOnly | QFile.Text) stream = QTextStream(file) self.setStyleSheet(stream.readAll()) elif color_scheme == 'Light Fusion': light_fusion = LightFusionPalette() self.setPalette(light_fusion) file = QFile(":/light_style.qss") file.open(QFile.ReadOnly | QFile.Text) stream = QTextStream(file) self.setStyleSheet(stream.readAll()) # create terminal arguments parser = argparse.ArgumentParser(description='Persepolis Download Manager') # parser.add_argument('chromium', nargs = '?', default = 'no', help='this switch is used for chrome native messaging in Linux and Mac') parser.add_argument('--link', action='store', nargs=1, help='Download link.(Use "" for links)') parser.add_argument('--referer', action='store', nargs=1, help='Set an http referrer (Referer). This affects all http/https downloads. If * is given, the download URI is also used as the referrer.') parser.add_argument('--cookie', action='store', nargs=1, help='Cookie') parser.add_argument('--agent', action='store', nargs=1, help='Set user agent for HTTP(S) downloads. Default: aria2/$VERSION, $VERSION is replaced by package version.') parser.add_argument('--headers', action='store', nargs=1, help='Append HEADER to HTTP request header. ') parser.add_argument('--name', action='store', nargs=1, help='The file name of the downloaded file. ') parser.add_argument('--default', action='store_true', help='restore default setting') parser.add_argument('--clear', action='store_true', help='Clear download list and user setting!') parser.add_argument('--tray', action='store_true', help="Persepolis is starting in tray icon. It's useful when you want to put persepolis in system's startup.") parser.add_argument('--parent-window', action='store', nargs=1, help='this switch is used for chrome native messaging in Windows') parser.add_argument('--version', action='version', version='Persepolis Download Manager 4.3.0') # Clears unwanted args ( like args from Browers via NHM ) # unknown arguments (may sent by browser) will save in unknownargs. args, unknownargs = parser.parse_known_args() # if --execute >> yes >>> persepolis main window will start. # if --execute >> no >>> persepolis started before! browser_url = True add_link_dictionary = {} plugin_list = [] browser_plugin_dict = {'link': None, 'referer': None, 'load_cookies': None, 'user_agent': None, 'header': None, 'out': None } # This dirty trick will show Persepolis version when there are unknown args # Unknown args are sent by Browsers for NHM if args.parent_window or unknownargs: # Platform specific configuration if os_type == OS.WINDOWS: # Set the default I/O mode to O_BINARY in windows import msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # Send message to browsers plugin message = '{"enable": true, "version": "1.85"}'.encode('utf-8') sys.stdout.buffer.write((struct.pack('i', len(message)))) sys.stdout.buffer.write(message) sys.stdout.flush() text_length_bytes = sys.stdin.buffer.read(4) # Unpack message length as 4 byte integer. text_length = struct.unpack('@I', text_length_bytes)[0] # Read the text (JSON object) of the message. text = sys.stdin.buffer.read(text_length).decode("utf-8") if text: new_dict = json.loads(text) if 'url_links' in new_dict: # new_dict is sended by persepolis browser add-on. # new_dict['url_links'] contains some lists. # every list contains link information. for item in new_dict['url_links']: copy_dict = deepcopy(browser_plugin_dict) if 'url' in item.keys(): copy_dict['link'] = str(item['url']) if 'header' in item.keys() and item['header'] != '': copy_dict['header'] = item['header'] if 'referrer' in item.keys() and item['referrer'] != '': copy_dict['referer'] = item['referrer'] if 'filename' in item.keys() and item['filename'] != '': copy_dict['out'] = os.path.basename(str(item['filename'])) if 'useragent' in item.keys() and item['useragent'] != '': copy_dict['user_agent'] = item['useragent'] if 'cookies' in item.keys() and item['cookies'] != '': copy_dict['load_cookies'] = item['cookies'] plugin_list.append(copy_dict) else: browser_url = False # persepolis --clear >> remove config_folder if args.clear: from persepolis.scripts.data_base import PersepolisDB # create an object for PersepolisDB persepolis_db = PersepolisDB() # Reset data base persepolis_db.resetDataBase() # close connections persepolis_db.closeConnections() # Reset persepolis_setting persepolis_setting.clear() persepolis_setting.sync() sys.exit(0) # persepolis --default >> remove persepolis setting. if args.default: persepolis_setting.clear() persepolis_setting.sync() print('Persepolis restored default') sys.exit(0) if args.link: add_link_dictionary['link'] = "".join(args.link) # if plugins call persepolis, then just start persepolis in system tray args.tray = True if args.referer: add_link_dictionary['referer'] = "".join(args.referer) else: add_link_dictionary['referer'] = None if args.cookie: add_link_dictionary['load_cookies'] = "".join(args.cookie) else: add_link_dictionary['load_cookies'] = None if args.agent: add_link_dictionary['user_agent'] = "".join(args.agent) else: add_link_dictionary['user_agent'] = None if args.headers: add_link_dictionary['header'] = "".join(args.headers) else: add_link_dictionary['header'] = None if args.name: add_link_dictionary['out'] = "".join(args.name) else: add_link_dictionary['out'] = None if args.tray: start_in_tray = True else: start_in_tray = False # when browsers plugin calls persepolis or user runs persepolis by terminal arguments, # then persepolis creates a request file in persepolis_tmp folder and link information added to # plugins_db.db file(see data_base.py for more information). # persepolis mainwindow checks persepolis_tmp for plugins request file every 2 seconds (see CheckingThread class in mainwindow.py) # when request received in CheckingThread, a popup window (AddLinkWindow) comes up and window gets additional download information # from user (port , proxy , ...) and download starts and request file deleted if ('link' in add_link_dictionary.keys()): plugin_dict = {'link': add_link_dictionary['link'], 'referer': add_link_dictionary['referer'], 'load_cookies': add_link_dictionary['load_cookies'], 'user_agent': add_link_dictionary['user_agent'], 'header': add_link_dictionary['header'], 'out': add_link_dictionary['out'] } plugin_list.append(plugin_dict) if len(plugin_list) != 0: # import PluginsDB from persepolis.scripts.data_base import PluginsDB # create an object for PluginsDB plugins_db = PluginsDB() # add plugin_list to plugins_table in plugins.db file. plugins_db.insertInPluginsTable(plugin_list) # Job is done! close connections. plugins_db.closeConnections() # notify that a link is added! plugin_ready = os.path.join(persepolis_tmp, 'persepolis-plugin-ready') osCommands.touch(plugin_ready) # start persepolis in system tray start_in_tray = True # start persepolis in system tray if browser executed # and if user select this option in preferences window. if str(persepolis_setting.value('settings/browser-persepolis')) == 'yes' and (args.parent_window or unknownargs): start_persepolis_if_browser_executed = True start_in_tray = True else: start_persepolis_if_browser_executed = False def main(): # if lock_file is existed , it means persepolis is still running! if lock_file_validation and (not ((args.parent_window or unknownargs) and browser_url is False) or ((args.parent_window or unknownargs) and start_persepolis_if_browser_executed)): QAPP = QtWidgets.QApplication.instance() if QAPP is None: # We do not have an already instantiated QApplication # let's add some sane defaults # hidpi handling qtVersionCompare = tuple(map(int, QT_VERSION_STR.split("."))) if qtVersionCompare > (6, 0): # Qt6 seems to support hidpi without needing to do anything so continue pass elif qtVersionCompare > (5, 14): try: os.environ["QT_ENABLE_HIGHDPI_SCALING"] = "1" QtWidgets.QApplication.setHighDpiScaleFactorRoundingPolicy( QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough ) except Exception as error_message: from persepolis.scripts import logger logger.sendToLog(str(error_message), "ERROR") else: # qt 5.12 and 5.13 try: QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) except Exception as error_message: from persepolis.scripts import logger logger.sendToLog(str(error_message), "ERROR") # set QT_AUTO_SCREEN_SCALE_FACTOR to 1 for "high DPI displays" # os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] = '1' # run mainwindow # set color_scheme and style # see palettes.py and setting.py # create QApplication persepolis_download_manager = PersepolisApplication(sys.argv) # setQuitOnLastWindowClosed(False) is needed to prevent persepolis exiting, # when it's minimized in system tray. persepolis_download_manager.setQuitOnLastWindowClosed(False) # # Enable High DPI display # try: # if hasattr(QStyleFactory, 'AA_UseHighDpiPixmaps'): # persepolis_download_manager.setAttribute(Qt.AA_UseHighDpiPixmaps) # except: # from persepolis.scripts import logger # # write error_message in log file. # logger.sendToLog('Qt.AA_UseHighDpiPixmaps is not available!', "ERROR") # this line is added fot fixing persepolis view in HighDpi displays # more information at: https://doc.qt.io/qt-5/highdpi.html # try: # persepolis_download_manager.setAttribute(Qt.AA_EnableHighDpiScaling) # except: # from persepolis.scripts import logger # # write error_message in log file. # logger.sendToLog('Qt.AA_EnableHighDpiScaling is not available!', "ERROR") # set organization name and domain and application name persepolis_download_manager.setOrganizationName('com.github.persepolisdm.persepolis') persepolis_download_manager.setApplicationName('PersepolisDM') persepolis_download_manager.setDesktopFileName('com.github.persepolisdm.persepolis') persepolis_download_manager.setApplicationVersion('4.3.0') # Persepolis setting persepolis_download_manager.setting = QSettings('persepolis_download_manager', 'persepolis') # get user's desired font and style , ... from setting custom_font = persepolis_download_manager.setting.value('settings/custom-font') font = persepolis_download_manager.setting.value('settings/font') font_size = int(persepolis_download_manager.setting.value('settings/font-size')) style = persepolis_download_manager.setting.value('settings/style') color_scheme = persepolis_download_manager.setting.value('settings/color-scheme') ui_direction = persepolis_download_manager.setting.value('ui_direction') # set style persepolis_download_manager.setPersepolisStyle(style) # set font persepolis_download_manager.setPersepolisFont(font, font_size, custom_font) # set color_scheme persepolis_download_manager.setPersepolisColorScheme(color_scheme) # set ui direction if ui_direction == 'rtl': persepolis_download_manager.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': persepolis_download_manager.setLayoutDirection(Qt.LeftToRight) # run mainwindow try: mainwindow = MainWindow(start_in_tray, persepolis_download_manager, persepolis_download_manager.setting) if start_in_tray: mainwindow.hide() else: mainwindow.show() except Exception: from persepolis.scripts import logger error_message = str(traceback.format_exc()) # write error_message in log file. logger.sendToLog(error_message, "ERROR") # Reset persepolis error_window = ErrorWindow(error_message) error_window.show() sys.exit(persepolis_download_manager.exec_()) elif not ((args.parent_window or unknownargs)): # this section warns user that program is still running and no need to run it again # and creating a file to notify mainwindow for showing itself! # (see CheckingThread in mainwindow.py for more information) if len(plugin_list) == 0: show_window_file = os.path.join(persepolis_tmp, 'show-window') f = open(show_window_file, 'w') f.close() sys.exit(0) persepolisdm-persepolis-867ee76/persepolis/scripts/play.py000066400000000000000000000063321464161131600241620ustar00rootroot00000000000000 # 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 . try: from PySide6.QtCore import QSettings except: from PyQt5.QtCore import QSettings from persepolis.scripts import logger from persepolis.constants import OS import subprocess import platform os_type = platform.system() def playNotification(file): # getting user setting from persepolis_setting persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') # enabling or disabling notification sound in persepolis_setting enable_notification = str(persepolis_setting.value('settings/sound')) # volume of notification in persepolis_setting(an integer between 0 to 100) volume_percent = int(persepolis_setting.value('settings/sound-volume')) # Paplay volume value must be between 0 (silent) and 65536 (100% volume) volume = int((65536 * volume_percent) / 100) if enable_notification == 'yes': if os_type in OS.UNIX_LIKE: pipe = subprocess.Popen(['paplay', '--volume=' + str(volume), str(file)], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) answer = pipe.wait() if answer != 0: logger.sendToLog( "paplay not installed!Install it for playing sound notification", "WARNING") elif os_type == OS.OSX: pipe = subprocess.Popen(['osascript', '-e', 'set', 'volume', 'alert', 'volume', str(volume)], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) pipe = subprocess.Popen(['osascript', '-e', 'beep', '3'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False) elif os_type == OS.WINDOWS: CREATE_NO_WINDOW = 0x08000000 subprocess.Popen(['rundll32', 'user32.dll,MessageBeep'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=CREATE_NO_WINDOW) persepolisdm-persepolis-867ee76/persepolis/scripts/progress.py000066400000000000000000000305031464161131600250560ustar00rootroot00000000000000 # -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QSize, QPoint, QThread, QTranslator, QCoreApplication, QLocale from PySide6.QtWidgets import QLineEdit, QInputDialog from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QSize, QPoint, QThread, QTranslator, QCoreApplication, QLocale from PyQt5.QtWidgets import QLineEdit, QInputDialog from PyQt5.QtGui import QIcon from persepolis.gui.progress_ui import ProgressWindow_Ui from persepolis.scripts.shutdown import shutDown from persepolis.scripts.bubble import notifySend from persepolis.scripts import download from persepolis.constants import OS import subprocess import platform os_type = platform.system() class ShutDownThread(QThread): def __init__(self, parent, gid, password=None): QThread.__init__(self) self.gid = gid self.password = password self.parent = parent def run(self): shutDown(self.parent, gid=self.gid, password=self.password) class ProgressWindow(ProgressWindow_Ui): def __init__(self, parent, gid, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.parent = parent self.gid = gid self.status = None self.resume_pushButton.clicked.connect(self.resumePushButtonPressed) self.stop_pushButton.clicked.connect(self.stopPushButtonPressed) self.pause_pushButton.clicked.connect(self.pausePushButtonPressed) self.download_progressBar.setValue(0) self.limit_pushButton.clicked.connect(self.limitPushButtonPressed) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitCheckBoxToggled) self.after_frame.setEnabled(False) self.after_checkBox.toggled.connect(self.afterCheckBoxToggled) self.after_pushButton.clicked.connect(self.afterPushButtonPressed) # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # check if limit speed activated by user or not add_link_dictionary = self.parent.persepolis_db.searchGidInAddLinkTable(gid) limit = str(add_link_dictionary['limit_value']) if limit != '0': limit_number = limit[:-1] limit_unit = limit[-1] self.limit_spinBox.setValue(float(limit_number)) if limit_unit == 'K': self.after_comboBox.setCurrentIndex(0) else: self.after_comboBox.setCurrentIndex(1) self.limit_checkBox.setChecked(True) self.after_comboBox.currentIndexChanged.connect(self.afterComboBoxChanged) self.limit_comboBox.currentIndexChanged.connect(self.limitComboBoxChanged) self.limit_spinBox.valueChanged.connect(self.limitComboBoxChanged) # set window size and position size = self.persepolis_setting.value( 'ProgressWindow/size', QSize(595, 274)) position = self.persepolis_setting.value( 'ProgressWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): # save window size and position self.persepolis_setting.setValue('ProgressWindow/size', self.size()) self.persepolis_setting.setValue('ProgressWindow/position', self.pos()) self.persepolis_setting.sync() self.hide() def resumePushButtonPressed(self, button): if self.status == "paused": answer = download.downloadUnpause(self.gid) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("progress_src_ui_tr", "Persepolis is trying to connect! be patient!"), 10000, 'warning', parent=self.parent) else: notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("progress_src_ui_tr", "Please try again."), 10000, 'warning', parent=self.parent) def pausePushButtonPressed(self, button): if self.status == "downloading": answer = download.downloadPause(self.gid, self.parent) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() download.downloadStop(self.gid, self.parent) notifySend("Aria2 disconnected!", "Persepolis is trying to connect! be patient!", 10000, 'warning', parent=self.parent) else: notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("progress_src_ui_tr", "Try again!"), 10000, 'critical', parent=self.parent) def stopPushButtonPressed(self, button): dict = {'gid': self.gid, 'shutdown': 'canceled'} self.parent.temp_db.updateSingleTable(dict) answer = download.downloadStop(self.gid, self.parent) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if answer == 'None': version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("progress_src_ui_tr", "Persepolis is trying to connect! be patient!"), 10000, 'warning', parent=self.parent) def limitCheckBoxToggled(self, checkBoxes): # user checked limit_checkBox if self.limit_checkBox.isChecked() is True: self.limit_frame.setEnabled(True) self.limit_pushButton.setEnabled(True) # user unchecked limit_checkBox else: self.limit_frame.setEnabled(False) # check download status is "scheduled" or not! if self.status != 'scheduled': # tell aria2 for unlimited speed download.limitSpeed(self.gid, "0") else: # update limit value in data_base add_link_dictionary = {'gid': self.gid, 'limit_value': '0'} self.parent.persepolis_db.updateAddLinkTable([add_link_dictionary]) def limitComboBoxChanged(self, connect): self.limit_pushButton.setEnabled(True) def afterComboBoxChanged(self, connect): self.after_pushButton.setEnabled(True) def afterCheckBoxToggled(self, checkBoxes): if self.after_checkBox.isChecked(): self.after_frame.setEnabled(True) else: # so user canceled shutdown after download # write cancel value in data_base for this gid self.after_frame.setEnabled(False) dict = {'gid': self.gid, 'shutdown': 'canceled'} self.parent.temp_db.updateSingleTable(dict) def afterPushButtonPressed(self, button): self.after_pushButton.setEnabled(False) if os_type != OS.WINDOWS: # For Linux and Mac OSX and FreeBSD and OpenBSD # get root password passwd, ok = QInputDialog.getText( self, 'PassWord', 'Please enter root password:', QLineEdit.Password) if ok: # check password is true or not! pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() # Wrong password while answer != 0: passwd, ok = QInputDialog.getText( self, 'PassWord', 'Wrong Password!\nPlease try again.', QLineEdit.Password) if ok: # checking password pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() else: ok = False break if ok is not False: # if user selects shutdown option after download progress, # value of 'shutdown' will changed in temp_db for this gid # and "wait" word will be written for this value. # (see ShutDownThread and shutdown.py for more information) # shutDown method will check that value in a loop . # when "wait" changes to "shutdown" then shutdown.py script # will shut down the system. shutdown_enable = ShutDownThread(self.parent, self.gid, passwd) self.parent.threadPool.append(shutdown_enable) self.parent.threadPool[-1].start() else: self.after_checkBox.setChecked(False) else: self.after_checkBox.setChecked(False) else: # for Windows shutdown_enable = ShutDownThread(self.parent, self.gid) self.parent.threadPool.append(shutdown_enable) self.parent.threadPool[-1].start() def limitPushButtonPressed(self, button): self.limit_pushButton.setEnabled(False) if self.limit_comboBox.currentText() == "KiB/s": limit_value = str(self.limit_spinBox.value()) + str("K") else: limit_value = str(self.limit_spinBox.value()) + str("M") # if download was started before , send the limit_speed request to aria2 . # else save the request in data_base if self.status != 'scheduled': download.limitSpeed(self.gid, limit_value) else: # update limit value in data_base add_link_dictionary = {'gid': self.gid, 'limit_value': limit_value} self.parent.persepolis_db.updateAddLinkTable([add_link_dictionary]) def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.resume_pushButton.setIcon(QIcon(icons + 'play')) self.pause_pushButton.setIcon(QIcon(icons + 'pause')) self.stop_pushButton.setIcon(QIcon(icons + 'stop')) persepolisdm-persepolis-867ee76/persepolis/scripts/properties.py000066400000000000000000000536021464161131600254130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QSize, QPoint, QDir, QTime, QCoreApplication from PySide6.QtWidgets import QLabel, QLineEdit, QFileDialog from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QSize, QPoint, QDir, QTime, QCoreApplication from PyQt5.QtWidgets import QLabel, QLineEdit, QFileDialog from PyQt5.QtGui import QIcon from persepolis.gui.addlink_ui import AddLinkWindow_Ui from persepolis.scripts.check_proxy import getProxy import os class PropertiesWindow(AddLinkWindow_Ui): def __init__(self, parent, callback, gid, persepolis_setting, socks5_to_http_convertor_is_installed, video_finder_dictionary=None): super().__init__(persepolis_setting) self.parent = parent self.persepolis_setting = persepolis_setting self.video_finder_dictionary = video_finder_dictionary self.download_later_pushButton.hide() # hide download_later_pushButton self.change_name_checkBox.hide() # hide change_name_checkBox self.change_name_lineEdit.hide() # hide change_name_lineEdit # add new QLineEdit and QLineEdit for audio link if we have video finder links if self.video_finder_dictionary: self.link_label_2 = QLabel(self.link_frame) self.link_horizontalLayout.addWidget(self.link_label_2) self.link_lineEdit_2 = QLineEdit(self.link_frame) self.link_horizontalLayout.addWidget(self.link_lineEdit_2) self.link_lineEdit_2.textChanged.connect(self.linkLineChanged) self.link_label.setText(QCoreApplication.translate("addlink_ui_tr", "Video Link: ")) self.link_label_2.setText(QCoreApplication.translate("addlink_ui_tr", "Audio Link: ")) # gid_1 >> video_gid , gid_2 >> audio_gid self.gid_1 = self.video_finder_dictionary['video_gid'] self.gid_2 = self.video_finder_dictionary['audio_gid'] else: self.gid_1 = gid self.callback = callback # detect_proxy_pushButton self.detect_proxy_pushButton.clicked.connect( self.detectProxy) # connect folder_pushButton self.folder_pushButton.clicked.connect(self.changeFolder) self.download_folder_lineEdit.setEnabled(False) self.ok_pushButton.setEnabled(False) self.link_lineEdit.textChanged.connect(self.linkLineChanged) # connect OK and cancel button self.cancel_pushButton.clicked.connect(self.close) self.ok_pushButton.clicked.connect(self.okButtonPressed) # frames and checkBoxes self.proxy_frame.setEnabled(False) self.proxy_checkBox.toggled.connect(self.proxyFrame) self.download_frame.setEnabled(False) self.download_checkBox.toggled.connect(self.downloadFrame) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitFrame) self.start_frame.setEnabled(False) self.start_checkBox.toggled.connect(self.startFrame) self.end_frame.setEnabled(False) self.end_checkBox.toggled.connect(self.endFrame) # get information from data base self.add_link_dictionary_1 = self.parent.persepolis_db.searchGidInAddLinkTable(self.gid_1) self.download_table_dict_1 = self.parent.persepolis_db.searchGidInDownloadTable(self.gid_1) if video_finder_dictionary: self.add_link_dictionary_2 = self.parent.persepolis_db.searchGidInAddLinkTable(self.gid_2) self.download_table_dict_2 = self.parent.persepolis_db.searchGidInDownloadTable(self.gid_2) # create a copy from add_link_dictionary for checking changes finally! self.add_link_dictionary_1_backup = {} for key in self.add_link_dictionary_1.keys(): self.add_link_dictionary_1_backup[key] = self.add_link_dictionary_1[key] if video_finder_dictionary: self.add_link_dictionary_2_backup = {} for key in self.add_link_dictionary_2.keys(): self.add_link_dictionary_2_backup[key] = self.add_link_dictionary_2[key] # initialization # disable folder_frame when download is complete if self.video_finder_dictionary: if self.video_finder_dictionary['video_completed'] == 'yes' or self.video_finder_dictionary['audio_completed'] == 'yes': self.folder_frame.setEnabled(False) else: if self.download_table_dict_1['status'] == 'complete': self.folder_frame.setEnabled(False) # link self.link_lineEdit.setText(self.add_link_dictionary_1['link']) if self.video_finder_dictionary: self.link_lineEdit_2.setText(self.add_link_dictionary_2['link']) # ip_lineEdit initialization if self.add_link_dictionary_1['ip']: self.proxy_checkBox.setChecked(True) self.ip_lineEdit.setText(self.add_link_dictionary_1['ip']) # port_spinBox initialization try: self.port_spinBox.setValue( int(self.add_link_dictionary_1['port'])) except: pass # proxy user lineEdit initialization try: self.proxy_user_lineEdit.setText( self.add_link_dictionary_1['proxy_user']) except: pass # proxy pass lineEdit initialization try: self.proxy_pass_lineEdit.setText( self.add_link_dictionary_1['proxy_passwd']) except: pass # proxy type proxy_type = self.add_link_dictionary_1['proxy_type'] # default is http if not (socks5_to_http_convertor_is_installed): self.socks5_radioButton.setEnabled(False) else: self.socks5_radioButton.setEnabled(True) if proxy_type == 'socks5': self.socks5_radioButton.setChecked(True) elif proxy_type == 'https': self.https_radioButton.setChecked(True) else: self.http_radioButton.setChecked(True) # download UserName initialization if self.add_link_dictionary_1['download_user']: self.download_checkBox.setChecked(True) self.download_user_lineEdit.setText( self.add_link_dictionary_1['download_user']) # download PassWord initialization try: self.download_pass_lineEdit.setText( self.add_link_dictionary_1['download_passwd']) except: pass # folder_path try: self.download_folder_lineEdit.setText( self.add_link_dictionary_1['download_path']) except: pass # connections try: self.connections_spinBox.setValue( int(self.add_link_dictionary_1['connections'])) except: pass # get categories name and add them to add_queue_comboBox categories_list = self.parent.persepolis_db.categoriesList() for queue in categories_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) # finding current queue and setting it! self.current_category = self.download_table_dict_1['category'] current_category_index = self.add_queue_comboBox.findText( self.current_category) self.add_queue_comboBox.setCurrentIndex(current_category_index) # add_queue_comboBox event self.add_queue_comboBox.currentIndexChanged.connect(self.queueChanged) # limit speed limit = str(self.add_link_dictionary_1['limit_value']) if limit != '0': self.limit_checkBox.setChecked(True) limit_number = limit[0:-1] limit_unit = limit[-1] self.limit_spinBox.setValue(float(limit_number)) if limit_unit == "K": self.limit_comboBox.setCurrentIndex(0) else: self.limit_comboBox.setCurrentIndex(1) # start_time if self.add_link_dictionary_1['start_time']: # get hour and minute hour, minute = self.add_link_dictionary_1['start_time'].split(':') # set time q_time = QTime(int(hour), int(minute)) self.start_time_qDataTimeEdit.setTime(q_time) self.start_checkBox.setChecked(True) # end_time if self.add_link_dictionary_1['end_time']: # get hour and minute hour, minute = self.add_link_dictionary_1['end_time'].split(':') # set time q_time = QTime(int(hour), int(minute)) self.end_time_qDateTimeEdit.setTime(q_time) self.end_checkBox.setChecked(True) # referer if self.add_link_dictionary_1['referer']: self.referer_lineEdit.setText(str(self.add_link_dictionary_1['referer'])) if self.add_link_dictionary_1['header']: self.header_lineEdit.setText(str(self.add_link_dictionary_1['header'])) if self.add_link_dictionary_1['user_agent']: self.user_agent_lineEdit.setText(str(self.add_link_dictionary_1['user_agent'])) if self.add_link_dictionary_1['load_cookies']: self.load_cookies_lineEdit.setText((self.add_link_dictionary_1['load_cookies'])) # set window size and position size = self.persepolis_setting.value( 'PropertiesWindow/size', QSize(520, 425)) position = self.persepolis_setting.value( 'PropertiesWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) # detect system proxy setting, and set ip_lineEdit and port_spinBox def detectProxy(self, button): # get system proxy information system_proxy_dict = getProxy() enable_proxy_frame = False # ip if 'http_proxy_ip' in system_proxy_dict.keys(): self.ip_lineEdit.setText(str(system_proxy_dict['http_proxy_ip'])) enable_proxy_frame = True # port if 'http_proxy_port' in system_proxy_dict.keys(): self.port_spinBox.setValue(int(system_proxy_dict['http_proxy_port'])) enable_proxy_frame = True # enable proxy frame if http_proxy_ip or http_proxy_port is valid. if enable_proxy_frame: self.proxy_checkBox.setChecked(True) self.detect_proxy_label.setText('') else: self.proxy_checkBox.setChecked(False) self.detect_proxy_label.setText('No proxy detected!') # activate frames if checkBoxes checked def proxyFrame(self, checkBox): if self.proxy_checkBox.isChecked(): self.proxy_frame.setEnabled(True) else: self.proxy_frame.setEnabled(False) def downloadFrame(self, checkBox): if self.download_checkBox.isChecked(): self.download_frame.setEnabled(True) else: self.download_frame.setEnabled(False) def limitFrame(self, checkBox): if self.limit_checkBox.isChecked(): self.limit_frame.setEnabled(True) else: self.limit_frame.setEnabled(False) def startFrame(self, checkBox): if self.start_checkBox.isChecked(): self.start_frame.setEnabled(True) else: self.start_frame.setEnabled(False) def endFrame(self, checkBox): if self.end_checkBox.isChecked(): self.end_frame.setEnabled(True) else: self.end_frame.setEnabled(False) def changeFolder(self, button): fname = QFileDialog.getExistingDirectory(self, 'Open f', '/home') if fname: # Returns pathName with the '/' separators converted to separators that are appropriate for the underlying operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". fname = QDir.toNativeSeparators(fname) if os.path.isdir(fname): self.download_folder_lineEdit.setText(fname) def linkLineChanged(self, lineEdit): if str(self.link_lineEdit.text()) == '': self.ok_pushButton.setEnabled(False) else: self.ok_pushButton.setEnabled(True) def queueChanged(self, combo): # if one of the queues selected by user , start time and end time must # be deactivated if self.add_queue_comboBox.currentIndex() != 0: self.start_checkBox.setCheckState(Qt.Unchecked) self.start_checkBox.setEnabled(False) self.end_checkBox.setCheckState(Qt.Unchecked) self.end_checkBox.setEnabled(False) else: self.start_checkBox.setEnabled(True) self.end_checkBox.setEnabled(True) def okButtonPressed(self, button): # write user's new inputs in persepolis_setting for next time if needed if self.folder_checkBox.isChecked() is True: self.persepolis_setting.setValue( 'settings/download_path', self.download_folder_lineEdit.text()) # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: proxy_type = 'http' elif self.https_radioButton.isChecked() is True: proxy_type = 'https' else: proxy_type = 'socks5' if not (self.proxy_checkBox.isChecked()): ip = None port = None proxy_user = None proxy_passwd = None proxy_type = None else: ip = self.ip_lineEdit.text() if not (ip): ip = None port = str(self.port_spinBox.value()) if not (port): port = None proxy_user = self.proxy_user_lineEdit.text() if not (proxy_user): proxy_user = None proxy_passwd = self.proxy_pass_lineEdit.text() if not (proxy_passwd): proxy_passwd = None if not (self.download_checkBox.isChecked()): download_user = None download_passwd = None else: download_user = self.download_user_lineEdit.text() if not (download_user): download_user = None download_passwd = self.download_pass_lineEdit.text() if not (download_passwd): download_passwd = None if not (self.limit_checkBox.isChecked()): limit = 0 else: if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") if not (self.start_checkBox.isChecked()): start_time = None else: start_time = self.start_time_qDataTimeEdit.text() if not (self.end_checkBox.isChecked()): end_time = None else: end_time = self.end_time_qDateTimeEdit.text() connections = self.connections_spinBox.value() download_path = self.download_folder_lineEdit.text() # referer if self.referer_lineEdit.text() != '': referer = self.referer_lineEdit.text() else: referer = None # header if self.header_lineEdit.text() != '': header = self.header_lineEdit.text() else: header = None # user_agent if self.user_agent_lineEdit.text() != '': user_agent = self.user_agent_lineEdit.text() else: user_agent = None # load_cookies if self.load_cookies_lineEdit.text() != '': load_cookies = self.load_cookies_lineEdit.text() else: load_cookies = None self.add_link_dictionary_1['start_time'] = start_time self.add_link_dictionary_1['end_time'] = end_time self.add_link_dictionary_1['link'] = self.link_lineEdit.text() self.add_link_dictionary_1['ip'] = ip self.add_link_dictionary_1['port'] = port self.add_link_dictionary_1['proxy_user'] = proxy_user self.add_link_dictionary_1['proxy_passwd'] = proxy_passwd self.add_link_dictionary_1['proxy_type'] = proxy_type self.add_link_dictionary_1['download_user'] = download_user self.add_link_dictionary_1['download_passwd'] = download_passwd self.add_link_dictionary_1['download_path'] = download_path self.add_link_dictionary_1['limit_value'] = limit self.add_link_dictionary_1['connections'] = connections self.add_link_dictionary_1['referer'] = referer self.add_link_dictionary_1['header'] = header self.add_link_dictionary_1['user_agent'] = user_agent self.add_link_dictionary_1['load_cookies'] = load_cookies if self.video_finder_dictionary: self.add_link_dictionary_2['start_time'] = start_time self.add_link_dictionary_2['end_time'] = end_time self.add_link_dictionary_2['link'] = self.link_lineEdit_2.text() self.add_link_dictionary_2['ip'] = ip self.add_link_dictionary_2['port'] = port self.add_link_dictionary_2['proxy_user'] = proxy_user self.add_link_dictionary_2['proxy_passwd'] = proxy_passwd self.add_link_dictionary_2['proxy_type'] = proxy_type self.add_link_dictionary_2['download_user'] = download_user self.add_link_dictionary_2['download_passwd'] = download_passwd self.add_link_dictionary_2['download_path'] = download_path self.add_link_dictionary_2['limit_value'] = limit self.add_link_dictionary_2['connections'] = connections self.add_link_dictionary_2['referer'] = referer self.add_link_dictionary_2['header'] = header self.add_link_dictionary_2['user_agent'] = user_agent self.add_link_dictionary_2['load_cookies'] = load_cookies new_category = str(self.add_queue_comboBox.currentText()) # it means category changed and data base must be updated. if new_category != self.current_category: self.download_table_dict_1['category'] = new_category # update data base self.parent.persepolis_db.updateDownloadTable([self.download_table_dict_1]) if self.video_finder_dictionary: # category for audio and video must be same as each other self.download_table_dict_2['category'] = new_category self.parent.persepolis_db.updateDownloadTable([self.download_table_dict_2]) # if any thing in add_link_dictionary_1 is changed,then update data base! for key in self.add_link_dictionary_1.keys(): if self.add_link_dictionary_1[key] != self.add_link_dictionary_1_backup[key]: # update data base self.parent.persepolis_db.updateAddLinkTable([self.add_link_dictionary_1]) # break the loop break # if link changed, then update download_db_table in data base if self.add_link_dictionary_1['link'] != self.add_link_dictionary_1_backup['link']: dictionary = {'gid': self.gid_1, 'link': self.add_link_dictionary_1['link']} self.parent.persepolis_db.updateDownloadTable([dictionary]) # if any thing in add_link_dictionary_2 is changed,then update data base! if self.video_finder_dictionary: for key in self.add_link_dictionary_2.keys(): if self.add_link_dictionary_2[key] != self.add_link_dictionary_2_backup[key]: # update data base self.parent.persepolis_db.updateAddLinkTable([self.add_link_dictionary_2]) # break the loop break # if link changed, then update download_db_table in data base if self.add_link_dictionary_2['link'] != self.add_link_dictionary_2_backup['link']: dictionary = {'gid': self.gid_2, 'link': self.add_link_dictionary_2['link']} self.parent.persepolis_db.updateDownloadTable([dictionary]) # if download_path was changed, then update video_finder_db_table in data base if self.add_link_dictionary_1['download_path'] != self.add_link_dictionary_1_backup['download_path']: dictionary = {'video_gid': self.gid_1, 'download_path': download_path} self.parent.persepolis_db.updateVideoFinderTable[dictionary] # callback to mainwindow self.callback(self.add_link_dictionary_1, self.gid_1, new_category, self.video_finder_dictionary) # close window self.close() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): # save window size and position self.persepolis_setting.setValue('PropertiesWindow/size', self.size()) self.persepolis_setting.setValue( 'PropertiesWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.download_later_pushButton.setIcon(QIcon(icons + 'stop')) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) persepolisdm-persepolis-867ee76/persepolis/scripts/setting.py000066400000000000000000001350241464161131600246730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QEvent, QTime, QSize, QPoint, QDir, QTranslator, QCoreApplication, QLocale from PySide6.QtWidgets import QFileDialog, QStyleFactory, QMessageBox, QTableWidgetItem from PySide6.QtGui import QFont, QKeySequence except: from PyQt5.QtCore import Qt, QEvent, QTime, QSize, QPoint, QDir, QTranslator, QCoreApplication, QLocale from PyQt5.QtWidgets import QFileDialog, QStyleFactory, QMessageBox, QTableWidgetItem from PyQt5.QtGui import QFont, QKeySequence from persepolis.constants import OS from persepolis.gui.setting_ui import Setting_Ui, KeyCapturingWindow_Ui from persepolis.scripts.useful_tools import returnDefaultSettings from persepolis.scripts import osCommands from persepolis.scripts import startup import platform import sys import os home_address = os.path.expanduser("~") os_type = platform.system() class KeyCapturingWindow(KeyCapturingWindow_Ui): def __init__(self, callback, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.callback = callback self.ok_pushButton.clicked.connect(self.okPushButtonPressed) self.cancel_pushButton.clicked.connect(self.close) self.installEventFilter(self) def eventFilter(self, source, event): if event.type() == QEvent.KeyPress: if event.key(): # show new keys in window self.capturedKeyLabel.setText(str(QKeySequence(event.modifiers() | event.key()).toString())) return super(KeyCapturingWindow, self).eventFilter(source, event) def okPushButtonPressed(self, button): # return new keys self.callback(self.capturedKeyLabel.text()) self.close() def closeEvent(self, event): event.accept() class PreferencesWindow(Setting_Ui): def __init__(self, parent, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.parent = parent self.grandparent = parent.persepolis_main self.persepolis_setting.beginGroup('settings') # initialization self.tries_spinBox.setValue( int(self.persepolis_setting.value('max-tries'))) self.wait_spinBox.setValue( int(self.persepolis_setting.value('retry-wait'))) self.time_out_spinBox.setValue( int(self.persepolis_setting.value('timeout'))) self.connections_spinBox.setValue( int(self.persepolis_setting.value('connections'))) self.rpc_port_spinbox.setValue( int(self.persepolis_setting.value('rpc-port'))) # check certificate if str(self.persepolis_setting.value('dont-check-certificate')) == 'yes': self.dont_check_certificate_checkBox.setChecked(True) else: self.dont_check_certificate_checkBox.setChecked(False) # remote time if str(self.persepolis_setting.value('remote-time')) == 'yes': self.remote_time_checkBox.setChecked(True) else: self.remote_time_checkBox.setChecked(False) # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # wait_queue wait_queue_list = self.persepolis_setting.value('wait-queue') try: q_time = QTime(int(wait_queue_list[0]), int(wait_queue_list[1])) except: q_time = QTime(0, 0) self.wait_queue_time.setTime(q_time) # change aria2 path self.aria2_path_pushButton.clicked.connect(self.changeAria2Path) self.aria2_path_checkBox.toggled.connect(self.ariaCheckBoxToggled) aria2_path = self.persepolis_setting.value('settings/aria2_path') self.aria2_path_lineEdit.setEnabled(False) if aria2_path is not None: self.aria2_path_checkBox.setChecked(True) self.aria2_path_lineEdit.setText(str(aria2_path)) self.ariaCheckBoxToggled('aria2') if os_type in OS.UNIX_LIKE: for widget in self.aria2_path_checkBox, self.aria2_path_lineEdit, self.aria2_path_pushButton: widget.hide() # save_as_tab self.download_folder_lineEdit.setText( str(self.persepolis_setting.value('download_path'))) # subfolder if str(self.persepolis_setting.value('subfolder')) == 'yes': self.subfolder_checkBox.setChecked(True) else: self.subfolder_checkBox.setChecked(False) # notifications_tab self.volume_label.setText( 'Volume : ' + str(self.persepolis_setting.value('sound-volume'))) self.volume_dial.setValue( int(self.persepolis_setting.value('sound-volume'))) # set style # find available styles(It's depends on operating system and desktop environments). available_styles = QStyleFactory.keys() for style in available_styles: # 'bb10dark', 'GTK', 'gtk' styles may cause to crashing! Eliminate them! style_black_list = ['bb10dark', 'bb10bright', 'GTK', 'gtk', 'gtk2'] if style not in style_black_list: self.style_comboBox.addItem(style) # System >> for system default style # when user select System for style section, the default system style is using. self.style_comboBox.addItem('System') current_style_index = self.style_comboBox.findText( str(self.persepolis_setting.value('style'))) if current_style_index != -1: self.style_comboBox.setCurrentIndex(current_style_index) # available language available_language = ['en_US', 'fa_IR', 'ar', 'es_ES', 'fr_FR', 'ko', 'pl_PL', 'pt', 'ru', 'tr', 'zh_CN', 'de', 'hu', 'nl_NL', 'pt_BR', 'sv', 'tr_TR', 'zh_TW'] for lang in available_language: self.lang_comboBox.addItem(str(QLocale(lang).nativeLanguageName()), lang) current_locale = self.lang_comboBox.findData( str(self.persepolis_setting.value('locale'))) self.lang_comboBox.setCurrentIndex(current_locale) self.current_icon = self.persepolis_setting.value('icons') # icon size size = ['128', '64', '48', '32', '24', '16'] self.icons_size_comboBox.addItems(size) current_icons_size_index = self.icons_size_comboBox.findText( str(self.persepolis_setting.value('toolbar_icon_size'))) self.icons_size_comboBox.setCurrentIndex(current_icons_size_index) # call setDarkLightIcon if index is changed self.icons_size_comboBox.currentIndexChanged.connect(self.setDarkLightIcon) # set notification notifications = ['Native notification', 'QT notification'] self.notification_comboBox.addItems(notifications) current_notification_index = self.notification_comboBox.findText( str(self.persepolis_setting.value('notification'))) self.notification_comboBox.setCurrentIndex(current_notification_index) if os_type not in OS.UNIX_LIKE: self.notification_comboBox.hide() self.notification_label.hide() # set font font_setting = QFont() font_setting.setFamily(str(self.persepolis_setting.value('font'))) self.fontComboBox.setCurrentFont(font_setting) self.font_size_spinBox.setValue( int(self.persepolis_setting.value('font-size'))) # sound frame self.sound_frame.setEnabled(False) self.enable_notifications_checkBox.toggled.connect(self.soundFrame) if str(self.persepolis_setting.value('sound')) == 'yes': self.enable_notifications_checkBox.setChecked(True) else: self.enable_notifications_checkBox.setChecked(False) # connect folder buttons self.download_folder_lineEdit.setEnabled(False) self.download_folder_pushButton.clicked.connect( self.downloadFolderPushButtonClicked) # dial self.volume_dial.setNotchesVisible(True) self.volume_dial.valueChanged.connect(self.dialChanged) # start_persepolis_if_browser_executed_checkBox if str(self.persepolis_setting.value('browser-persepolis')) == 'yes': self.start_persepolis_if_browser_executed_checkBox.setChecked(True) else: self.start_persepolis_if_browser_executed_checkBox.setChecked(False) # hide window if str(self.persepolis_setting.value('hide-window')) == 'yes': self.hide_window_checkBox.setChecked(True) else: self.hide_window_checkBox.setChecked(False) # tray icon if str(self.persepolis_setting.value('tray-icon')) == 'yes': self.enable_system_tray_checkBox.setChecked(True) else: self.enable_notifications_checkBox.setChecked(False) # show_menubar if str(self.persepolis_setting.value('show-menubar')) == 'yes': self.show_menubar_checkbox.setChecked(True) else: self.show_menubar_checkbox.setChecked(False) if platform.system() == 'Darwin': self.show_menubar_checkbox.setChecked(True) self.show_menubar_checkbox.hide() # show_sidepanel if str(self.persepolis_setting.value('show-sidepanel')) == 'yes': self.show_sidepanel_checkbox.setChecked(True) else: self.show_sidepanel_checkbox.setChecked(False) # show ProgressWindow if str(self.persepolis_setting.value('show-progress')) == 'yes': self.show_progress_window_checkbox.setChecked(True) else: self.show_progress_window_checkbox.setChecked(False) # after download dialog if str(self.persepolis_setting.value('after-dialog')) == 'yes': self.after_download_checkBox.setChecked(True) else: self.after_download_checkBox.setChecked(False) # run persepolis at startup checkBox if str(self.persepolis_setting.value('startup')) == 'yes': self.startup_checkbox.setChecked(True) else: self.startup_checkbox.setChecked(False) # font_checkBox if str(self.persepolis_setting.value('custom-font')) == 'yes': self.font_checkBox.setChecked(True) else: self.font_checkBox.setChecked(False) self.fontCheckBoxState(self.font_checkBox) # keep_awake_checkBox if str(self.persepolis_setting.value('awake')) == 'yes': self.keep_awake_checkBox.setChecked(True) else: self.keep_awake_checkBox.setChecked(False) # check_clipboard_checkBox if str(self.persepolis_setting.value('check-clipboard')) == 'yes': self.check_clipboard_checkBox.setChecked(True) else: self.check_clipboard_checkBox.setChecked(False) # When a download request is sent from the browser extension, # the download will start without showing the Add Link window. if str(self.persepolis_setting.value('dont-show-addlinkwindow')) == 'yes': self.dont_show_add_link_window_checkBox.setChecked(True) else: self.dont_show_add_link_window_checkBox.setChecked(False) # columns_tab if str(self.persepolis_setting.value('column0')) == 'yes': self.column0_checkBox.setChecked(True) else: self.column0_checkBox.setChecked(False) if str(self.persepolis_setting.value('column1')) == 'yes': self.column1_checkBox.setChecked(True) else: self.column1_checkBox.setChecked(False) if str(self.persepolis_setting.value('column2')) == 'yes': self.column2_checkBox.setChecked(True) else: self.column2_checkBox.setChecked(False) if str(self.persepolis_setting.value('column3')) == 'yes': self.column3_checkBox.setChecked(True) else: self.column3_checkBox.setChecked(False) if str(self.persepolis_setting.value('column4')) == 'yes': self.column4_checkBox.setChecked(True) else: self.column4_checkBox.setChecked(False) if str(self.persepolis_setting.value('column5')) == 'yes': self.column5_checkBox.setChecked(True) else: self.column5_checkBox.setChecked(False) if str(self.persepolis_setting.value('column6')) == 'yes': self.column6_checkBox.setChecked(True) else: self.column6_checkBox.setChecked(False) if str(self.persepolis_setting.value('column7')) == 'yes': self.column7_checkBox.setChecked(True) else: self.column7_checkBox.setChecked(False) if str(self.persepolis_setting.value('column10')) == 'yes': self.column10_checkBox.setChecked(True) else: self.column10_checkBox.setChecked(False) if str(self.persepolis_setting.value('column11')) == 'yes': self.column11_checkBox.setChecked(True) else: self.column11_checkBox.setChecked(False) if str(self.persepolis_setting.value('column12')) == 'yes': self.column12_checkBox.setChecked(True) else: self.column12_checkBox.setChecked(False) # video_finder try: # Integer casting may raise exception. self.max_links_spinBox.setValue(int(persepolis_setting.value('video_finder/max_links', 3))) except: pass # shortcuts self.qshortcuts_list = [self.parent.exitAction_shortcut, self.parent.minimizeAction_shortcut, self.parent.removeSelectedAction_shortcut, self.parent.deleteSelectedAction_shortcut, self.parent.moveUpSelectedAction_shortcut, self.parent.moveDownSelectedAction_shortcut, self.parent.addlinkAction_shortcut, self.parent.videoFinderAddLinkAction_shortcut, self.parent.addtextfileAction_shortcut] self.shortcuts_list = [self.parent.exitAction_shortcut.key().toString(), self.parent.minimizeAction_shortcut.key().toString(), self.parent.removeSelectedAction_shortcut.key().toString(), self.parent.deleteSelectedAction_shortcut.key().toString(), self.parent.moveUpSelectedAction_shortcut.key().toString(), self.parent.moveDownSelectedAction_shortcut.key().toString(), self.parent.addlinkAction_shortcut.key().toString(), self.parent.videoFinderAddLinkAction_shortcut.key().toString(), self.parent.addtextfileAction_shortcut.key().toString()] # add shortcuts to the shortcut_table j = 0 for shortcut in self.shortcuts_list: item = QTableWidgetItem(shortcut) # align center item.setTextAlignment(0x0004 | 0x0080) # insert item in shortcut_table self.shortcut_table.setItem(j, 1, item) j = j + 1 # If user doubleclicks on a row, then run showCaptureKeyboardWindow method self.shortcut_table.itemDoubleClicked.connect(self.showCaptureKeyboardWindow) # ok cancel default button self.cancel_pushButton.clicked.connect(self.close) self.defaults_pushButton.clicked.connect( self.defaultsPushButtonPressed) self.ok_pushButton.clicked.connect(self.okPushButtonPressed) # font_checkBox connect self.font_checkBox.stateChanged.connect(self.fontCheckBoxState) # saving initial value of self.persepolis_setting in self.first_key_value_dict # at the end! in the okPushButtonPressed method, first_key_value_dict will compared with second_key_value_dict. # if any thing changed , then a message box notify user about "some changes take effect after restarting persepolis". self.first_key_value_dict = {} for member in self.persepolis_setting.allKeys(): self.first_key_value_dict[member] = str(self.persepolis_setting.value(member)) # if style_comboBox is changed, self.styleComboBoxChanged is called. self.style_comboBox.currentIndexChanged.connect(self.styleComboBoxChanged) self.styleComboBoxChanged() self.color_comboBox.currentIndexChanged.connect(self.setDarkLightIcon) self.persepolis_setting.endGroup() # setting window size and position size = self.persepolis_setting.value( 'PreferencesWindow/size', QSize(578, 565)) position = self.persepolis_setting.value( 'PreferencesWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) # run this method if user doubleclicks on an item in shortcut_table def showCaptureKeyboardWindow(self): # show KeyCapturingWindow keyboard_capture_window = KeyCapturingWindow(self.callBack, self.persepolis_setting) self.parent.capturekeywindows_list.append(keyboard_capture_window) self.parent.capturekeywindows_list[-1].show() def callBack(self, keys): # do nothing if keys is empty if not (keys): return # check that if shortcut used before. if keys in self.shortcuts_list: self.msgBox = QMessageBox() self.msgBox.setText(QCoreApplication.translate("setting_src_ui_tr", "
This shortcut has been used before!\ Use another one!
")) self.msgBox.setIcon(QMessageBox.Warning) # set new shortcut else: selected_row = self.shortcut_table.selectionModel().selectedRows()[0].row() item = QTableWidgetItem(keys) # align center item.setTextAlignment(0x0004 | 0x0080) # insert item in shortcut_table self.shortcut_table.setItem(selected_row, 1, item) # set keys in shortcuts_list self.shortcuts_list[selected_row] = keys # active color_comboBox only when user is select "Fusion" style. def styleComboBoxChanged(self, index=None): # clear color_comboBox self.color_comboBox.clear() # get current style selected_style = self.style_comboBox.currentText() if selected_style != 'Fusion': # color_comboBox item color_scheme = ['System'] # add item self.color_comboBox.addItems(color_scheme) # set 'System' for color_scheme current_color_index = self.color_comboBox.findText('System') self.color_comboBox.setCurrentIndex(current_color_index) # disable color_comboBox self.color_comboBox.setEnabled(False) else: # enable color_comboBox self.color_comboBox.setEnabled(True) # color_comboBox items color_scheme = ['Dark Fusion', 'Light Fusion'] # add items self.color_comboBox.addItems(color_scheme) current_color_index = self.color_comboBox.findText( str(self.persepolis_setting.value('color-scheme'))) # it means user's preferred color_scheme is not valid in color_comboBox. if current_color_index == -1: current_color_index = 0 self.color_comboBox.setCurrentIndex(current_color_index) self.setDarkLightIcon() # this method sets dark icons for dark color schemes # and light icons for light color schemes. def setDarkLightIcon(self, index=None): dark_theme = None # find selected style selected_style = self.style_comboBox.currentText() # clear icon_comboBox self.icon_comboBox.clear() # Papirus icons can be used with small sizes(smaller than 48) # get user's selected icons size selected_size = int(self.icons_size_comboBox.currentText()) if selected_style == 'Fusion': if self.color_comboBox.currentText() == 'Dark Fusion': dark_theme = True else: dark_theme = False elif selected_style == 'Adwaita-Dark': dark_theme = True elif selected_style == 'Adwaita' or selected_style == 'macintosh': dark_theme = False if dark_theme is True: self.icon_comboBox.clear() if selected_size < 48: icons = ['Breeze-Dark', 'Papirus-Dark'] else: icons = ['Breeze-Dark'] self.icon_comboBox.addItems(icons) # current_icons_index is -1, if findText couldn't find icon index. current_icons_index = self.icon_comboBox.findText( str(self.persepolis_setting.value('icons', self.current_icon))) if current_icons_index == -1: current_icons_index = 0 self.icon_comboBox.setCurrentIndex(current_icons_index) elif dark_theme is False: if selected_size < 48: icons = ['Breeze', 'Papirus', 'Papirus-Light'] else: icons = ['Breeze', 'Papirus'] self.icon_comboBox.addItems(icons) # current_icons_index is -1, if findText couldn't find icon index. current_icons_index = self.icon_comboBox.findText( str(self.persepolis_setting.value('icons', self.current_icon))) if current_icons_index == -1: current_icons_index = 0 self.icon_comboBox.setCurrentIndex(current_icons_index) else: if selected_size < 48: icons = ['Breeze', 'Breeze-Dark', 'Papirus', 'Papirus-Dark', 'Papirus-Light'] else: icons = ['Breeze', 'Breeze-Dark', 'Papirus'] self.icon_comboBox.addItems(icons) # current_icons_index is -1, if findText couldn't find icon index. current_icons_index = self.icon_comboBox.findText( str(self.persepolis_setting.value('icons', self.current_icon))) if current_icons_index == -1: current_icons_index = 0 self.icon_comboBox.setCurrentIndex(current_icons_index) def fontCheckBoxState(self, checkBox): # deactivate fontComboBox and font_size_spinBox if font_checkBox not checked! if self.font_checkBox.isChecked(): self.fontComboBox.setEnabled(True) self.font_size_spinBox.setEnabled(True) else: self.fontComboBox.setEnabled(False) self.font_size_spinBox.setEnabled(False) # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): # saving window size and position self.persepolis_setting.setValue('PreferencesWindow/size', self.size()) self.persepolis_setting.setValue( 'PreferencesWindow/position', self.pos()) self.persepolis_setting.sync() event.accept() if self.parent.isVisible() is False: self.parent.minMaxTray(event) self.close() def soundFrame(self, checkBox): if self.enable_notifications_checkBox.isChecked(): self.sound_frame.setEnabled(True) else: self.sound_frame.setEnabled(False) def ariaCheckBoxToggled(self, checkBox): if self.aria2_path_checkBox.isChecked(): self.aria2_path_pushButton.setEnabled(True) else: self.aria2_path_pushButton.setEnabled(False) def changeAria2Path(self, button): cwd = sys.argv[0] cwd = os.path.dirname(cwd) f_path, filters = QFileDialog.getOpenFileName( self, 'Select aria2 path', cwd) # if path is correct: if os.path.isfile(str(f_path)): self.aria2_path_lineEdit.setText(str(f_path)) else: self.aria2_path_checkBox.setChecked(False) def downloadFolderPushButtonClicked(self, button): download_path = str( self.persepolis_setting.value('settings/download_path')) fname = QFileDialog.getExistingDirectory( self, 'Select a directory', download_path) if fname: # Returns pathName with the '/' separators converted to separators that are appropriate for the underlying operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". fname = QDir.toNativeSeparators(fname) self.download_folder_lineEdit.setText(fname) self.persepolis_setting.setValue( 'settings/download_path', str(fname)) def dialChanged(self, dial): self.volume_label.setText('Volume : ' + str(self.volume_dial.value())) def defaultsPushButtonPressed(self, button): self.persepolis_setting.beginGroup('settings') self.setting_dict = returnDefaultSettings() self.tries_spinBox.setValue(int(self.setting_dict['max-tries'])) self.wait_spinBox.setValue(int(self.setting_dict['retry-wait'])) self.time_out_spinBox.setValue(int(self.setting_dict['timeout'])) self.connections_spinBox.setValue( int(self.setting_dict['connections'])) self.rpc_port_spinbox.setValue(int(self.setting_dict['rpc-port'])) self.aria2_path_lineEdit.setText('') self.aria2_path_checkBox.setChecked(False) # wait-queue wait_queue_list = self.setting_dict['wait-queue'] q_time = QTime(wait_queue_list[0], wait_queue_list[1]) self.wait_queue_time.setTime(q_time) # dont_check_certificate_checkBox self.dont_check_certificate_checkBox.setChecked(False) # uncheck remote time self.remote_time_checkBox.setChecked(False) # save_as_tab self.download_folder_lineEdit.setText( str(self.setting_dict['download_path'])) self.subfolder_checkBox.setChecked(True) # notifications_tab self.volume_label.setText( 'Volume : ' + str(self.setting_dict['sound-volume'])) self.volume_dial.setValue(int(self.setting_dict['sound-volume'])) # set style current_style_index = self.style_comboBox.findText( str(self.setting_dict['style'])) self.style_comboBox.setCurrentIndex(current_style_index) # set language current_locale = self.lang_comboBox.findData( str(self.setting_dict['locale'])) self.lang_comboBox.setCurrentIndex(current_locale) # set color_scheme current_color_index = self.color_comboBox.findText( str(self.setting_dict['color-scheme'])) self.color_comboBox.setCurrentIndex(current_color_index) # set icons current_icons_index = self.icon_comboBox.findText( str(self.setting_dict['icons'])) self.icon_comboBox.setCurrentIndex(current_icons_index) # set icons size current_icons_size_index = self.icons_size_comboBox.findText( str(self.setting_dict['toolbar_icon_size'])) self.icons_size_comboBox.setCurrentIndex(current_icons_size_index) # set notification current_notification_index = self.notification_comboBox.findText( str(self.setting_dict['notification'])) self.notification_comboBox.setCurrentIndex(current_notification_index) # set font self.font_checkBox.setChecked(False) font_setting = QFont() font_setting.setFamily(str(self.setting_dict['font'])) self.fontComboBox.setCurrentFont(font_setting) self.font_size_spinBox.setValue(int(self.setting_dict['font-size'])) # sound frame self.enable_notifications_checkBox.setChecked(True) # start_persepolis_if_browser_executed_checkBox self.start_persepolis_if_browser_executed_checkBox.setChecked(True) # hide window self.hide_window_checkBox.setChecked(True) # tray icon self.enable_system_tray_checkBox.setChecked(True) # after_download_checkBox self.after_download_checkBox.setChecked(True) # hide menubar for linux if platform.system == 'Darwin': self.show_menubar_checkbox.setChecked(True) else: self.show_menubar_checkbox.setChecked(False) # show side panel self.show_sidepanel_checkbox.setChecked(True) # show progress window self.show_progress_window_checkbox.setChecked(True) # run persepolis at startup checkBox self.startup_checkbox.setChecked(False) # keep_awake_checkBox self.keep_awake_checkBox.setChecked(False) # check clipboard self.check_clipboard_checkBox.setChecked(False) # don't show addlinkwindows self.dont_show_add_link_window_checkBox.setChecked(False) # columns_tab self.column0_checkBox.setChecked(True) self.column1_checkBox.setChecked(True) self.column2_checkBox.setChecked(True) self.column3_checkBox.setChecked(True) self.column4_checkBox.setChecked(True) self.column5_checkBox.setChecked(True) self.column6_checkBox.setChecked(True) self.column7_checkBox.setChecked(True) self.column10_checkBox.setChecked(True) self.column11_checkBox.setChecked(True) self.column12_checkBox.setChecked(True) # video finder self.max_links_spinBox.setValue(3) # shortcuts self.shortcuts_list = [self.setting_dict['shortcuts/quit_shortcut'], self.setting_dict['shortcuts/hide_window_shortcut'], self.setting_dict['shortcuts/remove_shortcut'], self.setting_dict['shortcuts/delete_shortcut'], self.setting_dict['shortcuts/move_up_selection_shortcut'], self.setting_dict['shortcuts/move_down_selection_shortcut'], self.setting_dict['shortcuts/add_new_download_shortcut'], self.setting_dict['shortcuts/video_finder_shortcut'], self.setting_dict['shortcuts/import_text_shortcut']] # add shortcuts to the shortcut_table j = 0 for shortcut in self.shortcuts_list: item = QTableWidgetItem(shortcut) # align center item.setTextAlignment(0x0004 | 0x0080) # insert item in shortcut_table self.shortcut_table.setItem(j, 1, item) j = j + 1 self.persepolis_setting.endGroup() def okPushButtonPressed(self, button): self.persepolis_setting.beginGroup('settings') self.persepolis_setting.setValue( 'max-tries', self.tries_spinBox.value()) self.persepolis_setting.setValue( 'retry-wait', self.wait_spinBox.value()) self.persepolis_setting.setValue( 'timeout', self.time_out_spinBox.value()) self.persepolis_setting.setValue( 'connections', self.connections_spinBox.value()) self.persepolis_setting.setValue( 'rpc-port', self.rpc_port_spinbox.value()) self.persepolis_setting.setValue( 'download_path', self.download_folder_lineEdit.text()) self.persepolis_setting.setValue( 'sound-volume', self.volume_dial.value()) self.persepolis_setting.setValue( 'notification', self.notification_comboBox.currentText()) self.persepolis_setting.setValue( 'wait-queue', self.wait_queue_time.text().split(':')) # change aria2_path if self.aria2_path_checkBox.isChecked(): self.persepolis_setting.setValue('settings/aria2_path', str(self.aria2_path_lineEdit.text())) # don't check certificate if self.dont_check_certificate_checkBox.isChecked(): self.persepolis_setting.setValue('dont-check-certificate', 'yes') else: self.persepolis_setting.setValue('dont-check-certificate', 'no') # don't show addlinkwindows if self.dont_show_add_link_window_checkBox.isChecked(): self.persepolis_setting.setValue('dont-show-addlinkwindow', 'yes') else: self.persepolis_setting.setValue('dont-show-addlinkwindow', 'no') # remote time if self.remote_time_checkBox.isChecked(): self.persepolis_setting.setValue('remote-time', 'yes') else: self.persepolis_setting.setValue('remote-time', 'no') # changing icons icons = self.icon_comboBox.currentText() self.persepolis_setting.setValue('icons', icons) if icons != self.current_icon: # it means icons changed for windows_list in [self.parent.logwindow_list, self.parent.about_window_list, self.parent.addlinkwindows_list, self.parent.propertieswindows_list, self.parent.afterdownload_list, self.parent.text_queue_window_list, self.parent.progress_window_list, self.parent.plugin_queue_window_list]: for window in windows_list: window.changeIcon(icons) self.parent.changeIcon(icons) # icons size icons_size = self.icons_size_comboBox.currentText() self.persepolis_setting.setValue('toolbar_icon_size', icons_size) icons_size = int(icons_size) self.parent.toolBar.setIconSize(QSize(icons_size, icons_size)) self.parent.toolBar2.setIconSize(QSize(icons_size, icons_size)) # style style = str(self.style_comboBox.currentText()) self.persepolis_setting.setValue('style', style) # language locale = str(self.lang_comboBox.itemData(self.lang_comboBox.currentIndex())) self.persepolis_setting.setValue('locale', locale) # color_scheme color_scheme = self.color_comboBox.currentText() self.persepolis_setting.setValue('color-scheme', color_scheme) # font and font size current_font = self.fontComboBox.currentFont() current_font = current_font.key() current_font = current_font.split(',') font = str(current_font[0]) self.persepolis_setting.setValue('font', font) font_size = self.font_size_spinBox.value() self.persepolis_setting.setValue('font-size', font_size) if self.font_checkBox.isChecked(): custom_font = 'yes' else: custom_font = 'no' self.persepolis_setting.setValue('custom-font', custom_font) # if user select qt notification >> enable_system_tray icon if self.persepolis_setting.value('notification') == 'QT notification': self.enable_system_tray_checkBox.setChecked(True) # start_persepolis_if_browser_executed_checkBox if self.start_persepolis_if_browser_executed_checkBox.isChecked(): self.persepolis_setting.setValue('browser-persepolis', 'yes') else: self.persepolis_setting.setValue('browser-persepolis', 'no') # hide_window_checkBox if self.hide_window_checkBox.isChecked(): self.persepolis_setting.setValue('hide-window', 'yes') else: self.persepolis_setting.setValue('hide-window', 'no') # enable_system_tray_checkBox if self.enable_system_tray_checkBox.isChecked(): self.persepolis_setting.setValue('tray-icon', 'yes') self.parent.system_tray_icon.show() self.parent.minimizeAction.setEnabled(True) self.parent.trayAction.setChecked(True) else: self.persepolis_setting.setValue('tray-icon', 'no') self.parent.system_tray_icon.hide() self.parent.minimizeAction.setEnabled(False) self.parent.trayAction.setChecked(False) # after_download_checkBox if self.after_download_checkBox.isChecked(): self.persepolis_setting.setValue('after-dialog', 'yes') else: self.persepolis_setting.setValue('after-dialog', 'no') # show_menubar_checkbox if self.show_menubar_checkbox.isChecked(): self.persepolis_setting.setValue('show-menubar', 'yes') self.parent.menubar.show() self.parent.toolBar2.hide() self.parent.showMenuBarAction.setChecked(True) else: self.persepolis_setting.setValue('show-menubar', 'no') self.parent.menubar.hide() self.parent.toolBar2.show() self.parent.showMenuBarAction.setChecked(False) # show_sidepanel_checkbox if self.show_sidepanel_checkbox.isChecked(): self.persepolis_setting.setValue('show-sidepanel', 'yes') self.parent.category_tree_qwidget.show() else: self.persepolis_setting.setValue('show-sidepanel', 'no') self.parent.category_tree_qwidget.hide() # show_progress_window_checkbox if self.show_progress_window_checkbox.isChecked(): self.persepolis_setting.setValue('show-progress', 'yes') else: self.persepolis_setting.setValue('show-progress', 'no') if self.startup_checkbox.isChecked(): self.persepolis_setting.setValue('startup', 'yes') if not (startup.checkStartUp()): # checking existence of Persepolis in system's startup startup.addStartUp(self.parent) # adding Persepolis to system's startup else: self.persepolis_setting.setValue('startup', 'no') if startup.checkStartUp(): # checking existence of Persepolis in system's startup startup.removeStartUp() # removing Persepolis from system's startup # keep_awake_checkBox if self.keep_awake_checkBox.isChecked(): self.persepolis_setting.setValue('awake', 'yes') self.parent.keep_awake_checkBox.setChecked(True) else: self.persepolis_setting.setValue('awake', 'no') self.parent.keep_awake_checkBox.setChecked(False) # check_clipboard_checkBox if self.check_clipboard_checkBox.isChecked(): self.persepolis_setting.setValue('check-clipboard', 'yes') else: self.persepolis_setting.setValue('check-clipboard', 'no') # this section creates download folder and # download sub folders if they did not existed. download_path = self.persepolis_setting.value('download_path') folder_list = [download_path] if self.subfolder_checkBox.isChecked(): self.persepolis_setting.setValue('subfolder', 'yes') for folder in ['Audios', 'Videos', 'Others', 'Documents', 'Compressed']: folder_list.append(os.path.join(download_path, folder)) else: self.persepolis_setting.setValue('subfolder', 'no') for folder in folder_list: osCommands.makeDirs(folder) if self.enable_notifications_checkBox.isChecked(): self.persepolis_setting.setValue('sound', 'yes') else: self.persepolis_setting.setValue('sound', 'no') # columns_tab if self.column0_checkBox.isChecked(): self.persepolis_setting.setValue('column0', 'yes') self.parent.download_table.setColumnHidden(0, False) if self.parent.download_table.isColumnHidden(0): self.parent.download_table.setColumnWidth(0, 100) else: self.persepolis_setting.setValue('column0', 'no') self.parent.download_table.setColumnHidden(0, True) if self.column1_checkBox.isChecked(): self.persepolis_setting.setValue('column1', 'yes') self.parent.download_table.setColumnHidden(1, False) if self.parent.download_table.isColumnHidden(1): self.parent.download_table.setColumnWidth(1, 100) else: self.persepolis_setting.setValue('column1', 'no') self.parent.download_table.setColumnHidden(1, True) if self.column2_checkBox.isChecked(): self.persepolis_setting.setValue('column2', 'yes') self.parent.download_table.setColumnHidden(2, False) if self.parent.download_table.isColumnHidden(2): self.parent.download_table.setColumnWidth(2, 100) else: self.persepolis_setting.setValue('column2', 'no') self.parent.download_table.setColumnHidden(2, True) if self.column3_checkBox.isChecked(): self.persepolis_setting.setValue('column3', 'yes') self.parent.download_table.setColumnHidden(3, False) if self.parent.download_table.isColumnHidden(3): self.parent.download_table.setColumnWidth(3, 100) else: self.persepolis_setting.setValue('column3', 'no') self.parent.download_table.setColumnHidden(3, True) if self.column4_checkBox.isChecked(): self.persepolis_setting.setValue('column4', 'yes') self.parent.download_table.setColumnHidden(4, False) if self.parent.download_table.isColumnHidden(4): self.parent.download_table.setColumnWidth(4, 100) else: self.persepolis_setting.setValue('column4', 'no') self.parent.download_table.setColumnHidden(4, True) if self.column5_checkBox.isChecked(): self.persepolis_setting.setValue('column5', 'yes') self.parent.download_table.setColumnHidden(5, False) if self.parent.download_table.isColumnHidden(5): self.parent.download_table.setColumnWidth(5, 100) else: self.persepolis_setting.setValue('column5', 'no') self.parent.download_table.setColumnHidden(5, True) if self.column6_checkBox.isChecked(): self.persepolis_setting.setValue('column6', 'yes') self.parent.download_table.setColumnHidden(6, False) if self.parent.download_table.isColumnHidden(6): self.parent.download_table.setColumnWidth(6, 100) else: self.persepolis_setting.setValue('column6', 'no') self.parent.download_table.setColumnHidden(6, True) if self.column7_checkBox.isChecked(): self.persepolis_setting.setValue('column7', 'yes') self.parent.download_table.setColumnHidden(7, False) if self.parent.download_table.isColumnHidden(7): self.parent.download_table.setColumnWidth(7, 100) else: self.persepolis_setting.setValue('column7', 'no') self.parent.download_table.setColumnHidden(7, True) if self.column10_checkBox.isChecked(): self.persepolis_setting.setValue('column10', 'yes') self.parent.download_table.setColumnHidden(10, False) if self.parent.download_table.isColumnHidden(10): self.parent.download_table.setColumnWidth(10, 100) else: self.persepolis_setting.setValue('column10', 'no') self.parent.download_table.setColumnHidden(10, True) if self.column11_checkBox.isChecked(): self.persepolis_setting.setValue('column11', 'yes') self.parent.download_table.setColumnHidden(11, False) if self.parent.download_table.isColumnHidden(11): self.parent.download_table.setColumnWidth(11, 100) else: self.persepolis_setting.setValue('column11', 'no') self.parent.download_table.setColumnHidden(11, True) if self.column12_checkBox.isChecked(): self.persepolis_setting.setValue('column12', 'yes') self.parent.download_table.setColumnHidden(12, False) if self.parent.download_table.isColumnHidden(12): self.parent.download_table.setColumnWidth(12, 100) else: self.persepolis_setting.setValue('column12', 'no') self.parent.download_table.setColumnHidden(12, True) # shortcuts # set new shortcuts i = 0 for qshortcut in self.qshortcuts_list: # set keys for QShortcut qshortcut.setKey(self.shortcuts_list[i]) i = i + 1 # video_finder self.persepolis_setting.setValue('video_finder/max_links', self.max_links_spinBox.value()) # saving value of persepolis_setting in second_key_value_dict. self.second_key_value_dict = {} for member in self.persepolis_setting.allKeys(): self.second_key_value_dict[member] = str(self.persepolis_setting.value(member)) # comparing first_key_value_dict with second_key_value_dict show_message_box = False for key in self.first_key_value_dict.keys(): if self.first_key_value_dict[key] != self.second_key_value_dict[key]: if key in ['locale', 'aria2_path', 'download_path', 'custom-font', 'rpc-port', 'max-tries', 'retry-wait', 'timeout', 'connections', 'style', 'font', 'font-size', 'color-scheme', 'check-clipboard']: show_message_box = True # if any thing changed that needs restarting, then notify user about "Some changes take effect after restarting persepolis" if show_message_box: restart_messageBox = QMessageBox() restart_messageBox.setText(QCoreApplication.translate( "setting_src_ui_tr", '
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
')) restart_messageBox.setWindowTitle(QCoreApplication.translate("setting_src_ui_tr", 'Restart Persepolis!')) restart_messageBox.exec_() # applying changes self.persepolis_setting.endGroup() self.persepolis_setting.sync() self.close() persepolisdm-persepolis-867ee76/persepolis/scripts/shutdown.py000066400000000000000000000065321464161131600250720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.scripts import logger from persepolis.constants import OS from time import sleep import subprocess import platform os_type = platform.system() def shutDown(parent, gid=None, category=None, password=None): # for queue >> gid = None # for single downloads >> category = None # change value of shutdown in data base if category is not None: dict = {'category': category, 'shutdown': 'wait'} # update data base parent.temp_db.updateQueueTable(dict) else: # so we have single download dict = {'gid': gid, 'shutdown': 'wait'} # update data base parent.temp_db.updateSingleTable(dict) shutdown_status = "wait" while shutdown_status == "wait": sleep(5) # get shutdown status from data_base if category is not None: dict = parent.temp_db.returnCategory(category) else: dict = parent.temp_db.returnGid(gid) shutdown_status = dict['shutdown'] if shutdown_status == "shutdown": logger.sendToLog("Shutting down in 20 seconds", "INFO") sleep(20) if os_type == OS.LINUX: pipe = subprocess.Popen(['sudo', '-S', 'poweroff'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(password.encode()) elif os_type == OS.DARWIN: pipe = subprocess.Popen(['sudo', '-S', 'shutdown', '-h', 'now'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(password.encode()) elif os_type == OS.WINDOWS: CREATE_NO_WINDOW = 0x08000000 subprocess.Popen(['shutdown', '-S'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=CREATE_NO_WINDOW) elif os_type in OS.BSD_FAMILY: pipe = subprocess.Popen(['sudo', '-S', 'shutdown', '-p', 'now'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(password.encode()) persepolisdm-persepolis-867ee76/persepolis/scripts/socks5_to_http_convertor.py000066400000000000000000000114711464161131600302660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . # # aria2c wouldn't support socks5. so persepolis use gost for solving this issue. # gost act as intermediary between socks5 and http. # SocksToHttpConvertor is a class that manage gost in persepolis. from persepolis.scripts.useful_tools import runApplication, findExternalAppPath from persepolis.scripts import logger from socket import socket class Socks5ToHttpConvertor(): def __init__(self, socks5_host, socks5_port, socks5_username, socks5_password, main_window, parent): self.socks5_host = socks5_host self.socks5_port = socks5_port self.socks5_username = socks5_username self.socks5_password = socks5_password self.main_window = main_window self.parent = parent # get random free port on localhost self.http_host = '127.0.0.1' sock = socket() sock.bind(('', 0)) self.http_port = sock.getsockname()[1] self.process = None logger.sendToLog("{} runs http server:\n\t\thttp://127.0.0.1:{}".format(str(self.main_window.type_of_convertor), str(self.http_port))) self.pipe_is_running = False def isRunning(self): # check process is running or not if self.process: if self.process.poll() is None: self.pipe_is_running = True else: self.pipe_is_running = False else: self.pipe_is_running = False # if self.process.ProcessState != QProcess.NotRunning: # self.pipe_is_running = True # else: # self.pipe_is_running = False # else: # self.pipe_is_running = False return self.pipe_is_running def stop(self): # kill process try: self.process.kill() self.process.communicate() self.pipe_is_running = False except: self.pipe_is_running = False def run(self): if not (self.pipe_is_running): # find type of convertor if self.main_window.type_of_convertor: # find convertor path convertor_app_path, log_list = findExternalAppPath(self.main_window.type_of_convertor) # run convertor http_argument = 'http://' + str(self.http_host) + ':' + str(self.http_port) if self.socks5_username: socks5_argument = 'socks5://' + str(self.socks5_username) + ':' + str(self.socks5_password) + '@' + str(self.socks5_host) + ':' + str(self.socks5_port) else: socks5_argument = 'socks5://' + str(self.socks5_host) + ':' + str(self.socks5_port) # gost if self.main_window.type_of_convertor == 'gost': command_argument = [convertor_app_path, '-L', http_argument, '-F', socks5_argument] # pproxy elif self.main_window.type_of_convertor == 'pproxy': command_argument = [convertor_app_path, '-l', http_argument, '-r', socks5_argument] # sthp else: if self.socks5_username: command_argument = [convertor_app_path, '--listen-ip', str(self.http_host), '--port', str(self.http_port), '--socks-address', '{}:{}'.format(self.socks5_host, self.socks5_port), '--username', self.socks5_username, '--password', self.socks5_password] else: command_argument = [convertor_app_path, '--listen-ip', str(self.http_host), '--port', str(self.http_port), '--socks-address', '{}:{}'.format(self.socks5_host, self.socks5_port)] self.pipe_is_running = True self.process = runApplication(command_argument) # self.process = QProcess() # self.process.start(convertor_app_path, command_argument) persepolisdm-persepolis-867ee76/persepolis/scripts/spider.py000066400000000000000000000106751464161131600245100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.scripts.useful_tools import humanReadableSize from requests.cookies import cookiejar_from_dict from http.cookies import SimpleCookie import requests from pathlib import Path from urllib.parse import urlparse, unquote # for more information about "requests" library , please see # http://docs.python-requests.org/en/master/ def getFileNameFromLink(link): return Path(unquote(urlparse(link).path)).name # spider function finds name of file and file size from header def spider(add_link_dictionary): # get user's download request from add_link_dictionary link = add_link_dictionary['link'] ip = add_link_dictionary['ip'] port = add_link_dictionary['port'] proxy_user = add_link_dictionary['proxy_user'] proxy_passwd = add_link_dictionary['proxy_passwd'] download_user = add_link_dictionary['download_user'] download_passwd = add_link_dictionary['download_passwd'] header = add_link_dictionary['header'] out = add_link_dictionary['out'] user_agent = add_link_dictionary['user_agent'] raw_cookies = add_link_dictionary['load_cookies'] referer = add_link_dictionary['referer'] # define a requests session requests_session = requests.Session() if ip: ip_port = 'http://' + str(ip) + ":" + str(port) if proxy_user: ip_port = 'http://' + proxy_user + ':' + proxy_passwd + '@' + ip_port # set proxy to the session requests_session.proxies = {'http': ip_port} if download_user: # set download user pass to the session requests_session.auth = (download_user, download_passwd) # set cookies if raw_cookies: cookie = SimpleCookie() cookie.load(raw_cookies) cookies = {key: morsel.value for key, morsel in cookie.items()} requests_session.cookies = cookiejar_from_dict(cookies) # set referer if referer: requests_session.headers.update({'referer': referer}) # setting referer to the session # set user_agent if user_agent: requests_session.headers.update({'user-agent': user_agent}) # setting user_agent to the session # find headers try: response = requests_session.head(link, timeout=2.50, allow_redirects=True) header = response.headers except: header = {} filename = None file_size = None if 'Content-Disposition' in header.keys(): # checking if filename is available content_disposition = header['Content-Disposition'] if content_disposition.find('filename') != -1: filename_splited = content_disposition.split('filename=') filename_splited = filename_splited[-1] # getting file name in desired format filename = filename_splited.strip(' "\'') if not (filename): filename = getFileNameFromLink(link) # if user set file name before in add_link_dictionary['out'], # then set "out" for filename if out: filename = out # check if file_size is available if 'Content-Length' in header.keys(): file_size = int(header['Content-Length']) # converting file_size to KiB or MiB or GiB file_size = humanReadableSize(file_size) # return results return filename, file_size # this function finds and returns file name for links. def queueSpider(add_link_dictionary): filename = addLinkSpider(add_link_dictionary)[0] return filename def addLinkSpider(add_link_dictionary): # get user's download information from add_link_dictionary for i in ['link', 'ip', 'port', 'proxy_user', 'proxy_passwd', 'download_user', 'download_passwd', 'header', 'out', 'user_agent', 'load_cookies', 'referer']: if not (i in add_link_dictionary): add_link_dictionary[i] = None return spider(add_link_dictionary) persepolisdm-persepolis-867ee76/persepolis/scripts/startup.py000066400000000000000000000133631464161131600247210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . import platform import sys import os from persepolis.constants import OS home_address = os.path.expanduser("~") # finding os_type os_type = platform.system() if os_type == OS.WINDOWS: import winreg # check startup def checkStartUp(): # check if it is linux if os_type in OS.UNIX_LIKE: # check if the startup exists if os.path.exists(home_address + "/.config/autostart/persepolis.desktop"): return True else: return False # check if it is mac elif os_type == OS.OSX: # OS X if os.path.exists(home_address + "/Library/LaunchAgents/com.persepolisdm.plist"): return True else: return False # check if it is Windows elif os_type == OS.WINDOWS: # try to open startup key and check persepolis value try: aKey = winreg.OpenKey( winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, winreg.KEY_ALL_ACCESS) startupvalue = winreg.QueryValueEx(aKey, 'persepolis') startup = True except WindowsError: startup = False # Close the connection winreg.CloseKey(aKey) # if the startup enabled or disabled if startup: return True if not startup: return False # add startup file def addStartUp(parent): # check if it is linux if os_type in OS.UNIX_LIKE: entry = ''' [Desktop Entry] Name=Persepolis Download Manager Name[fa]=پرسپولیس Comment=Download Manager GenericName=Download Manager GenericName[fa]=نرم افزار مدیریت بارگیری Keywords=Internet;WWW;Web; Terminal=false Type=Application Categories=Qt;Network; StartupNotify=true Exec={} --tray Icon=com.github.persepolisdm.persepolis StartupWMClass=persepolis-download-Manager '''.format(parent.exec_dictionary['modified_exec_file_path']) # check if the autostart directory exists & create entry if not os.path.exists(home_address + "/.config/autostart"): os.makedirs(home_address + "/.config/autostart", 0o755) startupfile = open( home_address + "/.config/autostart/persepolis.desktop", 'w+') startupfile.write(entry) os.chmod(home_address + "/.config/autostart/persepolis.desktop", 0o644) # check if it is mac elif os_type == OS.OSX: # OS X cwd = sys.argv[0] cwd = os.path.dirname(cwd) entry = ''' Label com.persepolisdm.persepolis Program {} ProgramArguments --tray RunAtLoad \n '''.format(parent.exec_dictionary['exec_file_path']) startupfile = open( home_address + '/Library/LaunchAgents/com.persepolisdm.plist', 'w+') startupfile.write(entry) os.system('launchctl load ' + home_address + "/Library/LaunchAgents/com.persepolisdm.plist") # check if it is Windows elif os_type == OS.WINDOWS: # Connect to the startup path in Registry key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, winreg.KEY_ALL_ACCESS) # find current persepolis exe path persepolisexetray = '"{}" --tray'.format(parent.exec_dictionary['exec_file_path']) # add persepolis to startup winreg.SetValueEx(key, 'persepolis', 0, winreg.REG_SZ, persepolisexetray) # Close connection winreg.CloseKey(key) # remove startup file def removeStartUp(): # check if it is linux if os_type in OS.UNIX_LIKE: # remove it os.remove(home_address + "/.config/autostart/persepolis.desktop") # check if it is mac OS elif os_type == OS.OSX: # OS X if checkStartUp(): os.system('launchctl unload ' + home_address + "/Library/LaunchAgents/com.persepolisdm.plist") os.remove(home_address + "/Library/LaunchAgents/com.persepolisdm.plist") # check if it is Windows elif os_type == OS.WINDOWS: if checkStartUp(): # Connect to the startup path in Registry key = winreg.OpenKey( winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, winreg.KEY_ALL_ACCESS) # remove persepolis from startup winreg.DeleteValue(key, 'persepolis') # Close connection winreg.CloseKey(key) persepolisdm-persepolis-867ee76/persepolis/scripts/text_queue.py000066400000000000000000000370651464161131600254140ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QDir, QPoint, QSize, QThread, Signal from PySide6.QtWidgets import QTableWidgetItem, QFileDialog from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QDir, QPoint, QSize, QThread from PyQt5.QtWidgets import QTableWidgetItem, QFileDialog from PyQt5.QtCore import pyqtSignal as Signal from PyQt5.QtGui import QIcon from persepolis.gui.text_queue_ui import TextQueue_Ui from persepolis.scripts import logger from persepolis.scripts import spider from functools import partial import os # This thread finds filename class QueueSpiderThread(QThread): QUEUESPIDERRETURNEDFILENAME = Signal(str) def __init__(self, dict_): QThread.__init__(self) self.dict_ = dict_ def run(self): try: filename = spider.queueSpider(self.dict_) if filename: self.QUEUESPIDERRETURNEDFILENAME.emit(filename) else: logger.logObj.error( "Spider couldn't find download information", exc_info=True) except Exception as e: # write error in log logger.logObj.error( "Spider couldn't find download information", exc_info=True) logger.logObj.error( str(e), exc_info=True) class TextQueue(TextQueue_Ui): def __init__(self, parent, file_path, callback, socks5_to_http_convertor_is_installed, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.callback = callback self.file_path = file_path self.parent = parent global icons icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' # read text file lines and put links in list format. f = open(self.file_path) f_links_list = f.readlines() f.close() f_links_list.reverse() # check links! links must be started with http or https or ftp link_list = [] for link in f_links_list: text = link.strip() if ("tp:/" in text[2:6]) or ("tps:/" in text[2:7]): link_list.append(text) k = 1 for link in link_list: self.links_table.insertRow(0) # file_name file_name = '***' dict_ = {'link': link} # spider finds file name new_spider = QueueSpiderThread(dict_) self.parent.threadPool.append(new_spider) self.parent.threadPool[-1].start() self.parent.threadPool[-1].QUEUESPIDERRETURNEDFILENAME.connect( partial(self.parent.queueSpiderCallBack, child=self, row_number=len(link_list) - k)) k = k + 1 item = QTableWidgetItem(file_name) # add checkbox to the item item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setCheckState(Qt.Checked) # insert file_name self.links_table.setItem(0, 0, item) # insert link item = QTableWidgetItem(str(link)) self.links_table.setItem(0, 1, item) # get categories name and add them to add_queue_comboBox categories_list = self.parent.persepolis_db.categoriesList() for queue in categories_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) self.add_queue_comboBox.addItem( QIcon(icons + 'add_queue'), 'Create new queue') # entry initialization # get values from persepolis_setting global connections connections = int( self.persepolis_setting.value('settings/connections')) global download_path download_path = str( self.persepolis_setting.value('settings/download_path')) self.connections_spinBox.setValue(connections) self.download_folder_lineEdit.setText(download_path) self.download_folder_lineEdit.setEnabled(False) # ip_lineEdit initialization settings_ip = self.persepolis_setting.value( 'add_link_initialization/ip', None) if settings_ip: self.ip_lineEdit.setText(str(settings_ip)) # proxy user lineEdit initialization settings_proxy_user = self.persepolis_setting.value( 'add_link_initialization/proxy_user', None) if settings_proxy_user: self.proxy_user_lineEdit.setText(str(settings_proxy_user)) # port_spinBox initialization settings_port = self.persepolis_setting.value( 'add_link_initialization/port', 0) self.port_spinBox.setValue(int(int(settings_port))) # http or socks5 initialization settings_proxy_type = self.persepolis_setting.value( 'add_link_initialization/proxy_type', None) # default is http if not (socks5_to_http_convertor_is_installed): self.socks5_radioButton.setEnabled(False) else: self.socks5_radioButton.setEnabled(True) if settings_proxy_type == 'socks5': self.socks5_radioButton.setChecked(True) elif settings_proxy_type == 'https': self.https_radioButton.setChecked(True) else: self.http_radioButton.setChecked(True) # download UserName initialization settings_download_user = self.persepolis_setting.value( 'add_link_initialization/download_user', None) if settings_download_user: self.download_user_lineEdit.setText(str(settings_download_user)) # connect folder_pushButton self.folder_pushButton.clicked.connect(self.changeFolder) # connect OK and cancel button self.cancel_pushButton.clicked.connect(self.close) self.ok_pushButton.clicked.connect(self.okButtonPressed) # connect select_all_pushButton deselect_all_pushButton self.select_all_pushButton.clicked.connect(self.selectAll) self.deselect_all_pushButton.clicked.connect(self.deselectAll) # frames and checkBoxes self.proxy_frame.setEnabled(False) self.proxy_checkBox.toggled.connect(self.proxyFrame) self.download_frame.setEnabled(False) self.download_checkBox.toggled.connect(self.downloadFrame) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitFrame) # set focus to ok button self.ok_pushButton.setFocus() # add_queue_comboBox event self.add_queue_comboBox.currentIndexChanged.connect(self.queueChanged) # setting window size and position size = self.persepolis_setting.value('TextQueue/size', QSize(700, 500)) position = self.persepolis_setting.value( 'TextQueue/position', QPoint(300, 300)) self.resize(size) self.move(position) # this method checks all check boxes def selectAll(self, button): for i in range(self.links_table.rowCount()): item = self.links_table.item(i, 0) item.setCheckState(Qt.Checked) # this method deselect all check boxes def deselectAll(self, button): for i in range(self.links_table.rowCount()): item = self.links_table.item(i, 0) item.setCheckState(Qt.Unchecked) # this method is called, when user changes add_queue_comboBox def queueChanged(self, combo): if str(self.add_queue_comboBox.currentText()) == 'Create new queue': # if user want to create new queue, then callback # createQueue method from mainwindow(parent) new_queue = self.parent.createQueue(combo) if new_queue: # clear comboBox self.add_queue_comboBox.clear() # load queue list again! queues_list = self.parent.persepolis_db.categoriesList() for queue in queues_list: if queue != 'All Downloads': self.add_queue_comboBox.addItem(queue) self.add_queue_comboBox.addItem( QIcon(icons + 'add_queue'), 'Create new queue') # finding index of new_queue and setting comboBox for it index = self.add_queue_comboBox.findText(str(new_queue)) self.add_queue_comboBox.setCurrentIndex(index) else: self.add_queue_comboBox.setCurrentIndex(0) # activate frames if checkBoxes checked def proxyFrame(self, checkBox): if self.proxy_checkBox.isChecked(): self.proxy_frame.setEnabled(True) else: self.proxy_frame.setEnabled(False) def downloadFrame(self, checkBox): if self.download_checkBox.isChecked(): self.download_frame.setEnabled(True) else: self.download_frame.setEnabled(False) def limitFrame(self, checkBox): if self.limit_checkBox.isChecked(): self.limit_frame.setEnabled(True) else: self.limit_frame.setEnabled(False) def changeFolder(self, button): fname = QFileDialog.getExistingDirectory( self, 'Select a directory', download_path) if fname: # Returns pathName with the '/' separators converted to # separators that are appropriate for the underlying # operating system. # On Windows, toNativeSeparators("c:/winnt/system32") returns # "c:\winnt\system32". fname = QDir.toNativeSeparators(fname) if os.path.isdir(fname): self.download_folder_lineEdit.setText(fname) def okButtonPressed(self, button): # write user's input data to init file self.persepolis_setting.setValue( 'add_link_initialization/ip', self.ip_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/port', self.port_spinBox.value()) self.persepolis_setting.setValue( 'add_link_initialization/proxy_user', self.proxy_user_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/download_user', self.download_user_lineEdit.text()) # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: proxy_type = 'http' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'http') elif self.https_radioButton.isChecked() is True: proxy_type = 'https' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'https') else: proxy_type = 'socks5' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'socks5') # Check 'Remember path' and change default path if needed if self.folder_checkBox.isChecked() is True: self.persepolis_setting.setValue( 'settings/download_path', self.download_folder_lineEdit.text()) if not (self.proxy_checkBox.isChecked()): ip = None port = None proxy_user = None proxy_passwd = None proxy_type = None else: ip = self.ip_lineEdit.text() if not (ip): ip = None port = self.port_spinBox.value() if not (port): port = None proxy_user = self.proxy_user_lineEdit.text() if not (proxy_user): proxy_user = None proxy_passwd = self.proxy_pass_lineEdit.text() if not (proxy_passwd): proxy_passwd = None if not (self.download_checkBox.isChecked()): download_user = None download_passwd = None else: download_user = self.download_user_lineEdit.text() if not (download_user): download_user = None download_passwd = self.download_pass_lineEdit.text() if not (download_passwd): download_passwd = None if not (self.limit_checkBox.isChecked()): limit = 0 else: if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") category = str(self.add_queue_comboBox.currentText()) connections = self.connections_spinBox.value() download_path = self.download_folder_lineEdit.text() dict_ = {'out': None, 'start_time': None, 'end_time': None, 'link': None, 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'download_user': download_user, 'download_passwd': download_passwd, 'proxy_type': proxy_type, 'connections': connections, 'limit_value': limit, 'download_path': download_path, 'referer': None, 'load_cookies': None, 'user_agent': None, 'header': None, 'after_download': None } # find checked links in links_table self.add_link_dictionary_list = [] i = 0 for row in range(self.links_table.rowCount()): item = self.links_table.item(row, 0) # if item is checked if (item.checkState() == Qt.Checked): # Create a copy from dict_ and add it # to add_link_dictionary_list self.add_link_dictionary_list.append( dict_.copy()) # get link and add it to dict_ link = self.links_table.item(row, 1).text() self.add_link_dictionary_list[i]['link'] = str(link) # add file name to the dict_ self.add_link_dictionary_list[i]['out'] = self.links_table.item( row, 0).text() i = i + 1 # reverse list self.add_link_dictionary_list.reverse() # Create callback for mainwindow self.callback(self.add_link_dictionary_list, category) # close window self.close() # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): self.persepolis_setting.setValue('TextQueue/size', self.size()) self.persepolis_setting.setValue('TextQueue/position', self.pos()) self.persepolis_setting.sync() event.accept() def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) persepolisdm-persepolis-867ee76/persepolis/scripts/useful_tools.py000066400000000000000000000463171464161131600257470ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from persepolis.constants.Os import OS import urllib.parse import subprocess import platform import textwrap import sys import os try: from PySide6.QtCore import QThread, Signal, QProcess except: from PyQt5.QtCore import QThread, QProcess from PyQt5.QtCore import pyqtSignal as Signal try: from persepolis.scripts import logger logger_availability = True except: logger_availability = False # find operating system # os_type >> Linux or Darwin(Mac osx) or Windows(Microsoft Windows) or # FreeBSD or OpenBSD os_type = platform.system() # user home address home_address = os.path.expanduser("~") # runApplication in a thread. class RunApplicationThread(QThread): RUNAPPCALLBACKSIGNAL = Signal(list) def __init__(self, command_argument, call_back=False): QThread.__init__(self) self.command_argument = command_argument self.call_back = call_back def run(self): pipe = runApplication(self.command_argument) if self.call_back: self.RUNAPPCALLBACKSIGNAL.emit([pipe]) # determine the config folder path based on the operating system def determineConfigFolder(): if os_type in OS.UNIX_LIKE: config_folder = os.path.join( home_address, ".config/persepolis_download_manager") elif os_type == OS.OSX: config_folder = os.path.join( home_address, "Library/Application Support/persepolis_download_manager") elif os_type == OS.WINDOWS: config_folder = os.path.join( home_address, 'AppData', 'Local', 'persepolis_download_manager') return config_folder # this function returns operating system and desktop environment(for linux and bsd). def osAndDesktopEnvironment(): desktop_env = None if os_type in OS.UNIX_LIKE: # find desktop environment('KDE', 'GNOME', ...) desktop_env = os.environ.get('XDG_CURRENT_DESKTOP') return os_type, desktop_env # this function converts file_size to KiB or MiB or GiB def humanReadableSize(size, input_type='file_size'): labels = ['KiB', 'MiB', 'GiB', 'TiB'] i = -1 if size < 1024: return str(size) + ' B' while size >= 1024: i += 1 size = size / 1024 if input_type == 'speed': j = 0 else: j = 1 if i > j: return str(round(size, 2)) + ' ' + labels[i] else: return str(round(size, None)) + ' ' + labels[i] # this function converts human readable size to byte def convertToByte(file_size): # if unit is not in Byte if file_size[-2:] != ' B': unit = file_size[-3:] # persepolis uses float type for GiB and TiB if unit == 'GiB' or unit == 'TiB': size_value = float(file_size[:-4]) else: size_value = int(float(file_size[:-4])) else: unit = None size_value = int(float(file_size[:-3])) # covert them in byte if not (unit): in_byte_value = size_value elif unit == 'KiB': in_byte_value = size_value * 1024 elif unit == 'MiB': in_byte_value = size_value * 1024 * 1024 elif unit == 'GiB': in_byte_value = size_value * 1024 * 1024 * 1024 elif unit == 'TiB': in_byte_value = size_value * 1024 * 1024 * 1024 * 1024 return int(in_byte_value) # this function checks free space in hard disk. def freeSpace(dir): try: import psutil except: if logger_availability: logger.sendToLog("psutil in not installed!", "ERROR") return None try: dir_space = psutil.disk_usage(dir) free_space = dir_space.free return int(free_space) except Exception as e: # log in to the log file if logger_availability: logger.sendToLog("persepolis couldn't find free space value:\n" + str(e), "ERROR") return None def returnDefaultSettings(): os_type, desktop_env = osAndDesktopEnvironment() # user download folder path download_path = os.path.join(home_address, 'Downloads', 'Persepolis') # set dark fusion for default style settings. style = 'Fusion' color_scheme = 'Dark Fusion' icons = 'Breeze-Dark' style = 'Fusion' # keyboard shortcuts delete_shortcut = "Ctrl+D" remove_shortcut = "Ctrl+R" add_new_download_shortcut = "Ctrl+N" import_text_shortcut = "Ctrl+O" video_finder_shortcut = "Ctrl+V" quit_shortcut = "Ctrl+Q" hide_window_shortcut = "Ctrl+W" move_up_selection_shortcut = "Ctrl+Up" move_down_selection_shortcut = "Ctrl+Down" # Persepolis default setting default_setting_dict = {'locale': 'en_US', 'toolbar_icon_size': 32, 'wait-queue': [0, 0], 'awake': 'no', 'custom-font': 'no', 'column0': 'yes', 'column1': 'yes', 'column2': 'yes', 'column3': 'yes', 'column4': 'yes', 'column5': 'yes', 'column6': 'yes', 'column7': 'yes', 'column10': 'yes', 'column11': 'yes', 'column12': 'yes', 'subfolder': 'yes', 'startup': 'no', 'show-progress': 'yes', 'show-menubar': 'no', 'show-sidepanel': 'yes', 'rpc-port': 6801, 'notification': 'Native notification', 'after-dialog': 'yes', 'tray-icon': 'yes', 'browser-persepolis': 'yes', 'hide-window': 'yes', 'max-tries': 5, 'retry-wait': 0, 'timeout': 60, 'connections': 16, 'download_path': download_path, 'sound': 'yes', 'sound-volume': 100, 'style': style, 'color-scheme': color_scheme, 'icons': icons, 'font': 'Ubuntu', 'font-size': 9, 'aria2_path': '', 'video_finder/max_links': '3', 'shortcuts/delete_shortcut': delete_shortcut, 'shortcuts/remove_shortcut': remove_shortcut, 'shortcuts/add_new_download_shortcut': add_new_download_shortcut, 'shortcuts/import_text_shortcut': import_text_shortcut, 'shortcuts/video_finder_shortcut': video_finder_shortcut, 'shortcuts/quit_shortcut': quit_shortcut, 'shortcuts/hide_window_shortcut': hide_window_shortcut, 'shortcuts/move_up_selection_shortcut': move_up_selection_shortcut, 'shortcuts/move_down_selection_shortcut': move_down_selection_shortcut, 'dont-check-certificate': 'no', 'remote-time': 'no'} return default_setting_dict # mix video and audio that downloads by video finder def muxer(parent, video_finder_dictionary): result_dictionary = {'error': 'no_error', 'ffmpeg_error_message': None, 'final_path': None, 'final_size': None} # find file path video_file_dictionary = parent.persepolis_db.searchGidInAddLinkTable(video_finder_dictionary['video_gid']) audio_file_dictionary = parent.persepolis_db.searchGidInAddLinkTable(video_finder_dictionary['audio_gid']) # find inputs and output file path for ffmpeg video_file_path = video_file_dictionary['download_path'] audio_file_path = audio_file_dictionary['download_path'] final_path = video_finder_dictionary['download_path'] # calculate final file's size video_file_size = parent.persepolis_db.searchGidInDownloadTable(video_finder_dictionary['video_gid'])['size'] audio_file_size = parent.persepolis_db.searchGidInDownloadTable(video_finder_dictionary['audio_gid'])['size'] # convert size to byte video_file_size = convertToByte(video_file_size) audio_file_size = convertToByte(audio_file_size) final_file_size = video_file_size + audio_file_size # check free space free_space = freeSpace(final_path) if free_space: if final_file_size > free_space: result_dictionary['error'] = 'not enough free space' else: # find final file's name final_file_name = urllib.parse.unquote(os.path.basename(video_file_path)) # if video's extension is 'mp4' then the final output file's extension is 'mp4' # if video's extension is 'webm' then the final output file's extension is 'mkv' file_name_split = final_file_name.split('.') video_extension = file_name_split[-1] if video_extension == 'webm': extension_length = len(file_name_split[-1]) + 1 final_file_name = final_file_name[0:-extension_length] + '.mkv' if parent.persepolis_setting.value('settings/download_path') == final_path: if parent.persepolis_setting.value('settings/subfolder') == 'yes': final_path = os.path.join(final_path, 'Videos') # rename file if file already existed i = 1 final_path_plus_name = os.path.join(final_path, final_file_name) while os.path.isfile(final_path_plus_name): extension_length = len(file_name_split[-1]) + 1 new_name = final_file_name[0:-extension_length] + \ '_' + str(i) + final_file_name[-extension_length:] final_path_plus_name = os.path.join(final_path, new_name) i = i + 1 # start muxing # find ffmpeg path ffmpeg_command, log_list = findExternalAppPath('ffmpeg') # run ffmpeg command_argument = ['ffmpeg', '-i', video_file_path, '-i', audio_file_path, '-c', 'copy', '-shortest', '-map', '0:v:0', '-map', '1:a:0', '-loglevel', 'error', '-strict', '-2', final_path_plus_name] pipe = runApplication(command_argument) if pipe.wait() == 0: # muxing was finished successfully. result_dictionary['error'] = 'no error' result_dictionary['final_path'] = final_path_plus_name result_dictionary['final_size'] = humanReadableSize(final_file_size) else: result_dictionary['error'] = 'ffmpeg error' out, ffmpeg_error_message = pipe.communicate() result_dictionary['ffmpeg_error_message'] = ffmpeg_error_message.decode('utf-8', 'ignore') return result_dictionary # return version of gost def socks5ToHttpConvertorVersion(): type_of_convertor = None # persepolis use gost, pproxy, sthp for converting socks5 to http # try to find sthp sthp_command, log_list = findExternalAppPath('sthp') command_argument = [sthp_command, '--version'] try: pipe = runApplication(command_argument) if pipe.wait() == 0: socks5_to_http_convertor_is_installed = True type_of_convertor = 'sthp' sthp_output, error = pipe.communicate() sthp_output = sthp_output.decode('utf-8') else: socks5_to_http_convertor_is_installed = False except: socks5_to_http_convertor_is_installed = False if socks5_to_http_convertor_is_installed: return socks5_to_http_convertor_is_installed, sthp_output, log_list, type_of_convertor else: # find gost path gost_command, log_list = findExternalAppPath('gost') # Try to test gost command_argument = [gost_command, '-V'] try: pipe = runApplication(command_argument) if pipe.wait() == 0: socks5_to_http_convertor_is_installed = True type_of_convertor = 'gost' gost_output, error = pipe.communicate() gost_output = gost_output.decode('utf-8') else: socks5_to_http_convertor_is_installed = False except: socks5_to_http_convertor_is_installed = False if socks5_to_http_convertor_is_installed: return socks5_to_http_convertor_is_installed, gost_output, log_list, type_of_convertor else: # try to find pproxy pproxy_command, log_list = findExternalAppPath('pproxy') command_argument = [pproxy_command, '--version'] try: pipe = runApplication(command_argument) if pipe.wait() == 0: socks5_to_http_convertor_is_installed = True type_of_convertor = 'pproxy' pproxy_output, error = pipe.communicate() pproxy_output = pproxy_output.decode('utf-8') else: socks5_to_http_convertor_is_installed = False pproxy_output = 'No socks to http convertor found.' except: socks5_to_http_convertor_is_installed = False pproxy_output = 'No socks to http convertor found.' return socks5_to_http_convertor_is_installed, pproxy_output, log_list, type_of_convertor # return version of ffmpeg def ffmpegVersion(): # find ffmpeg path ffmpeg_command, log_list = findExternalAppPath('ffmpeg') # Try to test ffmpeg command_argument = [ffmpeg_command, '-version'] try: pipe = runApplication(command_argument) if pipe.wait() == 0: ffmpeg_is_installed = True ffmpeg_output, error = pipe.communicate() ffmpeg_output = ffmpeg_output.decode('utf-8') else: ffmpeg_is_installed = False ffmpeg_output = 'ffmpeg is not installed' except: ffmpeg_is_installed = False ffmpeg_output = 'ffmpeg is not installed' # wrap ffmpeg_output with width=70 wrapper = textwrap.TextWrapper() ffmpeg_output = wrapper.fill(ffmpeg_output) ffmpeg_output = '\n**********\n'\ + str(ffmpeg_output)\ + '\n**********\n' return ffmpeg_is_installed, ffmpeg_output, log_list # run apllication with qprocess def qRunApplication(command: str, command_argument: list, parent=None): process = QProcess(parent=parent) process.start(command, command_argument) return process # run an application def runApplication(command_argument): if os_type == OS.WINDOWS: # NO_WINDOW option avoids opening additional CMD in MS Windows. NO_WINDOW = 0x08000000 pipe = subprocess.Popen(command_argument, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=False, creationflags=NO_WINDOW) else: pipe = subprocess.Popen( command_argument, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) return pipe # find exeternal application execution path def findExternalAppPath(app_name): # get Persepolis type information first. persepolis_path_infromation = getExecPath() is_bundle = persepolis_path_infromation['bundle'] is_test = persepolis_path_infromation['test'] if os_type == OS.WINDOWS: app_name = app_name + '.exe' # If Persepolis run as a bundle. if is_bundle: # alongside of the bundle path cwd = sys.argv[0] current_directory = os.path.dirname(cwd) app_alongside = os.path.join(current_directory, app_name) # inside of the bundle path. base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) app_inside = os.path.join(base_path, app_name) if os_type in OS.UNIX_LIKE: # Check outside of the bundle first. if os.path.exists(app_alongside): app_command = app_alongside log_list = ["{}'s file is detected alongside of bundle.".format(app_name), "INFO"] # Check inside of the bundle. elif os.path.exists(app_inside): app_command = app_inside log_list = ["{}'s file is detected inside of bundle.".format(app_name), "INFO"] else: # use app that installed on user's system app_command = app_name log_list = ["Persepolis will use {} that installed on user's system.".format(app_name), "INFO"] else: # for Mac OSX and MicroSoft Windows app_command = app_alongside log_list = ["{}'s file is detected alongside of bundle.".format(app_name), "INFO"] # I Persepolis run from test directory. if is_test: # Check inside of test directory. cwd = sys.argv[0] current_directory = os.path.dirname(cwd) app_alongside = os.path.join(current_directory, app_name) if os.path.exists(app_alongside): app_command = app_alongside log_list = ["{}'s file is detected inside of test directory.".format(app_name), "INFO"] else: # use app that installed on user's system app_command = app_name log_list = ["Persepolis will use {} that installed on user's system.".format(app_name), "INFO"] if not (is_bundle) and not (is_test): app_command = app_name log_list = ["Persepolis will use {} that installed on user's system.".format(app_name), "INFO"] return app_command, log_list # This function returns persepolis's execution path. def getExecPath(): exec_dictionary = {'bundle': None, 'test': False, 'exec_file_path': None, 'modified_exec_file_path': None} # check if persepolis is run as a bundle. if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): exec_dictionary['bundle'] = True # get executable path bundle_path = os.path.dirname(sys.executable) # get bundle name bundle_name = os.path.basename(sys.executable) exec_file_path = os.path.join(bundle_path, bundle_name) else: # persepolis is run from python script exec_dictionary['bundle'] = False # get execution path script_path = os.path.dirname(os.path.abspath(sys.modules['__main__'].__file__)) script_name = os.path.basename(sys.argv[0]) if script_name == 'test.py': # persepolis is run from test directory exec_dictionary['test'] = True exec_file_path = os.path.join(script_path, script_name) # replace space with \+space for UNIX_LIKE and OSX if os_type in OS.UNIX_LIKE or os_type == OS.OSX: modified_exec_file_path = exec_file_path.replace(" ", r"\ ") elif os_type == OS.WINDOWS: modified_exec_file_path = exec_file_path.replace('\\', r'\\') # write it in dictionary exec_dictionary['exec_file_path'] = exec_file_path exec_dictionary['modified_exec_file_path'] = modified_exec_file_path # return ressults return exec_dictionary persepolisdm-persepolis-867ee76/persepolis/scripts/video_finder_addlink.py000066400000000000000000001076351464161131600273500ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ 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 . """ try: from PySide6.QtWidgets import QCheckBox, QPushButton, QTextEdit, QFrame, QLabel, QComboBox, QHBoxLayout, QApplication from PySide6.QtCore import QThread, Signal, QCoreApplication, QTranslator, QLocale except: from PyQt5.QtWidgets import QCheckBox, QPushButton, QTextEdit, QFrame, QLabel, QComboBox, QHBoxLayout, QApplication from PyQt5.QtCore import QThread, QCoreApplication, QTranslator, QLocale from PyQt5.QtCore import pyqtSignal as Signal from persepolis.scripts.useful_tools import determineConfigFolder from persepolis.scripts.addlink import AddLinkWindow from persepolis.scripts import logger, osCommands from persepolis.scripts.spider import spider from time import time from functools import partial from random import random from copy import deepcopy import yt_dlp as youtube_dl import re import os # write youtube_dl version in log logger.sendToLog('yt-dlp version: ' + str(youtube_dl.version.__version__), 'INFO') # download manager config folder . config_folder = determineConfigFolder() # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') class MediaListFetcherThread(QThread): RESULT = Signal(dict) cookies = '# HTTP cookie file.\n' # We shall write it in a file when thread starts. def __init__(self, receiver_slot, video_dict, parent): super().__init__() self.RESULT.connect(receiver_slot) self.video_dict = video_dict self.cookie_path = os.path.join(persepolis_tmp, '.{}{}'.format(time(), random())) # youtube options must be added to youtube_dl_options_dict in dictionary format self.youtube_dl_options_dict = {'dump_single_json': True, 'quiet': True, 'noplaylist': True, 'no_warnings': True } # cookies self.youtube_dl_options_dict['cookies'] = str(self.cookie_path) # referer if 'referer' in video_dict.keys() and video_dict['referer']: self.youtube_dl_options_dict['referer'] = str(video_dict['referer']) # user_agent if 'user_agent' in video_dict.keys() and video_dict['user_agent']: self.youtube_dl_options_dict['user-agent'] = str(video_dict['user_agent']) # load_cookies if 'load_cookies' in video_dict.keys() and video_dict['load_cookies']: # We need to convert raw cookies to http cookie file to use with youtube-dl. self.cookies = self.makeHttpCookie(video_dict['load_cookies']) # Proxy if video_dict['ip']: # ip + port ip_port = '{}:{}'.format(video_dict['ip'], str(video_dict['port'])) if video_dict['proxy_user']: proxy_argument = '{}://{}:{}@{}'.format(video_dict['proxy_type'], video_dict['proxy_user'], video_dict['proxy_passwd'], ip_port) else: proxy_argument = '{}://{}'.format(video_dict['proxy_type'], ip_port) self.youtube_dl_options_dict['proxy'] = str(proxy_argument) if video_dict['download_user']: self.youtube_dl_options_dict['username'] = str(video_dict['download_user']) self.youtube_dl_options_dict['password'] = str(video_dict['download_passwd']) if video_dict['link']: self.youtube_link = str(video_dict['link']) def run(self): ret_val = {} try: # Create cookie file cookie_file = open(self.cookie_path, 'w') cookie_file.write(self.cookies) cookie_file.close() ydl = youtube_dl.YoutubeDL(self.youtube_dl_options_dict) with ydl: result = ydl.extract_info( self.youtube_link, download=False ) error = "error" # Or comment out this line to show full stderr. if result: ret_val = result else: ret_val = {'error': str(error)} except Exception as ex: ret_val = {'error': str(ex)} finally: # Delete cookie file try: osCommands.remove(self.cookie_path) except Exception as ex: logger.sendToLog(ex, "ERROR") self.RESULT.emit(ret_val) def makeHttpCookie(self, raw_cookie, host_name='.youtube.com'): cookies = '# HTTP cookie file.\n' if raw_cookie: try: raw_cookies = re.split(';\\s*', str(raw_cookie)) # Format all cookie values as netscape cookie. for c in raw_cookies: key, val = c.split('=', 1) cookies = cookies + '{}\tTRUE\t/\tFALSE\t{}\t{}\t{}\n'. \ format(host_name, int(time()) + 259200, key, val) # Expires after 3 days. except: pass return cookies class FileSizeFetcherThread(QThread): FOUND = Signal(dict) def __init__(self, dictionary, thread_key): super().__init__() self.dictionary = dictionary self.key = thread_key def run(self): spider_file_size = spider(self.dictionary)[1] self.FOUND.emit({'thread_key': self.key, 'file_size': spider_file_size}) class VideoFinderAddLink(AddLinkWindow): running_thread = None threadPool = {} def __init__(self, parent, receiver_slot, socks5_to_http_convertor_is_installed, settings, video_dict={}): super().__init__(parent, receiver_slot, settings, socks5_to_http_convertor_is_installed, video_dict) self.setWindowTitle(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Video Finder')) self.size_label.hide() # empty lists for no_audio and no_video and video_audio files self.no_audio_list = [] self.no_video_list = [] self.video_audio_list = [] self.media_title = '' # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # extension_label self.extension_label = QLabel(self.link_frame) self.change_name_horizontalLayout.addWidget(self.extension_label) # Fetch Button self.url_submit_pushButtontton = QPushButton(self.link_frame) self.link_horizontalLayout.addWidget(self.url_submit_pushButtontton) # Status Box self.status_box_textEdit = QTextEdit(self.link_frame) self.status_box_textEdit.setMaximumHeight(150) self.link_verticalLayout.addWidget(self.status_box_textEdit) # Select format horizontal layout select_format_horizontalLayout = QHBoxLayout() # Selection Label self.select_format_label = QLabel(self.link_frame) select_format_horizontalLayout.addWidget(self.select_format_label) # Selection combobox self.media_comboBox = QComboBox(self.link_frame) self.media_comboBox.setMinimumWidth(200) select_format_horizontalLayout.addWidget(self.media_comboBox) # Duration label self.duration_label = QLabel(self.link_frame) select_format_horizontalLayout.addWidget(self.duration_label) self.format_selection_frame = QFrame(self) self.format_selection_frame.setLayout(select_format_horizontalLayout) self.link_verticalLayout.addWidget(self.format_selection_frame) # advanced_format_selection_checkBox self.advanced_format_selection_checkBox = QCheckBox(self) self.link_verticalLayout.addWidget(self.advanced_format_selection_checkBox) # advanced_format_selection_frame self.advanced_format_selection_frame = QFrame(self) self.link_verticalLayout.addWidget(self.advanced_format_selection_frame) advanced_format_selection_horizontalLayout = QHBoxLayout(self.advanced_format_selection_frame) # video_format_selection self.video_format_selection_label = QLabel(self.advanced_format_selection_frame) self.video_format_selection_comboBox = QComboBox(self.advanced_format_selection_frame) # audio_format_selection self.audio_format_selection_label = QLabel(self.advanced_format_selection_frame) self.audio_format_selection_comboBox = QComboBox(self.advanced_format_selection_frame) for widget in [self.video_format_selection_label, self.video_format_selection_comboBox, self.audio_format_selection_label, self.audio_format_selection_comboBox]: advanced_format_selection_horizontalLayout.addWidget(widget) # Set Texts self.url_submit_pushButtontton.setText(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Fetch Media List')) self.select_format_label.setText(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Select a format')) self.video_format_selection_label.setText(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Video format:')) self.audio_format_selection_label.setText(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Audio format:')) self.advanced_format_selection_checkBox.setText( QCoreApplication.translate("ytaddlink_src_ui_tr", 'Advanced options')) # Add Slot Connections self.url_submit_pushButtontton.setEnabled(False) self.change_name_lineEdit.setEnabled(False) self.ok_pushButton.setEnabled(False) self.download_later_pushButton.setEnabled(False) self.format_selection_frame.setEnabled(True) self.advanced_format_selection_frame.setEnabled(False) self.advanced_format_selection_checkBox.toggled.connect(self.advancedFormatFrame) self.url_submit_pushButtontton.clicked.connect(self.submitClicked) self.media_comboBox.activated.connect( partial(self.mediaSelectionChanged, 'video_audio')) self.video_format_selection_comboBox.activated.connect( partial(self.mediaSelectionChanged, 'video')) self.audio_format_selection_comboBox.activated.connect( partial(self.mediaSelectionChanged, 'audio')) self.link_lineEdit.textChanged.disconnect(super().linkLineChanged) # Should be disconnected. self.link_lineEdit.textChanged.connect(self.linkLineChangedHere) self.setMinimumSize(650, 480) self.status_box_textEdit.hide() self.format_selection_frame.hide() self.advanced_format_selection_frame.hide() self.advanced_format_selection_checkBox.hide() if 'link' in video_dict.keys() and video_dict['link']: self.link_lineEdit.setText(video_dict['link']) self.url_submit_pushButtontton.setEnabled(True) else: # check clipboard clipboard = QApplication.clipboard() text = clipboard.text() if (("tp:/" in text[2:6]) or ("tps:/" in text[2:7])): self.link_lineEdit.setText(str(text)) self.url_submit_pushButtontton.setEnabled(True) def advancedFormatFrame(self, button): if self.advanced_format_selection_checkBox.isChecked(): self.advanced_format_selection_frame.setEnabled(True) self.format_selection_frame.setEnabled(False) self.mediaSelectionChanged('video', int(self.video_format_selection_comboBox.currentIndex())) else: self.advanced_format_selection_frame.setEnabled(False) self.format_selection_frame.setEnabled(True) self.mediaSelectionChanged('video_audio', int(self.media_comboBox.currentIndex())) def getReadableSize(self, size): try: return '{:1.2f} MB'.format(int(size) / 1048576) except: return str(size) def getReadableDuration(self, seconds): try: seconds = int(seconds) hours = seconds // 3600 seconds = seconds % 3600 minutes = seconds // 60 seconds = seconds % 60 return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds) except: return str(seconds) # Define native slots def urlChanged(self, value): if ' ' in value or value == '': self.url_submit_pushButtontton.setEnabled(False) self.url_submit_pushButtontton.setToolTip(QCoreApplication.translate( "ytaddlink_src_ui_tr", 'Please enter a valid video link')) else: self.url_submit_pushButtontton.setEnabled(True) self.url_submit_pushButtontton.setToolTip('') def submitClicked(self, button=None): # Clear media list self.media_comboBox.clear() self.format_selection_frame.hide() self.advanced_format_selection_checkBox.hide() self.advanced_format_selection_frame.hide() self.video_format_selection_comboBox.clear() self.audio_format_selection_comboBox.clear() self.change_name_lineEdit.clear() self.threadPool.clear() self.change_name_checkBox.setChecked(False) self.video_audio_list.clear() self.no_video_list.clear() self.no_audio_list.clear() self.url_submit_pushButtontton.setEnabled(False) self.status_box_textEdit.setText(QCoreApplication.translate("ytaddlink_src_ui_tr", 'Fetching Media Info...')) self.status_box_textEdit.show() self.ok_pushButton.setEnabled(False) self.download_later_pushButton.setEnabled(False) dictionary_to_send = deepcopy(self.plugin_add_link_dictionary) # More options more_options = self.collectMoreOptions() for k in more_options.keys(): dictionary_to_send[k] = more_options[k] dictionary_to_send['link'] = self.link_lineEdit.text() dictionary_to_send['socket-timeout'] = '5' fetcher_thread = MediaListFetcherThread(self.fetchedResult, dictionary_to_send, self) self.parent.threadPool.append(fetcher_thread) self.parent.threadPool[-1].start() def fileNameChanged(self, value): if value.strip() == '': self.ok_pushButton.setEnabled(False) def mediaSelectionChanged(self, combobox, index): try: if combobox == 'video_audio': if self.media_comboBox.currentText() == 'Best quality': self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_audio_list[-1]['ext']) else: self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.video_audio_list[index]['ext']) self.change_name_checkBox.setChecked(True) elif combobox == 'video': if self.video_format_selection_comboBox.currentText() != 'No video': self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_audio_list[index - 1]['ext']) self.change_name_checkBox.setChecked(True) else: if self.audio_format_selection_comboBox.currentText() != 'No audio': self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_video_list[int(self.audio_format_selection_comboBox.currentIndex()) - 1]['ext']) self.change_name_checkBox.setChecked(True) else: self.change_name_lineEdit.setChecked(False) elif combobox == 'audio': if self.audio_format_selection_comboBox.currentText() != 'No audio' and self.video_format_selection_comboBox.currentText() == 'No video': self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_video_list[index - 1]['ext']) self.change_name_checkBox.setChecked(True) elif (self.audio_format_selection_comboBox.currentText() == 'No audio' and self.video_format_selection_comboBox.currentText() != 'No video') or (self.audio_format_selection_comboBox.currentText() != 'No audio' and self.video_format_selection_comboBox.currentText() != 'No video'): self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_audio_list[int(self.video_format_selection_comboBox.currentIndex()) - 1]['ext']) self.change_name_checkBox.setChecked(True) elif self.audio_format_selection_comboBox.currentText() == 'No audio' and self.video_format_selection_comboBox.currentText() == 'No video': self.change_name_checkBox.setChecked(False) except Exception as ex: logger.sendToLog(ex, "ERROR") def fetchedResult(self, media_dict): self.url_submit_pushButtontton.setEnabled(True) if 'error' in media_dict.keys(): self.status_box_textEdit.setText('' + str(media_dict['error']) + '') self.status_box_textEdit.show() else: # Show the media list # add no audio and no video options to the comboboxes self.video_format_selection_comboBox.addItem('No video') self.audio_format_selection_comboBox.addItem('No audio') self.media_title = media_dict['title'] if 'formats' not in media_dict.keys() and 'entries' in media_dict.keys(): formats = media_dict['entries'] formats = formats[0] media_dict['formats'] = formats['formats'] elif 'formats' not in media_dict.keys() and 'format' in media_dict.keys(): media_dict['formats'] = [media_dict.copy()] try: i = 0 for f in media_dict['formats']: no_audio = False no_video = False text = '' if 'acodec' in f.keys(): # only video, no audio if f['acodec'] == 'none': no_audio = True # resolution if 'height' in f.keys(): text = text + ' ' + '{}p'.format(f['height']) if 'vcodec' in f.keys(): # if f['vcodec'] == 'none' and f['acodec'] != 'none': # continue # No video, show audio bit rate if f['vcodec'] == 'none': text = text + '{}kbps'.format(f['abr']) no_video = True if 'ext' in f.keys(): text = text + ' ' + '.{}'.format(f['ext']) if 'filesize' in f.keys() and f['filesize']: # Youtube api does not supply file size for some formats, so check it. text = text + ' ' + '{}'.format(self.getReadableSize(f['filesize'])) else: # Start spider to find file size input_dict = deepcopy(self.plugin_add_link_dictionary) input_dict['link'] = f['url'] more_options = self.collectMoreOptions() for key in more_options.keys(): input_dict[key] = more_options[key] size_fetcher = FileSizeFetcherThread(input_dict, i) self.threadPool[str(i)] = {'thread': size_fetcher, 'item_id': i} self.parent.threadPool.append(size_fetcher) self.parent.threadPool[-1].start() self.parent.threadPool[-1].FOUND.connect(self.findFileSize) # Add current format to the related comboboxes if no_audio: self.no_audio_list.append(f) self.video_format_selection_comboBox.addItem(text) elif no_video: self.no_video_list.append(f) self.audio_format_selection_comboBox.addItem(text) else: self.video_audio_list.append(f) self.media_comboBox.addItem(text) i = i + 1 self.status_box_textEdit.hide() if 'duration' in media_dict.keys(): self.duration_label.setText('Duration ' + self.getReadableDuration(media_dict['duration'])) self.format_selection_frame.show() self.advanced_format_selection_checkBox.show() self.advanced_format_selection_frame.show() self.ok_pushButton.setEnabled(True) self.download_later_pushButton.setEnabled(True) # if we have no options for separate audio and video, then hide advanced_format_selection... if len(self.no_audio_list) == 0 and len(self.no_video_list) == 0: self.advanced_format_selection_checkBox.hide() self.advanced_format_selection_frame.hide() # set index of comboboxes on best available quality. # we have both audio and video if len(self.no_audio_list) != 0 and len(self.no_video_list) != 0: self.media_comboBox.addItem('Best quality') self.media_comboBox.setCurrentIndex(len(self.video_audio_list)) self.change_name_lineEdit.setText(self.media_title) self.extension_label.setText('.' + self.no_audio_list[-1]['ext']) self.change_name_checkBox.setChecked(True) # video and audio are not separate elif len(self.video_audio_list) != 0: self.media_comboBox.setCurrentIndex(len(self.video_audio_list) - 1) if len(self.no_audio_list) != 0: self.video_format_selection_comboBox.setCurrentIndex(len(self.no_audio_list)) if len(self.no_video_list) != 0: self.audio_format_selection_comboBox.setCurrentIndex(len(self.no_video_list)) # if we have only audio or we have only video then hide media_comboBox if len(self.video_audio_list) == 0: self.media_comboBox.hide() self.select_format_label.hide() # only video if len(self.no_video_list) != 0 and len(self.no_audio_list) == 0: self.mediaSelectionChanged('video', int(self.video_format_selection_comboBox.currentIndex())) self.advanced_format_selection_checkBox.setChecked(True) self.advanced_format_selection_checkBox.hide() # only audio elif len(self.no_video_list) == 0 and len(self.no_audio_list) != 0: self.mediaSelectionChanged('audio', int(self.audio_format_selection_comboBox.currentIndex())) self.advanced_format_selection_checkBox.setChecked(True) self.advanced_format_selection_checkBox.hide() # audio and video else: self.mediaSelectionChanged('video_audio', int(self.media_comboBox.currentIndex())) except Exception as ex: logger.sendToLog(ex, "ERROR") def findFileSize(self, result): try: item_id = self.threadPool[str(result['thread_key'])]['item_id'] if result['file_size'] and result['file_size'] != '0': text = self.media_comboBox.itemText(item_id) self.media_comboBox.setItemText(item_id, '{} - {}'.format(text, result['file_size'])) except Exception as ex: logger.sendToLog(ex, "ERROR") def linkLineChangedHere(self, lineEdit): if str(lineEdit) == '': self.url_submit_pushButtontton.setEnabled(False) else: self.url_submit_pushButtontton.setEnabled(True) # This method collects additional information like proxy ip, user, password etc. def collectMoreOptions(self): options = {'ip': None, 'port': None, 'proxy_user': None, 'proxy_passwd': None, 'download_user': None, 'download_passwd': None, 'proxy_type': None} if self.proxy_checkBox.isChecked(): options['ip'] = self.ip_lineEdit.text() options['port'] = self.port_spinBox.value() options['proxy_user'] = self.proxy_user_lineEdit.text() options['proxy_passwd'] = self.proxy_pass_lineEdit.text() # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: options['proxy_type'] = 'http' elif self.https_radioButton.isChecked() is True: options['proxy_type'] = 'https' else: options['proxy_type'] = 'socks5' if self.download_checkBox.isChecked(): options['download_user'] = self.download_user_lineEdit.text() options['download_passwd'] = self.download_pass_lineEdit.text() # These info (keys) are required for spider to find file size, because spider() does not check if key exists. additional_info = ['header', 'load_cookies', 'user_agent', 'referer', 'out'] for i in additional_info: if i not in self.plugin_add_link_dictionary.keys(): options[i] = None return options # user submitted information by pressing ok_pushButton, so get information # from VideoFinderAddLink window and return them to the mainwindow with callback! def okButtonPressed(self, download_later, button=None): link_list = [] # separate audio format and video format is selected. if self.advanced_format_selection_checkBox.isChecked(): if self.video_format_selection_comboBox.currentText() == 'No video' and self.audio_format_selection_comboBox.currentText() != 'No audio': # only audio link must be added to the link_list audio_link = self.no_video_list[self.audio_format_selection_comboBox.currentIndex() - 1]['url'] link_list.append(audio_link) elif self.video_format_selection_comboBox.currentText() != 'No video' and self.audio_format_selection_comboBox.currentText() == 'No audio': # only video link must be added to the link_list video_link = self.no_audio_list[self.video_format_selection_comboBox.currentIndex() - 1]['url'] link_list.append(video_link) elif self.video_format_selection_comboBox.currentText() != 'No video' and self.audio_format_selection_comboBox.currentText() != 'No audio': # video and audio links must be added to the link_list audio_link = self.no_video_list[self.audio_format_selection_comboBox.currentIndex() - 1]['url'] video_link = self.no_audio_list[self.video_format_selection_comboBox.currentIndex() - 1]['url'] link_list = [video_link, audio_link] elif self.video_format_selection_comboBox.currentText() == 'No video' and self.audio_format_selection_comboBox.currentText() == 'No audio': # no video and audio is selected! REALLY?!. user is DRUNK! close the window! :)) self.close() else: if self.media_comboBox.currentText() == 'Best quality': # the last item in no_video_list and no_audio_list are the best. video_link = self.no_audio_list[-1]['url'] audio_link = self.no_video_list[-1]['url'] link_list = [video_link, audio_link] else: audio_and_video_link = self.video_audio_list[self.media_comboBox.currentIndex()]['url'] link_list.append(audio_and_video_link) # write user's new inputs in persepolis_setting for next time :) self.persepolis_setting.setValue( 'add_link_initialization/ip', self.ip_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/port', self.port_spinBox.value()) self.persepolis_setting.setValue( 'add_link_initialization/proxy_user', self.proxy_user_lineEdit.text()) self.persepolis_setting.setValue( 'add_link_initialization/download_user', self.download_user_lineEdit.text()) # http, https or socks5 proxy if self.http_radioButton.isChecked() is True: proxy_type = 'http' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'http') elif self.https_radioButton.isChecked() is True: proxy_type = 'https' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'https') else: proxy_type = 'socks5' self.persepolis_setting.setValue( 'add_link_initialization/proxy_type', 'socks5') # get proxy information if not (self.proxy_checkBox.isChecked()): ip = None port = None proxy_user = None proxy_passwd = None proxy_type = None else: ip = self.ip_lineEdit.text() if not (ip): ip = None port = self.port_spinBox.value() if not (port): port = None proxy_user = self.proxy_user_lineEdit.text() if not (proxy_user): proxy_user = None proxy_passwd = self.proxy_pass_lineEdit.text() if not (proxy_passwd): proxy_passwd = None # get download username and password information if not (self.download_checkBox.isChecked()): download_user = None download_passwd = None else: download_user = self.download_user_lineEdit.text() if not (download_user): download_user = None download_passwd = self.download_pass_lineEdit.text() if not (download_passwd): download_passwd = None # check that if user limits download speed. if not (self.limit_checkBox.isChecked()): limit = 0 else: if self.limit_comboBox.currentText() == "KiB/s": limit = str(self.limit_spinBox.value()) + str("K") else: limit = str(self.limit_spinBox.value()) + str("M") # get start time for download if user set that. if not (self.start_checkBox.isChecked()): start_time = None else: start_time = self.start_time_qDataTimeEdit.text() # get end time for download if user set that. if not (self.end_checkBox.isChecked()): end_time = None else: end_time = self.end_time_qDateTimeEdit.text() # set name for file(s) if self.change_name_checkBox.isChecked(): name = str(self.change_name_lineEdit.text()) if name == '': name = 'video_finder_file' else: name = 'video_finder_file' # video finder always finds extension # but if it can't find file extension # use mp4 for extension. if str(self.extension_label.text()) == '': extension = '.mp4' else: extension = str(self.extension_label.text()) # did user select separate audio and video? if len(link_list) == 2: video_name = name + "_video" + extension audio_name = name + "_audio" + '.' + \ str(self.no_video_list[self.audio_format_selection_comboBox.currentIndex() - 1]['ext']) name_list = [video_name, audio_name] else: name_list = [name + extension] # get number of connections connections = self.connections_spinBox.value() # get download_path download_path = self.download_folder_lineEdit.text() # referer if self.referer_lineEdit.text() != '': referer = self.referer_lineEdit.text() else: referer = None # header if self.header_lineEdit.text() != '': header = self.header_lineEdit.text() else: header = None # user_agent if self.user_agent_lineEdit.text() != '': user_agent = self.user_agent_lineEdit.text() else: user_agent = None # load_cookies if self.load_cookies_lineEdit.text() != '': load_cookies = self.load_cookies_lineEdit.text() else: load_cookies = None add_link_dictionary_list = [] if len(link_list) == 1: # save information in a dictionary(add_link_dictionary). add_link_dictionary = {'referer': referer, 'header': header, 'user_agent': user_agent, 'load_cookies': load_cookies, 'out': name_list[0], 'start_time': start_time, 'end_time': end_time, 'link': link_list[0], 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'proxy_type': proxy_type, 'download_user': download_user, 'download_passwd': download_passwd, 'connections': connections, 'limit_value': limit, 'download_path': download_path} add_link_dictionary_list.append(add_link_dictionary) else: video_add_link_dictionary = {'referer': referer, 'header': header, 'user_agent': user_agent, 'load_cookies': load_cookies, 'out': name_list[0], 'start_time': start_time, 'end_time': end_time, 'link': link_list[0], 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'proxy_type': proxy_type, 'download_user': download_user, 'download_passwd': download_passwd, 'connections': connections, 'limit_value': limit, 'download_path': download_path} audio_add_link_dictionary = {'referer': referer, 'header': header, 'user_agent': user_agent, 'load_cookies': load_cookies, 'out': name_list[1], 'start_time': None, 'end_time': end_time, 'link': link_list[1], 'ip': ip, 'port': port, 'proxy_user': proxy_user, 'proxy_passwd': proxy_passwd, 'proxy_type': proxy_type, 'download_user': download_user, 'download_passwd': download_passwd, 'connections': connections, 'limit_value': limit, 'download_path': download_path} add_link_dictionary_list = [video_add_link_dictionary, audio_add_link_dictionary] # get category of download category = str(self.add_queue_comboBox.currentText()) del self.plugin_add_link_dictionary # return information to mainwindow self.callback(add_link_dictionary_list, download_later, category) # close window self.close() persepolisdm-persepolis-867ee76/persepolis/scripts/video_finder_progress.py000066400000000000000000000326261464161131600276030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . try: from PySide6.QtCore import Qt, QSize, QPoint, QThread, QTranslator, QCoreApplication, QLocale from PySide6.QtWidgets import QLineEdit, QInputDialog from PySide6.QtGui import QIcon except: from PyQt5.QtCore import Qt, QSize, QPoint, QThread, QTranslator, QCoreApplication, QLocale from PyQt5.QtWidgets import QLineEdit, QInputDialog from PyQt5.QtGui import QIcon from persepolis.constants import OS from persepolis.gui.video_finder_progress_ui import VideoFinderProgressWindow_Ui from persepolis.scripts.shutdown import shutDown from persepolis.scripts.bubble import notifySend from persepolis.scripts import download import subprocess import platform os_type = platform.system() class ShutDownThread(QThread): def __init__(self, parent, category, password=None): QThread.__init__(self) self.category = category self.password = password self.parent = parent def run(self): shutDown(self.parent, category=self.category, password=self.password) class VideoFinderProgressWindow(VideoFinderProgressWindow_Ui): def __init__(self, parent, gid_list, persepolis_setting): super().__init__(persepolis_setting) self.persepolis_setting = persepolis_setting self.parent = parent # first item in the gid_list is related to video's link and second item is related to audio's link. self.gid_list = gid_list # this variable can be changed by checkDownloadInfo method in mainwindow.py # self.gid defines that which gid is downloaded. self.gid = gid_list[0] # this variable used as category name in ShutDownThread self.video_finder_plus_gid = 'video_finder_' + str(gid_list[0]) # connect signals and sluts self.resume_pushButton.clicked.connect(self.resumePushButtonPressed) self.stop_pushButton.clicked.connect(self.stopPushButtonPressed) self.pause_pushButton.clicked.connect(self.pausePushButtonPressed) self.download_progressBar.setValue(0) self.limit_pushButton.clicked.connect(self.limitPushButtonPressed) self.limit_frame.setEnabled(False) self.limit_checkBox.toggled.connect(self.limitCheckBoxToggled) self.after_frame.setEnabled(False) self.after_checkBox.toggled.connect(self.afterCheckBoxToggled) self.after_pushButton.clicked.connect(self.afterPushButtonPressed) # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # check if limit speed is activated by user or not add_link_dictionary = self.parent.persepolis_db.searchGidInAddLinkTable(gid_list[0]) limit = str(add_link_dictionary['limit_value']) if limit != '0': limit_number = limit[:-1] limit_unit = limit[-1] self.limit_spinBox.setValue(float(limit_number)) if limit_unit == 'K': self.after_comboBox.setCurrentIndex(0) else: self.after_comboBox.setCurrentIndex(1) self.limit_checkBox.setChecked(True) self.after_comboBox.currentIndexChanged.connect(self.afterComboBoxChanged) self.limit_comboBox.currentIndexChanged.connect(self.limitComboBoxChanged) self.limit_spinBox.valueChanged.connect(self.limitComboBoxChanged) # set window size and position size = self.persepolis_setting.value( 'ProgressWindow/size', QSize(595, 274)) position = self.persepolis_setting.value( 'ProgressWindow/position', QPoint(300, 300)) self.resize(size) self.move(position) # close window with ESC key def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.close() def closeEvent(self, event): # save window size and position self.persepolis_setting.setValue('ProgressWindow/size', self.size()) self.persepolis_setting.setValue('ProgressWindow/position', self.pos()) self.persepolis_setting.sync() self.hide() def resumePushButtonPressed(self, button): if self.status == "paused": answer = download.downloadUnpause(self.gid) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("progress_src_ui_tr", "Persepolis is trying to connect! be patient!"), 10000, 'warning', parent=self.parent) else: notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("progress_src_ui_tr", "Please try again."), 10000, 'warning', parent=self.parent) def pausePushButtonPressed(self, button): if self.status == "downloading": answer = download.downloadPause(self.gid, self.parent) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if not (answer): version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() download.downloadStop(self.gid, self.parent) notifySend("Aria2 disconnected!", "Persepolis is trying to connect! be patient!", 10000, 'warning', parent=self.parent) else: notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 did not respond!"), QCoreApplication.translate("progress_src_ui_tr", "Try again!"), 10000, 'critical', parent=self.parent) def stopPushButtonPressed(self, button): # cancel shut down progress dictionary = {'category': self.video_finder_plus_gid, 'shutdown': 'canceled'} self.parent.temp_db.updateQueueTable(dictionary) answer = download.downloadStop(self.gid, self.parent) # if aria2 did not respond , then this function is checking for aria2 # availability , and if aria2 disconnected then aria2Disconnected is # executed if answer == 'None': version_answer = download.aria2Version() if version_answer == 'did not respond': self.parent.aria2Disconnected() notifySend(QCoreApplication.translate("progress_src_ui_tr", "Aria2 disconnected!"), QCoreApplication.translate("progress_src_ui_tr", "Persepolis is trying to connect! be patient!"), 10000, 'warning', parent=self.parent) def limitCheckBoxToggled(self, checkBoxes): # user checked limit_checkBox if self.limit_checkBox.isChecked() is True: self.limit_frame.setEnabled(True) self.limit_pushButton.setEnabled(True) # user unchecked limit_checkBox else: self.limit_frame.setEnabled(False) # check download status is "scheduled" or not! for i in [0, 1]: gid = self.gid_list[i] dictionary = self.parent.persepolis_db.searchGidInDownloadTable(gid) status = dictionary['status'] if status != 'scheduled': # tell aria2 for unlimited speed download.limitSpeed(gid, "0") else: # update limit value in data_base add_link_dictionary = {'gid': gid, 'limit_value': '0'} self.parent.persepolis_db.updateAddLinkTable([add_link_dictionary]) def limitComboBoxChanged(self, connect): self.limit_pushButton.setEnabled(True) def afterComboBoxChanged(self, connect): self.after_pushButton.setEnabled(True) def afterCheckBoxToggled(self, checkBoxes): if self.after_checkBox.isChecked(): self.after_frame.setEnabled(True) else: # so user canceled shutdown after download # write cancel value in data_base for this gid dictionary = {'category': self.video_finder_plus_gid, 'shutdown': 'canceled'} self.parent.temp_db.updateQueueTable(dictionary) def afterPushButtonPressed(self, button): self.after_pushButton.setEnabled(False) # For Linux and Mac OSX and FreeBSD and OpenBSD if os_type != OS.WINDOWS: # get root password passwd, ok = QInputDialog.getText( self, 'PassWord', 'Please enter root password:', QLineEdit.Password) if ok: # check password is true or not! pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() # Wrong password while answer != 0: passwd, ok = QInputDialog.getText( self, 'PassWord', 'Wrong Password!\nPlease try again.', QLineEdit.Password) if ok: pipe = subprocess.Popen(['sudo', '-S', 'echo', 'hello'], stdout=subprocess.DEVNULL, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=False) pipe.communicate(passwd.encode()) answer = pipe.wait() else: ok = False break if ok is not False: # if user selects shutdown option after download progress, # value of 'shutdown' will changed in temp_db for this progress # and "wait" word will be written for this value. # (see ShutDownThread and shutdown.py for more information) # shutDown method will check that value in a loop . # when "wait" changes to "shutdown" then shutdown.py script # will shut down the system. shutdown_enable = ShutDownThread(self.parent, self.video_finder_plus_gid, passwd) self.parent.threadPool.append(shutdown_enable) self.parent.threadPool[-1].start() else: self.after_checkBox.setChecked(False) else: self.after_checkBox.setChecked(False) else: # for Windows for gid in self.gid_list: shutdown_enable = ShutDownThread(self.parent, self.video_finder_plus_gid) self.parent.threadPool.append(shutdown_enable) self.parent.threadPool[-1].start() def limitPushButtonPressed(self, button): self.limit_pushButton.setEnabled(False) if self.limit_comboBox.currentText() == "KiB/s": limit_value = str(self.limit_spinBox.value()) + str("K") else: limit_value = str(self.limit_spinBox.value()) + str("M") # if download was started before , send the limit_speed request to aria2 . # else save the request in data_base for i in [0, 1]: gid = self.gid_list[i] dictionary = self.parent.persepolis_db.searchGidInDownloadTable(gid) status = dictionary['status'] if status != 'scheduled': download.limitSpeed(self.gid, limit_value) else: # update limit value in data_base add_link_dictionary = {'gid': gid, 'limit_value': limit_value} self.parent.persepolis_db.updateAddLinkTable([add_link_dictionary]) def changeIcon(self, icons): icons = ':/' + str(icons) + '/' self.resume_pushButton.setIcon(QIcon(icons + 'play')) self.pause_pushButton.setIcon(QIcon(icons + 'pause')) self.stop_pushButton.setIcon(QIcon(icons + 'stop')) persepolisdm-persepolis-867ee76/pyproject.toml000066400000000000000000000020671464161131600217040ustar00rootroot00000000000000[build-system] requires = ["meson-python"] build-backend = "mesonpy" [tool.setuptools] py-modules = ["persepolis"] [project] name = "persepolis" version = "4.2.0" dependencies = [ "pyside6", "requests", "setproctitle", "psutil", "setuptools", "yt-dlp" ] requires-python = ">=3.5" authors = [ {name = "AliReza AmirSamimi", email = "alireza.amirsamimi@gmail.com"} ] maintainers = [ {name = "AliReza AmirSamimi", email = "alireza.amirsamimi@gmail.com"} ] description = "Qt front-end for aria2 download manager" readme = "README.md" license = {file = "LICENSE"} keywords = ["persepolis", "download manager", "aria2", "yt-dlp", "pyside6"] classifiers = [ "Development Status :: 5 - Production/Stable", "Programming Language :: Python" ] [project.gui-scripts] persepolis-gui = "persepolis.scripts.persepolis:main" [project.urls] Homepage = "https://persepolisdm.github.io/" Documentation = "https://github.com/persepolisdm/persepolis/wiki" Repository = "https://github.com/persepolisdm/persepolis/" Issues = "https://github.com/persepolisdm/persepolis/issues" persepolisdm-persepolis-867ee76/requirements.md000066400000000000000000000002361464161131600220310ustar00rootroot00000000000000## You can find requirements and installation instructions in [Persepolis Wiki](https://github.com/persepolisdm/persepolis/wiki/git-installation-instruction) persepolisdm-persepolis-867ee76/resources/000077500000000000000000000000001464161131600207755ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Breeze-Dark/000077500000000000000000000000001464161131600230705ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Breeze-Dark/about.svg000066400000000000000000000011721464161131600247240ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/add.svg000066400000000000000000000006711464161131600243450ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/add_queue.svg000066400000000000000000000052151464161131600255500ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/clipboard.svg000066400000000000000000000011441464161131600255500ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/down.svg000066400000000000000000000006561464161131600245670ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/exit.svg000066400000000000000000000012011464161131600245540ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/file.svg000066400000000000000000000006751464161131600245400ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/folder.svg000066400000000000000000000011331464161131600250620ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/menu.svg000066400000000000000000000007461464161131600245640ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/minimize.svg000066400000000000000000000040771464161131600254420ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/multi_down.svg000066400000000000000000000047561464161131600260060ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/multi_remove.svg000066400000000000000000000057071464161131600263310ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/multi_trash.svg000066400000000000000000000055141464161131600261510ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/multi_up.svg000066400000000000000000000051101464161131600254440ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/ok.svg000066400000000000000000000010761464161131600242260ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/pause.svg000066400000000000000000000011711464161131600247260ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/pause_queue.svg000066400000000000000000000050701464161131600261340ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/play.svg000066400000000000000000000011161464161131600245550ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/preferences.svg000066400000000000000000000013301464161131600261070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/refresh.svg000066400000000000000000000035601464161131600252530ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/remove.svg000066400000000000000000000036721464161131600251160ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/remove_queue.svg000066400000000000000000000050301464161131600263100ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/select_all.svg000066400000000000000000000043731464161131600257270ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/setting.svg000066400000000000000000000010371464161131600252670ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/start_queue.svg000066400000000000000000000015451464161131600261570ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/stop.svg000066400000000000000000000006761464161131600246070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/stop_all.svg000066400000000000000000000046701464161131600254350ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/stop_queue.svg000066400000000000000000000015541464161131600260070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/trash.svg000066400000000000000000000035371464161131600247420ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze-Dark/up.svg000066400000000000000000000010041464161131600242300ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/video_finder.svg000066400000000000000000000016711464161131600262530ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze-Dark/window.svg000066400000000000000000000007411464161131600251220ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze/000077500000000000000000000000001464161131600222115ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Breeze/about.svg000066400000000000000000000040071464161131600240450ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/add.svg000066400000000000000000000033421464161131600234640ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/add_queue.svg000066400000000000000000000051711464161131600246720ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/clipboard.svg000066400000000000000000000011441464161131600246710ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze/down.svg000066400000000000000000000033271464161131600237060ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/exit.svg000066400000000000000000000036211464161131600237050ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/file.svg000066400000000000000000000033461464161131600236570ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/folder.svg000066400000000000000000000036061464161131600242120ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/menu.svg000066400000000000000000000033441464161131600237020ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/minimize.svg000066400000000000000000000040771464161131600245630ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/multi_down.svg000066400000000000000000000047261464161131600251240ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/multi_remove.svg000066400000000000000000000057071464161131600254520ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/multi_trash.svg000066400000000000000000000054751464161131600253000ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/multi_up.svg000066400000000000000000000050601464161131600245710ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/ok.svg000066400000000000000000000035521464161131600233500ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/pause.svg000066400000000000000000000036501464161131600240530ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/pause_queue.svg000066400000000000000000000050441464161131600252560ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/play.svg000066400000000000000000000035741464161131600237100ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/preferences.svg000066400000000000000000000040021464161131600252270ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/refresh.svg000066400000000000000000000035601464161131600243740ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze/remove.svg000066400000000000000000000036341464161131600242350ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/remove_queue.svg000066400000000000000000000050121464161131600254310ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/select_all.svg000066400000000000000000000043741464161131600250510ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/setting.svg000066400000000000000000000035121464161131600244100ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/start_queue.svg000066400000000000000000000042241464161131600252750ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/stop.svg000066400000000000000000000033451464161131600237240ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/stop_all.svg000066400000000000000000000046601464161131600245550ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/stop_queue.svg000066400000000000000000000042321464161131600251240ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/trash.svg000066400000000000000000000035201464161131600240530ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/up.svg000066400000000000000000000034601464161131600233610ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Breeze/video_finder.svg000066400000000000000000000016711464161131600253740ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Breeze/window.svg000066400000000000000000000034231464161131600242430ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/Papirus-Dark/000077500000000000000000000000001464161131600232775ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Papirus-Dark/about.svg000066400000000000000000000011241464161131600251300ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/add.svg000066400000000000000000000003211464161131600245440ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/add_queue.svg000066400000000000000000000005771464161131600257650ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/clipboard.svg000066400000000000000000000012011464161131600257510ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/down.svg000066400000000000000000000004331464161131600247670ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/exit.svg000066400000000000000000000013201464161131600247650ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/file.svg000066400000000000000000000010441464161131600247360ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/folder.svg000066400000000000000000000006011464161131600252700ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/menu.svg000066400000000000000000000005321464161131600247640ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/minimize.svg000066400000000000000000000002441464161131600256410ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/multi_down.svg000066400000000000000000000006651464161131600262100ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/multi_remove.svg000066400000000000000000000011221464161131600265230ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/multi_trash.svg000066400000000000000000000025371464161131600263620ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/multi_up.svg000066400000000000000000000010451464161131600256560ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/ok.svg000066400000000000000000000010401464161131600244240ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/pause.svg000066400000000000000000000003061464161131600251340ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/pause_queue.svg000066400000000000000000000004711464161131600263430ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/play.svg000066400000000000000000000002571464161131600247710ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/preferences.svg000066400000000000000000000006521464161131600263240ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/refresh.svg000066400000000000000000000012001464161131600254470ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/remove.svg000066400000000000000000000013201464161131600253110ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/remove_queue.svg000066400000000000000000000016261464161131600265260ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/select_all.svg000066400000000000000000000012531464161131600261300ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/setting.svg000066400000000000000000000015041464161131600254750ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/start_queue.svg000066400000000000000000000005111464161131600263560ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/stop.svg000066400000000000000000000002411464161131600250020ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/stop_all.svg000066400000000000000000000013311464161131600256330ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/stop_queue.svg000066400000000000000000000004711464161131600262130ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/trash.svg000066400000000000000000000010621464161131600251400ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/up.svg000066400000000000000000000004451464161131600244470ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/video_finder.svg000066400000000000000000000007151464161131600264600ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Dark/window.svg000066400000000000000000000015401464161131600253270ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/000077500000000000000000000000001464161131600234655ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Papirus-Light/about.svg000066400000000000000000000011241464161131600253160ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/add.svg000066400000000000000000000003211464161131600247320ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/add_queue.svg000066400000000000000000000005771464161131600261530ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/clipboard.svg000066400000000000000000000012011464161131600261370ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/down.svg000066400000000000000000000004331464161131600251550ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/exit.svg000066400000000000000000000013201464161131600251530ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/file.svg000066400000000000000000000010441464161131600251240ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/folder.svg000066400000000000000000000006011464161131600254560ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/menu.svg000066400000000000000000000005321464161131600251520ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/minimize.svg000066400000000000000000000002441464161131600260270ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/multi_down.svg000066400000000000000000000006651464161131600263760ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/multi_remove.svg000066400000000000000000000011221464161131600267110ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/multi_trash.svg000066400000000000000000000025371464161131600265500ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/multi_up.svg000066400000000000000000000010451464161131600260440ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/ok.svg000066400000000000000000000010401464161131600246120ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/pause.svg000066400000000000000000000003061464161131600253220ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/pause_queue.svg000066400000000000000000000004711464161131600265310ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/play.svg000066400000000000000000000002571464161131600251570ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/preferences.svg000066400000000000000000000006521464161131600265120ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/refresh.svg000066400000000000000000000012001464161131600256350ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/remove.svg000066400000000000000000000013201464161131600254770ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/remove_queue.svg000066400000000000000000000016261464161131600267140ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/select_all.svg000066400000000000000000000012531464161131600263160ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/setting.svg000066400000000000000000000015041464161131600256630ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/start_queue.svg000066400000000000000000000005111464161131600265440ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/stop.svg000066400000000000000000000002411464161131600251700ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/stop_all.svg000066400000000000000000000013311464161131600260210ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/stop_queue.svg000066400000000000000000000004711464161131600264010ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/trash.svg000066400000000000000000000010621464161131600253260ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/up.svg000066400000000000000000000004451464161131600246350ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/video_finder.svg000066400000000000000000000007151464161131600266460ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus-Light/window.svg000066400000000000000000000015401464161131600255150ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/000077500000000000000000000000001464161131600224205ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/Papirus/about.svg000066400000000000000000000013761464161131600242620ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/add.svg000066400000000000000000000020171464161131600236710ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/add_queue.svg000066400000000000000000000043301464161131600250750ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/clipboard.svg000066400000000000000000000026201464161131600251000ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/down.svg000066400000000000000000000024211464161131600241070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/exit.svg000066400000000000000000000017311464161131600241140ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/file.svg000066400000000000000000000014451464161131600240640ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/folder.svg000066400000000000000000000016621464161131600244210ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/menu.svg000066400000000000000000000041611464161131600241070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/minimize.svg000066400000000000000000000016151464161131600247650ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/multi_down.svg000066400000000000000000000026671464161131600253350ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/multi_remove.svg000066400000000000000000000031541464161131600256530ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/multi_trash.svg000066400000000000000000000021541464161131600254760ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/multi_up.svg000066400000000000000000000027171464161131600250060ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/ok.svg000066400000000000000000000025121464161131600235520ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/pause.svg000066400000000000000000000032471464161131600242640ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/pause_queue.svg000066400000000000000000000042301464161131600254610ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/play.svg000066400000000000000000000026031464161131600241070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/preferences.svg000066400000000000000000000032361464161131600254460ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/refresh.svg000066400000000000000000000022521464161131600246000ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/remove.svg000066400000000000000000000024161464161131600244410ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/remove_queue.svg000066400000000000000000000044141464161131600256450ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/select_all.svg000066400000000000000000000065261464161131600252610ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/setting.svg000066400000000000000000000112341464161131600246170ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/start_queue.svg000066400000000000000000000040061464161131600255020ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/stop.svg000066400000000000000000000023031464161131600241240ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/stop_all.svg000066400000000000000000000334701464161131600247650ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/stop_queue.svg000066400000000000000000000036411464161131600253360ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/trash.svg000066400000000000000000000021541464161131600242640ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/up.svg000066400000000000000000000024321464161131600235660ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/video_finder.svg000066400000000000000000000104561464161131600256040ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/Papirus/window.svg000066400000000000000000000022661464161131600244560ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/PersepolisBI.py000066400000000000000000000253751464161131600237230ustar00rootroot00000000000000# -*- coding: utf-8 -*- # 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 . import logging import json import subprocess from subprocess import CREATE_NO_WINDOW, DETACHED_PROCESS, CREATE_NEW_PROCESS_GROUP, CREATE_BREAKAWAY_FROM_JOB import platform import os import sys import struct import argparse import random import sqlite3 from copy import deepcopy from time import sleep from PySide6.QtCore import QSettings # a "PersepolisBI.exe" file must be created from this script. # "PersepolisBI.exe" and "Persepolis Download Manager.exe" must be in same directory. # "PersepolisBI.exe" act as intermediary between browser(FireFox, Chrome, ...) and "Persepolis Download Manager.exe" # find operating system os_type = platform.system() # user home address home_address = os.path.expanduser("~") # persepolis config folder in M.S Windows config_folder = os.path.join( home_address, 'AppData', 'Local', 'persepolis_download_manager') # create folder if it's not exist. os.makedirs(config_folder, exist_ok=True) # persepolis tmp folder path persepolis_tmp = os.path.join(config_folder, 'persepolis_tmp') # load persepolis_settings persepolis_setting = QSettings('persepolis_download_manager', 'persepolis') # plugins.db is store links, when browser plugins are send new links. # This class is managing plugin.db class PluginsDB(): def __init__(self): # plugins.db file path plugins_db_path = os.path.join(persepolis_tmp, 'plugins.db') # plugins_db_connection self.plugins_db_connection = sqlite3.connect(plugins_db_path, check_same_thread=False) # plugins_db_cursor self.plugins_db_cursor = self.plugins_db_connection.cursor() # create a lock for data base self.lock = False # this method locks data base. # this is pervent accessing data base simultaneously. def lockCursor(self): while self.lock: rand_float = random.uniform(0, 0.5) sleep(rand_float) self.lock = True # plugins_db_table contains links that sends by browser plugins. # insert new items in plugins_db_table def insertInPluginsTable(self, list_): # lock data base self.lockCursor() for dict_ in list_: self.plugins_db_cursor.execute("""INSERT INTO plugins_db_table VALUES( NULL, :link, :referer, :load_cookies, :user_agent, :header, :out, 'new' )""", dict_) self.plugins_db_connection.commit() # release lock self.lock = False # close connections def closeConnections(self): # lock data base self.lockCursor() self.plugins_db_cursor.close() self.plugins_db_connection.close() # release lock self.lock = False # log file address log_file = os.path.join(str(config_folder), 'persepolisbi.log') # create log file if it's not exist. if not os.path.isfile(log_file): f = open(log_file, 'w') f.close() # define logging object logObj = logging.getLogger("Persepolis") logObj.setLevel(logging.INFO) # don't show log in console logObj.propagate = False # create a file handler handler = logging.FileHandler(log_file) handler.setLevel(logging.INFO) # create a logging format formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # add the handlers to the logger logObj.addHandler(handler) def sendToLog(text="", type="INFO"): if type == "INFO": logObj.info(text) elif type == "ERROR": logObj.error(text) else: logObj.warning(text) # find exeternal application execution path def findExternalAppPath(app_name): # alongside of the bundle path cwd = sys.argv[0] current_directory = os.path.dirname(cwd) app_alongside = os.path.join(current_directory, app_name) # for Mac OSX and MicroSoft Windows app_command = app_alongside log_list = ["{}'s file is detected alongside of bundle.".format(app_name), "INFO"] return app_command, log_list # create terminal arguments parser = argparse.ArgumentParser(description='PersepolisBI') parser.add_argument('--tray', action='store_true', help="Persepolis is starting in tray icon. It's useful when you want to put persepolis in system's startup.") parser.add_argument('--parent-window', action='store', nargs=1, help='this switch is used for chrome native messaging in Windows') parser.add_argument('--version', action='version', version='PersepolisBI 1.0.0') # Clears unwanted args ( like args from Browers via NHM ) # unknown arguments (may sent by browser) will save in unknownargs. args, unknownargs = parser.parse_known_args() browser_url = True plugin_list = [] browser_plugin_dict = {'link': None, 'referer': None, 'load_cookies': None, 'user_agent': None, 'header': None, 'out': None } # This dirty trick will show Persepolis version when there are unknown args # Unknown args are sent by Browsers for NHM if args.parent_window or unknownargs: # Platform specific configuration if os_type == 'Windows': # Set the default I/O mode to O_BINARY in windows import msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # Send message to browsers plugin message = '{"enable": true, "version": "1.85"}'.encode('utf-8') sys.stdout.buffer.write((struct.pack('i', len(message)))) sys.stdout.buffer.write(message) sys.stdout.flush() text_length_bytes = sys.stdin.buffer.read(4) # Unpack message length as 4 byte integer. text_length = struct.unpack('@I', text_length_bytes)[0] # Read the text (JSON object) of the message. text = sys.stdin.buffer.read(text_length).decode("utf-8") if text: new_dict = json.loads(text) if 'url_links' in new_dict: # new_dict is sended by persepolis browser add-on. # new_dict['url_links'] contains some lists. # every list contains link information. for item in new_dict['url_links']: copy_dict = deepcopy(browser_plugin_dict) if 'url' in item.keys(): copy_dict['link'] = str(item['url']) if 'header' in item.keys() and item['header'] != '': copy_dict['header'] = item['header'] if 'referrer' in item.keys() and item['referrer'] != '': copy_dict['referer'] = item['referrer'] if 'filename' in item.keys() and item['filename'] != '': copy_dict['out'] = os.path.basename(str(item['filename'])) if 'useragent' in item.keys() and item['useragent'] != '': copy_dict['user_agent'] = item['useragent'] if 'cookies' in item.keys() and item['cookies'] != '': copy_dict['load_cookies'] = item['cookies'] plugin_list.append(copy_dict) else: browser_url = False # when browsers plugin calls persepolis or user runs persepolis by terminal arguments, # then persepolis creates a request file in persepolis_tmp folder and link information added to # plugins_db.db file(see data_base.py for more information). # persepolis mainwindow checks persepolis_tmp for plugins request file every 2 seconds (see CheckingThread class in mainwindow.py) # when request received in CheckingThread, a popup window (AddLinkWindow) comes up and window gets additional download information # from user (port , proxy , ...) and download starts and request file deleted if len(plugin_list) != 0: # create an object for PluginsDB plugins_db = PluginsDB() # add plugin_list to plugins_table in plugins.db file. plugins_db.insertInPluginsTable(plugin_list) # Job is done! close connections. plugins_db.closeConnections() # notify that a link is added! plugin_ready = os.path.join(persepolis_tmp, 'persepolis-plugin-ready') f = open(plugin_ready, 'w') f.close() # start persepolis in system tray if browser executed # and if user select this option in preferences window. if str(persepolis_setting.value('settings/browser-persepolis')) == 'yes' and (args.parent_window or unknownargs): start_persepolis_if_browser_executed = True else: start_persepolis_if_browser_executed = False # find "Persepolis Download Manager.exe" file path app_command, log_list = findExternalAppPath('Persepolis Download Manager.exe') sendToLog(log_list[0], log_list[1]) # call persepolis try: creationflags = DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_BREAKAWAY_FROM_JOB | CREATE_NO_WINDOW if browser_url: subprocess.Popen([app_command], creationflags=creationflags, shell=False) sendToLog("Download link(s) is sended to persepolis", "INFO") elif start_persepolis_if_browser_executed: subprocess.Popen([app_command, '--tray'], creationflags=creationflags, shell=False) sendToLog("Browser is executed and persepolis called by browser.") except Exception as e: sendToLog(str(e), "ERROR")persepolisdm-persepolis-867ee76/resources/com.github.persepolisdm.persepolis.svg000066400000000000000000000036041464161131600304510ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/000077500000000000000000000000001464161131600232025ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_checked.svg000077500000000000000000000036301464161131600271640ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_checked_disabled.svg000077500000000000000000000005121464161131600310070ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_indeterminate.svg000077500000000000000000000040771464161131600304340ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_indeterminate_disabled.svg000077500000000000000000000007541464161131600322610ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_unchecked.svg000077500000000000000000000032221464161131600275240ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/dark fusion/checkbox_unchecked_disabled.svg000077500000000000000000000004041464161131600313520ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/down_arrow.svg000077500000000000000000000010471464161131600261110ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/down_arrow_disabled.svg000077500000000000000000000010521464161131600277340ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/down_arrow_hover.svg000077500000000000000000000036031464161131600273140ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/dark fusion/left_arrow.svg000077500000000000000000000010521464161131600260700ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/left_arrow_disabled.svg000077500000000000000000000010551464161131600277220ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/right_arrow.svg000077500000000000000000000007141464161131600262570ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/right_arrow_disabled.svg000077500000000000000000000007171464161131600301110ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/up_arrow.svg000077500000000000000000000010371464161131600255650ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/up_arrow_disabled.svg000077500000000000000000000010421464161131600274100ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/dark fusion/up_arrow_hover.svg000077500000000000000000000035611464161131600267740ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/dark_style.qss000066400000000000000000000175411464161131600236760ustar00rootroot00000000000000/* * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * *------------------------------------------------------------------------ * useful projects help me for writing this file: * https://github.com/Alexhuszagh/BreezeStyleSheets * https://github.com/u8sand/Baka-MPlayer * https://doc.qt.io/qt-5/stylesheet-examples.html * * */ QMenu::item:selected { background-color : #c2185b; color : white } QToolTip { color: white; background-color: #383838; border: 1px solid white; } QTabWidget::pane { background: #383838; border: 1px solid gray; border-radius: 2px; } QTabBar::tab { border-style: none; padding-bottom: 5px; min-width: 100px; min-height: 25px; padding-left: 5px; padding-right: 5px; } QTabBar::tab:selected { border-bottom: 2px solid #c2185b; padding-bottom: 5px; font-weight: bold; } QTabBar::tab:!selected { font-weight: normal; margin-bottom: 1px; } QTabBar::tab:hover { border-bottom: 1px solid #c2185b; } QTabBar QToolButton::right-arrow { image: url(:/dark fusion/right_arrow.svg); background: #383838; } QTabBar QToolButton::left-arrow { image: url(:/dark fusion/left_arrow.svg); background: #383838; } QTabBar QToolButton::right-arrow:disabled { image: url(:/dark fusion/right_arrow_disabled.svg); background: #383838; } QTabBar QToolButton::left-arrow:disabled { image: url(:/dark fusion/left_arrow_disabled.svg); background: #383838; } QPushButton, QComboBox { background: #383838; border-radius: 2px; min-width: 76px; min-height: 17px; padding: 4px 6px; } QPushButton:enabled, QComboBox:enabled { border: 1px solid gray; } QPushButton:hover, QComboBox:hover { border: 1px solid #c2185b; } QComboBox { background: #2b2b2b; selection-background-color: #c2185b; } QComboBox:focus { border: 1px solid #c2185b; } QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 15px; border-left-width: 1px; border-left-color: gray; border-left-style: solid; /* just a single line */ border-top-right-radius: 3px; /* same radius as the QComboBox */ border-bottom-right-radius: 3px; } QComboBox::down-arrow { border-image: url(:/dark fusion/down_arrow_disabled.svg); width: 0.9ex; height: 0.6ex; } QSpinBox:enabled, QDoubleSpinBox:enabled, QLineEdit:enabled, QDateTimeEdit:enabled { border: 1px solid gray; padding-right: 1.5ex; background: #2b2b2b; } QSpinBox::hover, QDoubleSpinBox::hover, QDateTimeEdit::hover { border: 1px solid #c2185b; } QDateTimeEdit::up-button, QSpinBox::up-button, QDoubleSpinBox::up-button { subcontrol-origin: content; subcontrol-position: right top; width: 1.6ex; border-width: 0.1ex; } QDateTimeEdit::up-arrow, QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { border-image: url(:/dark fusion/up_arrow.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::up-arrow::hover, QDateTimeEdit::up-arrow:pressed, QSpinBox::up-arrow:hover, QSpinBox::up-arrow:pressed, QDoubleSpinBox::up-arrow:hover, QDoubleSpinBox::up-arrow:pressed { border-image: url(:/dark fusion/up_arrow_hover.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::up-arrow:disabled, QDateTimeEdit::up-arrow:off, QSpinBox::up-arrow:disabled, QSpinBox::up-arrow:off, QDoubleSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:off { border-image: url(:/dark fusion/up_arrow_disabled.svg); } QDateTimeEdit::down-button, QSpinBox::down-button, QDoubleSpinBox::down-button { subcontrol-origin: content; subcontrol-position: right bottom; width: 1.6ex; border-width: 0.1ex; } QDateTimeEdit::down-arrow, QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { border-image: url(:/dark fusion/down_arrow.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::down-arrow:hover, QDateTimeEdit::down-arrow:pressed, QSpinBox::down-arrow:hover, QSpinBox::down-arrow:pressed, QDoubleSpinBox::down-arrow:hover, QDoubleSpinBox::down-arrow:pressed { border-image: url(:/dark fusion/down_arrow_hover.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::down-arrow:disabled, QSpinBox::down-arrow:disabled, QSpinBox::down-arrow:off, QDoubleSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:off { border-image: url(:/dark fusion/down_arrow_disabled.svg); } QToolButton { background-color: transparent; border: none; margin: 0.3ex; padding: 0.5ex; } QToolButton:hover { background-color: transparent; border: 0.1ex solid #c2185b; border-radius: 0.2ex; margin: 0.3ex; padding: 0.5ex; } QToolBar { border: 0.1ex transparent #393838; background: 0.1ex solid #383838; font-weight: bold; } QToolBar::separator:horizontal { background: gray; width: 1px; height: 5ex; } QTableView, QTreeView { border: 0.1ex solid gray; gridline-color: #31363b; background-color: #2b2b2b; } QTableView:hover, QTreeView:hover, QLineEdit:hover { border: 1px solid #c2185b; } QHeaderView { background-color: #383838; border: 0.1ex transparent; border-radius: 0px; margin: 0px; padding: 0px; } QHeaderView::section { background-color: #383838; color: #eff0f1; border: 0.1ex solid gray; border-radius: 0px; text-align: center; } QCheckBox { spacing: 0.5ex; outline: none; color: #eff0f1; margin-bottom: 0.2ex; opacity: 200; } QCheckBox:disabled { color: #76797c; } QGroupBox::indicator { margin-left: 0.2ex; } QCheckBox::indicator:unchecked, QCheckBox::indicator:unchecked:focus { border-image: url(:/dark fusion/checkbox_unchecked_disabled.svg); } QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:pressed, QGroupBox::indicator:unchecked:hover, QGroupBox::indicator:unchecked:focus, QGroupBox::indicator:unchecked:pressed { border: none; border-image: url(:/dark fusion/checkbox_unchecked.svg); } QCheckBox::indicator:checked { border-image: url(:/dark fusion/checkbox_checked.svg); } QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:focus, QCheckBox::indicator:checked:pressed, QGroupBox::indicator:checked:hover, QGroupBox::indicator:checked:focus, QGroupBox::indicator:checked:pressed { border: none; border-image: url(:/dark fusion/checkbox_checked.svg); } QCheckBox::indicator:indeterminate { border-image: url(:/dark fusion/checkbox_indeterminate.svg); } QCheckBox::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed { border-image: url(:/dark fusion/checkbox_indeterminate.svg); } QCheckBox::indicator:indeterminate:disabled { border-image: url(:/dark fusion/checkbox_indeterminate_disabled.svg); } QCheckBox::indicator:checked:disabled, QGroupBox::indicator:checked:disabled { border-image: url(:/dark fusion/checkbox_checked_disabled.svg); } QCheckBox::indicator:unchecked:disabled, QGroupBox::indicator:unchecked:disabled { border-image: url(:/dark fusion/checkbox_unchecked_disabled.svg); } QProgressBar { background-color: #2b2b2b; border: 1px solid gray; border-radius: 0.3ex; height: 2px; text-align: center; margin-top: 1ex; margin-bottom: 1ex; padding: 0px; } QProgressBar::chunk { background-color: #c2185b; border: 0px transparent; border-radius: 0.3ex; } persepolisdm-persepolis-867ee76/resources/light fusion/000077500000000000000000000000001464161131600233705ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_checked.svg000077500000000000000000000036301464161131600273520ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_checked_disabled.svg000077500000000000000000000005121464161131600311750ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_indeterminate.svg000077500000000000000000000040771464161131600306220ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_indeterminate_disabled.svg000077500000000000000000000007541464161131600324470ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_unchecked.svg000077500000000000000000000032221464161131600277120ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/light fusion/checkbox_unchecked_disabled.svg000077500000000000000000000004041464161131600315400ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/down_arrow.svg000077500000000000000000000010521464161131600262730ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/down_arrow_disabled.svg000077500000000000000000000010521464161131600301220ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/down_arrow_hover.svg000077500000000000000000000036031464161131600275020ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/light fusion/left_arrow.svg000077500000000000000000000010551464161131600262610ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/left_arrow_disabled.svg000077500000000000000000000010551464161131600301100ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/right_arrow.svg000077500000000000000000000010521464161131600264410ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/right_arrow_disabled.svg000077500000000000000000000007171464161131600302770ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/up_arrow.svg000077500000000000000000000010421464161131600257470ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/up_arrow_disabled.svg000077500000000000000000000010421464161131600275760ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/light fusion/up_arrow_hover.svg000077500000000000000000000035611464161131600271620ustar00rootroot00000000000000 image/svg+xml persepolisdm-persepolis-867ee76/resources/light_style.qss000066400000000000000000000177411464161131600240660ustar00rootroot00000000000000/* * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * *------------------------------------------------------------------------ * useful projects help me for writing this file: * https://github.com/Alexhuszagh/BreezeStyleSheets * https://github.com/u8sand/Baka-MPlayer * https://doc.qt.io/qt-5/stylesheet-examples.html * * */ QMenu { background-color : #EFF0F1; border: 1px solid #BCBCBC; } QMenu::item:selected { background-color : #e91e63; color : #ffffff } QToolTip { color: #31363b; background-color: #EFF0F1; border: 1px solid #E3E3E3; } QTabWidget::pane { background: #EFF0F1; border: 1px solid #E3E3E3; border-radius: 2px; } QTabBar::tab { border-style: none; padding-bottom: 5px; min-width: 100px; min-height: 25px; padding-left: 5px; padding-right: 5px; } QTabBar::tab:selected { border-bottom: 2px solid #e91e63; padding-bottom: 5px; font-weight: bold; } QTabBar::tab:!selected { font-weight: normal; margin-bottom: 1px; } QTabBar::tab:hover { border-bottom: 1px solid #e91e63; } QTabBar QToolButton::right-arrow { image: url(:/light fusion/right_arrow.svg); background: #EFF0F1; } QTabBar QToolButton::left-arrow { image: url(:/light fusion/left_arrow.svg); background: #EFF0F1; } QTabBar QToolButton::right-arrow:disabled { image: url(:/light fusion/right_arrow_disabled.svg); background: #EFF0F1; } QTabBar QToolButton::left-arrow:disabled { image: url(:/light fusion/left_arrow_disabled.svg); background: #EFF0F1; } QPushButton, QComboBox { background: #EFF0F1; border-radius: 2px; min-width: 76px; min-height: 17px; padding: 4px 6px; } QPushButton:enabled, QComboBox:enabled { border: 1px solid #BCBCBC; } QPushButton:hover, QComboBox:hover { border: 1px solid #e91e63; } QComboBox { background: #FCFCFC; selection-background-color: #e91e63; } QComboBox:focus { border: 1px solid #e91e63; } QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 15px; border-left-width: 1px; border-left-color: #E3E3E3; border-left-style: solid; /* just a single line */ border-top-right-radius: 3px; /* same radius as the QComboBox */ border-bottom-right-radius: 3px; } QComboBox::down-arrow { border-image: url(:/light fusion/down_arrow_disabled.svg); width: 0.9ex; height: 0.6ex; } QSpinBox:enabled, QDoubleSpinBox:enabled, QLineEdit:enabled, QDateTimeEdit:enabled { border: 1px solid #E3E3E3; padding-right: 1.5ex; background: #FCFCFC; } QSpinBox::hover, QDoubleSpinBox::hover, QDateTimeEdit::hover { border: 1px solid #e91e63; } QDateTimeEdit::up-button, QSpinBox::up-button, QDoubleSpinBox::up-button { subcontrol-origin: content; subcontrol-position: right top; width: 1.6ex; border-width: 0.1ex; } QDateTimeEdit::up-arrow, QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { border-image: url(:/light fusion/up_arrow.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::up-arrow::hover, QDateTimeEdit::up-arrow:pressed, QSpinBox::up-arrow:hover, QSpinBox::up-arrow:pressed, QDoubleSpinBox::up-arrow:hover, QDoubleSpinBox::up-arrow:pressed { border-image: url(:/light fusion/up_arrow_hover.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::up-arrow:disabled, QDateTimeEdit::up-arrow:off, QSpinBox::up-arrow:disabled, QSpinBox::up-arrow:off, QDoubleSpinBox::up-arrow:disabled, QDoubleSpinBox::up-arrow:off { border-image: url(:/light fusion/up_arrow_disabled.svg); } QDateTimeEdit::down-button, QSpinBox::down-button, QDoubleSpinBox::down-button { subcontrol-origin: content; subcontrol-position: right bottom; width: 1.6ex; border-width: 0.1ex; } QDateTimeEdit::down-arrow, QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { border-image: url(:/light fusion/down_arrow.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::down-arrow:hover, QDateTimeEdit::down-arrow:pressed, QSpinBox::down-arrow:hover, QSpinBox::down-arrow:pressed, QDoubleSpinBox::down-arrow:hover, QDoubleSpinBox::down-arrow:pressed { border-image: url(:/light fusion/down_arrow_hover.svg); width: 0.9ex; height: 0.6ex; } QDateTimeEdit::down-arrow:disabled, QSpinBox::down-arrow:disabled, QSpinBox::down-arrow:off, QDoubleSpinBox::down-arrow:disabled, QDoubleSpinBox::down-arrow:off { border-image: url(:/light fusion/down_arrow_disabled.svg); } QToolButton { background-color: transparent; border: none; margin: 0.3ex; padding: 0.5ex; } QToolButton:hover { background-color: transparent; border: 0.1ex solid #e91e63; border-radius: 0.2ex; margin: 0.3ex; padding: 0.5ex; } QToolBar { border: 0.1ex transparent #393838; background: 0.1ex solid #EFF0F1; font-weight: bold; } QToolBar::separator:horizontal { background: #E3E3E3; width: 1px; height: 5ex; } QTableView, QTreeView { border: 0.1ex solid #E3E3E3; gridline-color: #E3E3E3; background-color: #FCFCFC; } QTableView:hover, QTreeView:hover, QLineEdit:hover { border: 1px solid #e91e63; } QHeaderView { background-color: #EFF0F1; border: 0.1ex transparent; border-radius: 0px; margin: 0px; padding: 0px; } QHeaderView::section { background-color: #EFF0F1; color: #31363b; border: 0.1ex solid #E3E3E3; border-radius: 0px; text-align: center; } QCheckBox { spacing: 0.5ex; outline: none; color: #31363b; margin-bottom: 0.2ex; opacity: 200; } QCheckBox:disabled { color: #E3E3E3; } QGroupBox::indicator { margin-left: 0.2ex; } QCheckBox::indicator:unchecked, QCheckBox::indicator:unchecked:focus { border-image: url(:/light fusion/checkbox_unchecked_disabled.svg); } QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:pressed, QGroupBox::indicator:unchecked:hover, QGroupBox::indicator:unchecked:focus, QGroupBox::indicator:unchecked:pressed { border: none; border-image: url(:/light fusion/checkbox_unchecked.svg); } QCheckBox::indicator:checked { border-image: url(:/light fusion/checkbox_checked.svg); } QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:focus, QCheckBox::indicator:checked:pressed, QGroupBox::indicator:checked:hover, QGroupBox::indicator:checked:focus, QGroupBox::indicator:checked:pressed { border: none; border-image: url(:/light fusion/checkbox_checked.svg); } QCheckBox::indicator:indeterminate { border-image: url(:/light fusion/checkbox_indeterminate.svg); } QCheckBox::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed { border-image: url(:/light fusion/checkbox_indeterminate.svg); } QCheckBox::indicator:indeterminate:disabled { border-image: url(:/light fusion/checkbox_indeterminate_disabled.svg); } QCheckBox::indicator:checked:disabled, QGroupBox::indicator:checked:disabled { border-image: url(:/light fusion/checkbox_checked_disabled.svg); } QCheckBox::indicator:unchecked:disabled, QGroupBox::indicator:unchecked:disabled { border-image: url(:/light fusion/checkbox_unchecked_disabled.svg); } QProgressBar { background-color: #FCFCFC; border: 1px solid #E3E3E3; border-radius: 0.3ex; height: 2px; text-align: center; margin-top: 1ex; margin-bottom: 1ex; padding: 0px; } QProgressBar::chunk { background-color: #e91e63; border: 0px transparent; border-radius: 0.3ex; } persepolisdm-persepolis-867ee76/resources/locales/000077500000000000000000000000001464161131600224175ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/resources/locales/ui.qm000066400000000000000000000000201464161131600233630ustar00rootroot00000000000000 about_ui_tr About Persepolis Persepolis Download Manager <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Developers Translators License OK Special thanks to: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.3.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: Proxy IP: Port: Change Download Folder Download Folder: Cancel OK Link More Options Advanced Options Referrer: Header: Load cookies: User agent: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Size</b>: after_download_ui_tr Persepolis Download Manager Open File Open Download Folder OK Don't show this message again. <b>Download Completed!</b> <b>Save as</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Report Issue Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Queue Stopped! Persepolis is shutting down your system in 20 seconds Queue completed! Show main Window Please Wait... Ready... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Error... Persepolis can not connect to Aria2 Check your network & Restart Persepolis Restart Persepolis Reconnecting Aria2... Persepolis reconnected aria2 successfully Error: <b>Link</b>: <b>Downloaded</b>: <b>Transfer rate</b>: <b>Estimated time left</b>: <b>Connections</b>: <b>Status</b>: Download Stopped Error - Download Complete <b><center>This link has been added before! Are you sure you want to add it again?</center></b> Download Starts Download Scheduled Operation was not successful. Please resume the following category: Aria2 disconnected! Persepolis is trying to connect!be patient! Aria2 did not respond! Try again! Aria2 did not respond Try again Please stop the following category: Persepolis is trying to connect! be patient! Please try again. Minimize to system tray Not Found Operation was not successful! Operation was not successful! Please stop the following category first: Please stop the following download first: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <center>Do you want to continue?</center> Please stop the following category first: </b>" already exists! Send selected downloads to Send to Sort by <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b>Sorry! You can't remove default queue!</b> Some items didn't transferred successfully! Please stop download progress first. Hide options Show options Stop all downloads first! Moving is finished! Download is in progress by video finder! be patient! Stop the following download first: ffmpeg is not installed! Not enough free space in: muxing error an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Edit View Download Queue Video Finder Help Sort by Persepolis Download Manager Category File Name Status Size Downloaded Percentage Connections Link &File &Edit &View &Download &Queue &Help Show/Hide system tray icon Add New Download Link Resume Download Pause Download Stop Download Stop/Cancel Download Properties Progress Exit Clear all items in download list Create new download queue Remove this queue Start this queue Stop this queue Move currently selected items up by one row Move currently selected items down by one row Preferences About Report an issue Start Time End Time Download bottom of the list first Limit Speed Apply After download Shut Down V&ideo Finder <b>Video file status: </b> <b>Audio file status: </b> <b>Status: </b> <b>Muxing status: </b> downloaded Active Not Active Started Error Complete Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! Persepolis is trying to connect! be patient! Aria2 did not respond! Please try again. Try again! progress_ui_tr Persepolis Download Manager Status: Downloaded: Transfer rate: Estimated time left: Number of connections: Download Information After download Apply Shut Down Download Options Resume Pause Stop Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> Restart Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> setting_ui_tr Preferences <html><head/><body><p>Set number of tries if download failed.</p></body></html> Number of tries: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> Timeout (seconds): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> Number of connections: RPC port number: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> Change Aria2 default path Change Download Options Volume: Notifications Style: Color scheme: Icons: Notification type: Font: Size: Run Persepolis at startup Keep system awake! <html><head/><body><p>Format HH:MM</p></body></html> File Name Status Size Downloaded Percentage Connections Category Video Finder Options Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Defaults Cancel OK Press new keys Action Shortcut Shortcuts Quit Hide main window if close button clicked. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> Download requests from the browser will be executed immediately. <html><head/><body><p>When a download request is sent from the browser extension, the download will start without showing the Add Link window. </p></body></html> text_ui_tr Persepolis Download Manager Links Select All Deselect All Add to queue: Proxy IP: Port: Change Download Folder OK Cancel Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Audio file status: </b> <b>Muxing status: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Fetch Media List Select a format Please enter a valid video link Fetching Media Info... Video format: Audio format: Advanced options persepolisdm-persepolis-867ee76/resources/locales/ui_ar.qm000066400000000000000000000657011464161131600240660ustar00rootroot00000000000000b3b|^inpOJc=2D ~S cIQu 55u 5T!c#?p(A&. \,# nL? QH< 1^ *B<KFBUKFS_I=!T,/%#)쑀$]I3Xe4z^Qz07tbIIQI\R%m^ I"+WT^b+ a,T-0'1T4V1TS_. #_`i</t vh5D/Z>/>_X =`["9Za o6wa-B/*-B_X9N0J9N`<<=\NG(2M?$6]1xDZ+xDZA:a]K CZ(Ux`^)*B֣9S-13 *;Nu:6`,q+` +@b > $>G AN W:F ^9z `< g[ mp* }Ry }Q ~- B F0 U U8 UX O g(x ^K6 Jp "ZW7I _ _1 if* if `D 3 YpY =. ([V ,!)n Fq Uq*V `r`W gn+L nP> vq z  {Ǝ& w1 wA _ S[ 2 S [ 76 > 5< (: 2SS P[ e.; e.Df st= q m q e N D ( C3 W 98 X Wm  c Yy C/( \e30 q B B B8 BC B^M i",.d867Iv7I`_&xBxB]NJ F1$2 2@3 ]k6?r%$]>%]>@iTZE{}p fVU;[[=$qR$q?n?EN%."{Ric<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr-HD (J13J(HD3About Persepolis about_ui_tr'DE7H1HF Developers about_ui_tr 'D1.5)License about_ui_tr*EOK about_ui_tr,E/J1 'D*-EJD (J13J(HD3Persepolis Download Manager about_ui_tr4C1 .'5 D@ :Special thanks to: about_ui_tr'DE*1,EHF Translators about_ui_tr %6'A) 1'(7 *-EJDAdd Download Link addlink_ui_tr%6'A) %DI A&):Add to category:  addlink_ui_tr.J'1'* E*B/E)Advanced Options addlink_ui_tr %D:'!Cancel addlink_ui_tr2*9/JD EC'F *-EJD 'DEDA'*:Change Download Folder addlink_ui_tr *9/JD '3E 'DEDA:Change file name:  addlink_ui_tr<'C*4'A %9/'/'* 'D(1HC3J DDF8'EDetect System Proxy Settings addlink_ui_trE,D/ 'D*-EJD:Download Folder:  addlink_ui_tr1'(7 'D*-EJD:Download link:  addlink_ui_tr 'D1#3:Header:  addlink_ui_tr9FH'F 'D"J (J:IP:  addlink_ui_tr 'D1'(7Link addlink_ui_tr*-EJD 'DC9C'*:Load cookies:  addlink_ui_tr.J'1'* %6'AJ) More Options addlink_ui_tr*EOK addlink_ui_tr'DEFA0:Port: addlink_ui_tr'D(1HC3JProxy addlink_ui_tr"CDE) 31 'D(1HC3J:Proxy password:  addlink_ui_tr('3E E3*./E DD(1HC3J:Proxy username:  addlink_ui_tr'DE-JD: Referrer:  addlink_ui_tr&9EJD/EE+D 'DE3*./E: User agent:  addlink_ui_tr"<b>'3E 'DEDA</b>:File name: after_download_src_ui_tr<b>'D-,E</b>: Size: after_download_src_ui_tr*E OK after_download_ui_trA*- EDA Open File after_download_ui_tr*<b>'C*ED 'D*-EJD!</b>Download Completed!after_download_ui_tr<b>'D1'(7</b>: Link: after_download_ui_tr <b>-A8 ('3E</b>:Save as: after_download_ui_tr:D' *916 G0G 'D13'D) E1) #.1I.Don't show this message again.after_download_ui_tr A*- E,D/ 'D*-EJDOpen Download Folderafter_download_ui_tr,E/J1 'D*-EJD (J13J(HD3Persepolis Download Managerafter_download_ui_tr3,D (J13J(HD3Persepolis Loglog_window_ui_tr 'D%(D': 9F E4CD) Report Issuelog_window_ui_tr&</b>" EH,H/ E3(B'N!
" already exists!mainwindow_src_ui_tr<b><center>DB/ *E %6'A) G0' 'D1'(7 EF B(D! GD *1J/ %6'A*G E1) #.1I</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center> G0G 'D9EDJ) 3*-0A 'DEDA'* 'DE-ED) EF ,G'2C (4CD FG'&J! </center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center> G0G 'D9EDJ) 3*-0A CD 'D9F'51 'DE-ED) EF B'&E) 'D%F*8'1 <br> EF "CD 'D*-EJD'*" </center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr"<b>'D'*5'D'*</b>:Connections: mainwindow_src_ui_tr<b>'DE-ED</b>:Downloaded: mainwindow_src_ui_tr*<b>'DHB* 'DE*(BJ</b>:Estimated time left: mainwindow_src_ui_tr<b>'D1'(7</b>: Link: mainwindow_src_ui_trh<b>901'N! D' JECFC -0A B'&E) 'D%F*8'1 'D1&J3J)! </b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>'D-'D)</b>:Status: mainwindow_src_ui_tr$<b>E9/D 'DFBD</b>:Transfer rate: mainwindow_src_ui_trH<center> GD *1J/ 'DE*'(9) </center>)
Do you want to continue?
mainwindow_src_ui_trAria2 DE J3*,(Aria2 did not respondmainwindow_src_ui_trAria2 DE J3*,(!Aria2 did not respond!mainwindow_src_ui_trAria2 D' J3*,J(! CF 5(H1! (J13J(HD3 3J-'HD E1) #.1I (9/ +'FJ*JF!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr.'FB79 'D'*5'D (@ Aria2!Aria2 disconnected!mainwindow_src_ui_trT*#C/ EF 'D4(C) D/JC +E #9/ *4:JD (J13J(HD3'Check your network & Restart Persepolismainwindow_src_ui_tr'C*ED 'D*-EJDDownload Completemainwindow_src_ui_tr *E ,/HD) 'D*-EJDDownload Scheduledmainwindow_src_ui_tr(/! 'D*-EJDDownload Startsmainwindow_src_ui_tr*HBA 'D*-EJDDownload Stoppedmainwindow_src_ui_tr@'D*-EJD (('-+ 'DAJ/JH BJ/ 'D9ED!(Download is in progress by video finder!mainwindow_src_ui_tr .7# - Error - mainwindow_src_ui_tr.7# ...Error...mainwindow_src_ui_tr.7#:Error: mainwindow_src_ui_tr%.A'! 'D.J'1'* Hide optionsmainwindow_src_ui_tr**5:J1 %DI 9D() 'DF8'EMinimize to system traymainwindow_src_ui_tr 'DFBD Moving ismainwindow_src_ui_trDE J*E 'J,'/G Not Foundmainwindow_src_ui_tr.D' JH,/ E3'-) C'AJ) AJ:Not enough free space in:mainwindow_src_ui_tr*'D9EDJ) DE **E (F,'-!Operation was not successful!mainwindow_src_ui_trjDE **E 'D9EDJ) (F,'-! J1,I %JB'A 'DA&) 'D*'DJ) #HD'K:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr*DE **E 'D9EDJ) (F,'-.Operation was not successful.mainwindow_src_ui_tr(J13J(HD3 Persepolismainwindow_src_ui_trF(J13J(HD3 D' JECFG 'D%*5'D (@ Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr.(J13J(HD3 9DI H4C %:D'BPersepolis is shutting downmainwindow_src_ui_trFJ-'HD (J13J(HD3 'D'*5'D! CF 5(H1'K!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trFJ-'HD (J13J(HD3 'D'*5'D! CF 5(H1'K!+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr:(J13J(HD3 '*5D (@ Aria2 (F,'-)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr"J1,I 'D%F*8'1 ...Please Wait...mainwindow_src_ui_tr6J1,I '3*CE'D 'DA&) 'D*'DJ):&Please resume the following category: mainwindow_src_ui_tr2J1,I %JB'A 'D*-EJD #HD'N.$Please stop download progress first.mainwindow_src_ui_tr>J1,I %JB'A 'DA&) 'D*'DJ) #HD'N:*Please stop the following category first: mainwindow_src_ui_tr2J1,I %JB'A 'DA&) 'D*'DJ):$Please stop the following category: mainwindow_src_ui_tr@J1,I %JB'A 'D*-EJD 'D*'DJ #HD'K:*Please stop the following download first: mainwindow_src_ui_tr.J1,I 'DE-'HD) E1) #.1I.Please try again.mainwindow_src_ui_tr0*E %JB'A B'&E) 'D%F*8'1!Queue Stopped!mainwindow_src_ui_tr*'F*G* B'&E) 'D%F*8'1!Queue completed!mainwindow_src_ui_tr,'G2 ...Ready...mainwindow_src_ui_tr4%9'/) 'D'*5'D (@ Aria2 ...Reconnecting Aria2...mainwindow_src_ui_tr*%9'/) *4:JD (J13J(HD3Restart Persepolismainwindow_src_ui_tr4#13D 'D*-EJD'* 'DE-//) %DISend selected downloads tomainwindow_src_ui_tr#13D %DISend tomainwindow_src_ui_tr,%8G'1 'DF'A0) 'D1&J3J)Show main Windowmainwindow_src_ui_tr%8G'1 'D.J'1'* Show optionsmainwindow_src_ui_trJ(96 'D*-EJD'* DE J*E FBDG' (4CD 5-J-!+Some items didn't transferred successfully!mainwindow_src_ui_tr*1*J( 9DI -3(Sort bymainwindow_src_ui_tr2%JB'A CD 'D*-EJD'* #HD'N.Stop all downloads first!mainwindow_src_ui_tr6%JB'A 'D*F2JD 'D*'DJ #HD'K:#Stop the following download first: mainwindow_src_ui_tr-'HD E1) #.1I Try againmainwindow_src_ui_tr-'HD E1) #.1I! Try again!mainwindow_src_ui_trCF 5(H1'K! be patient!mainwindow_src_ui_tr(DE J*E *1CJ( ffmpeg!ffmpeg is not installed!mainwindow_src_ui_tr 'C*ED! finished!mainwindow_src_ui_tr.7# ('DE2, muxing errormainwindow_src_ui_tr,F8'EC AJ :6HF 20 +'FJ)your system in 20 secondsmainwindow_src_ui_tr*-ED downloadedmainwindow_ui_tr &*-EJD &Downloadmainwindow_ui_tr &*-1J1&Editmainwindow_ui_tr&EDA&Filemainwindow_ui_trE3'&9/)&Helpmainwindow_ui_tr.%6'A) %DI B'&E) 'F*&8'1&Queuemainwindow_ui_tr&916&Viewmainwindow_ui_tr.<b>-'D) EDA 'D5H*: </b>Audio file status: mainwindow_ui_tr&<b>-'D) 'DE2,: </b>Muxing status: mainwindow_ui_tr<b>'D-'D): </b>Status: mainwindow_ui_tr2<b>-'D) EDA 'DAJ/JH: </b>Video file status: mainwindow_ui_tr-HDAboutmainwindow_ui_trF47Activemainwindow_ui_tr*%6'A) 1'(7 *-EJD ,/J/Add New Download Linkmainwindow_ui_tr(9/ 'D*-EJDAfter downloadmainwindow_ui_tr *7(JBApplymainwindow_ui_tr 'DA&)Categorymainwindow_ui_tr>-0A CD 'D9F'51 EF B'&E) 'D*-EJD Clear all items in download listmainwindow_ui_tr 'C*EDCompletemainwindow_ui_tr'D'*5'D'* Connectionsmainwindow_ui_tr0%F4'! B'&E) 'F*8'1 ,/J/)Create new download queuemainwindow_ui_tr *-EJDDownloadmainwindow_ui_tr:'D*-EJD EF #3AD 'DB'&E) #HD'N"Download bottom of the list firstmainwindow_ui_tr 'DE-ED Downloadedmainwindow_ui_tr *-1J1Editmainwindow_ui_trHB* 'D'F*G'!End Timemainwindow_ui_tr.7#Errormainwindow_ui_tr.1H,Exitmainwindow_ui_trEDAFilemainwindow_ui_tr'3E 'DEDA File Namemainwindow_ui_tr E3'9/)Helpmainwindow_ui_tr$*-/J/ 319) 'D*-EJD Limit Speedmainwindow_ui_tr 'D1'(7Linkmainwindow_ui_tr`-1C 'D9F'51 'DE-//) E$.1'N DD#3AD (EB/'1 5A H'-/-Move currently selected items down by one rowmainwindow_ui_tr`-1C 'D9F'51 'DE-//) E$.1'N DD#9DI (EB/'1 5A H'-/+Move currently selected items up by one rowmainwindow_ui_tr:J1 F47 Not Activemainwindow_ui_tr(%JB'A 'D*-EJD E$B*'NPause Downloadmainwindow_ui_tr 'DF3() Percentagemainwindow_ui_tr,E/J1 'D*-EJD (J13J(HD3Persepolis Download Managermainwindow_ui_tr'D*A6JD'* Preferencesmainwindow_ui_tr 'D*B/EProgressmainwindow_ui_tr'D.5'&5 Propertiesmainwindow_ui_tr,%6'A) %DI B'&E) 'F*8'1Queuemainwindow_ui_tr,-0A B'&E) 'D'F*8'1 G0GRemove this queuemainwindow_ui_tr 'D%(D': 9F E4CD)Report an issuemainwindow_ui_tr'3*&F'A 'D*-EJDResume Downloadmainwindow_ui_tr<%8G'1/%.A'! #JBHF) 9D() 'DF8'EShow/Hide system tray iconmainwindow_ui_tr%JB'A 'D*4:JD Shut Downmainwindow_ui_tr 'D-,ESizemainwindow_ui_tr*1*J( 9DI -3(Sort bymainwindow_ui_trHB* 'D(/! Start Timemainwindow_ui_tr.%(/# B'&E) 'D%F*8'1 G0GStart this queuemainwindow_ui_tr(/#Startedmainwindow_ui_tr 'D-'D)Statusmainwindow_ui_tr%JB'A 'D*-EJD Stop Downloadmainwindow_ui_tr0%JB'A B'&E) 'D'F*8'1 G0GStop this queuemainwindow_ui_tr&%JB'A/%D:'! 'D*-EJDStop/Cancel Downloadmainwindow_ui_trED*B7 'D&AJ/JH V&ideo Findermainwindow_ui_trED*B7 'DAJ/JH Video Findermainwindow_ui_tr916Viewmainwindow_ui_tr Aria2 D' J3*,J(!Aria2 did not respond!progress_src_ui_tr.'FB79 'D'*5'D (@ Aria2!Aria2 disconnected!progress_src_ui_trN(J13J(HD3 J-'HD 'D'*5'D! J1,I 'D'F*8'1!,Persepolis is trying to connect! be patient!progress_src_ui_tr.J1,I 'DE-'HD) E1) #.1I.Please try again.progress_src_ui_tr-'HD E1) #.1I! Try again!progress_src_ui_tr(9/ 'D*-EJDAfter downloadprogress_ui_tr *7(JBApplyprogress_ui_trE9DHE'* 'D*-EJDDownload Informationprogress_ui_tr.J'1'* 'D*-EJDDownload Optionsprogress_ui_tr'DE-ED: Downloaded:progress_ui_tr'DHB* 'DE*(BJ:Estimated time left:progress_ui_tr9// 'D'*5'D'*:Number of connections: progress_ui_tr%JB'A E$B*Pauseprogress_ui_tr,E/J1 'D*-EJD (J13J(HD3Persepolis Download Managerprogress_ui_tr'3*&F'AResumeprogress_ui_tr%JB'A 'D*4:JD Shut Downprogress_ui_tr'D-'D):Status: progress_ui_tr %JB'AStopprogress_ui_trE9/D 'DFBD:Transfer rate: progress_ui_tr<b><center> J1,I %9'/) *4:JD (J13J(HD3! </center></b><br><center> (96 'D*:JJ1'* *CHF A9'D) (9/ %9'/) *4:JD (J13J(HD3 </center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>DB/ *E '3*./'E G0' 'D'.*5'1 E3(B'! '3*./E '.*5'1 ".1!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr,%9'/) *4:JD (J13J(HD3!Restart Persepolis!setting_src_ui_tr<html><head/><body><p> -// 1BE 'DEFA0 D.'/E 'D@ JSON-RPC/XML-RPC DD*F5* DG. 'D#1B'E 'DEECF): 1024 - 65535 'D'A*1'6J: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trp<html><head/><body><p> 'D5J:) / /:3 3 </p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p> -// 9// 'DE-'HD'* %0' A4D 'D*-EJD. </p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p> '6(7 'DHB* (JF 'DE-'HD'* ('D+H'FJ. E/J1 'D*-EJD'* 3HA J-'HD 'D*-EJD 9F/ '3*,'() 'D.'/E ('D1E2 503. </p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p> '6(7 HB* 'D'F*G'! ('D+H'FJ. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>B/ D' *9ED G0G 'D.'5J) AJ F8'E 'D*4:JD 'D.'5 (C.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p> '3*./'E '*5'D'* E*9//) JECF #F J3'9/ AJ 2J'/) 319) 'D*-EJD. </p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr 'D-/+Action setting_ui_tr %D:'!Cancel setting_ui_tr 'DA&)Category setting_ui_tr *:JJ1Change setting_ui_tr@*:JJ1 'DE3'1 'D'A*1'6J DD@ Aria2Change Aria2 default path setting_ui_trE.77 'D#DH'F:Color scheme:  setting_ui_tr'D'*5'D'* Connections setting_ui_tr'D'A*1'6J'*Defaults setting_ui_tr.J'1'* 'D*-EJDDownload Options setting_ui_tr 'DE-ED Downloaded setting_ui_tr'3E 'DEDA File Name setting_ui_tr 'D.7:Font:  setting_ui_tr`%.A'! 'DF'A0) 'D1&J3J) 9F/ 'DFB1 9DI 21 'D%:D'B.)Hide main window if close button clicked. setting_ui_tr'D#JBHF'*:Icons:  setting_ui_tr&'(B'! 'D,G'2 EF*(G!Keep system awake! setting_ui_tr#C(1 9// 1H'(7 EECF 'D*B'7G': <br/><small> (%0' #13D 'DE*5A- 1H'(7 E*9//) AJ FA3 'DHB*) </small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_trFH9 'D*F(JG'*:Notification type:  setting_ui_tr'D*F(JG'* Notifications setting_ui_tr9// 'D'*5'D'*:Number of connections:  setting_ui_tr$9// E1'* 'DE-'HD):Number of tries:  setting_ui_tr*EOK setting_ui_tr 'DF3() Percentage setting_ui_tr'D*A6JD'* Preferences setting_ui_tr"'6:7 EA'*J- ,/J/)Press new keys setting_ui_tr.1H,Quit setting_ui_tr"1BE EFA0 'D@ RPC:RPC port number:  setting_ui_tr<*4:JD (J13J(HD3 9F/ (/! 'DF8'ERun Persepolis at startup setting_ui_tr'D'.*5'1Shortcut setting_ui_tr'D'.*5'1'* Shortcuts setting_ui_tr 'D-,ESize setting_ui_tr 'D-,E:Size:  setting_ui_tr 'D-'D)Status setting_ui_tr 'DFE7:Style:  setting_ui_tr0HB* 'D'F*G'! (('D+H'FJ):Timeout (seconds):  setting_ui_tr(.J'1'* ED*B7 'DAJ/JHVideo Finder Options setting_ui_tr 'D-,E:Volume:  setting_ui_tr2%6'A) %DI B'&E) 'D'F*8'1:Add to queue:  text_ui_tr %D:'!Cancel text_ui_tr$*:JJ1 E,D/ 'D*-EJDChange Download Folder text_ui_tr"%D:'! '.*J'1 'DCD Deselect All text_ui_tr9FH'F 'D"J (J:IP: text_ui_tr'D1H'(7Links text_ui_tr*EOK text_ui_tr,E/J1 'D*-EJD (J13J(HD3Persepolis Download Manager text_ui_tr'DEFA0:Port: text_ui_tr'D(1HC3JProxy text_ui_tr'.*J'1 'DCD Select All text_ui_tr.<b>-'D) EDA 'D5H*: </b>Audio file status: video_finder_progress_ui_tr&<b>-'D) 'DE2,: </b>Muxing status: video_finder_progress_ui_tr2<b>-'D) EDA 'DAJ/JH: </b>Video file status: video_finder_progress_ui_tr"'D.J'1'* 'DE*B/E)Advanced optionsytaddlink_src_ui_tr5J:) 'D5H*: Audio format:ytaddlink_src_ui_tr&*-/J+ B'&E) 'DH3'&7Fetch Media Listytaddlink_src_ui_tr2*-/J+ E9DHE'* 'DH3'&7 ...Fetching Media Info...ytaddlink_src_ui_tr4J1,I %/.'D 1'(7 AJ/JH 5-J-Please enter a valid video linkytaddlink_src_ui_tr'.*1 5J:)Select a formatytaddlink_src_ui_trED*B7 'DAJ/JH Video Finderytaddlink_src_ui_tr5J:) 'DAJ/JH: Video format:ytaddlink_src_ui_tr$ * persepolisdm-persepolis-867ee76/resources/locales/ui_ar.ts000066400000000000000000002473371464161131600241060ustar00rootroot00000000000000 about_ui_tr About Persepolis حول بيرسيبولس Persepolis Download Manager مدير التحميل بيرسيبولس <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers المطورون Translators المترجمون License الرخصة OK تم Special thanks to: شكر خاص لـ : AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.2.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: إضافة إلى فئة: Proxy البروكسي IP: عنوان الآي بي: Port: المنفذ: Change Download Folder تعديل مكان تحميل الملفات: Download Folder: مجلد التحميل: Cancel إلغاء OK تم Link الرابط More Options خيارات إضافية Advanced Options خيارات متقدمة Referrer: المحيل: Header: الرأس: Load cookies: تحميل الكعكات: User agent: عميل/ممثل المستخدم: Add Download Link إضافة رابط تحميل Download link: رابط التحميل: Change file name: تعديل اسم الملف: Detect System Proxy Settings اكتشاف إعدادات البروكسي للنظام Proxy password: كلمة سر البروكسي: Proxy username: اسم مستخدم للبروكسي: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>اسم الملف</b>: <b>Size</b>: <b>الحجم</b>: after_download_ui_tr Persepolis Download Manager مدير التحميل بيرسيبولس Open File فتح ملف Open Download Folder فتح مجلد التحميل OK تم Don't show this message again. لا تعرض هذه الرسالة مرة أخرى. <b>Download Completed!</b> <b>اكتمل التحميل!</b> <b>Save as</b>: <b>حفظ باسم</b>: <b>Link</b>: <b>الرابط</b>: log_window_ui_tr Persepolis Log سجل بيرسيبولس Report Issue الإبلاغ عن مشكلة Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis بيرسيبولس Queue Stopped! تم إيقاف قائمة الإنتظار! Persepolis is shutting down بيرسيبولس على وشك إغلاق your system in 20 seconds نظامك في غضون 20 ثانية Queue completed! انتهت قائمة الإنتظار! Show main Window إظهار النافذة الرئيسية Please Wait... يرجى الإنتظار ... Ready... جاهز ... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 لا يستجيب! كن صبور! بيرسيبولس سيحاول مرة أخرى بعد ثانيتين! Error... خطأ ... Persepolis can not connect to Aria2 بيرسيبولس لا يمكنه الإتصال بـ Aria2 Check your network & Restart Persepolis تأكد من الشبكة لديك ثم أعد تشغيل بيرسيبولس Restart Persepolis إعادة تشغيل بيرسيبولس Reconnecting Aria2... إعادة الاتصال بـ Aria2 ... Persepolis reconnected aria2 successfully بيرسيبولس اتصل بـ Aria2 بنجاح Error: خطأ: <b>Link</b>: <b>الرابط</b>: <b>Downloaded</b>: <b>المحمل</b>: <b>Transfer rate</b>: <b>معدل النقل</b>: <b>Estimated time left</b>: <b>الوقت المتبقي</b>: <b>Connections</b>: <b>الاتصالات</b>: <b>Status</b>: <b>الحالة</b>: Download Stopped توقف التحميل Error - خطأ - Download Complete اكتمل التحميل <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>لقد تم إضافة هذا الرابط من قبل! هل تريد إضافته مرة أخرى؟</center></b> Download Starts بدء التحميل Download Scheduled تم جدولة التحميل Operation was not successful. لم تتم العملية بنجاح. Please resume the following category: يرجى استكمال الفئة التالية: Aria2 disconnected! انقطع الاتصال بـ Aria2! Persepolis is trying to connect!be patient! يحاول بيرسيبولس الاتصال! كن صبوراً! Aria2 did not respond! Aria2 لم يستجب! Try again! حاول مرة أخرى! Aria2 did not respond Aria2 لم يستجب Try again حاول مرة أخرى Please stop the following category: يرجى إيقاف الفئة التالية: Persepolis is trying to connect! be patient! يحاول بيرسيبولس الاتصال! كن صبوراً! Please try again. يرجى المحاولة مرة أخرى. Minimize to system tray تصغير إلى علبة النظام Not Found لم يتم ايجاده Operation was not successful! العملية لم تتم بنجاح! Operation was not successful! Please stop the following category first: لم تتم العملية بنجاح! يرجى إيقاف الفئة التالية أولاً: Please stop the following download first: يرجى إيقاف التحميل التالي أولاً: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center> هذه العملية ستحذف الملفات المحملة من جهازك بشكل نهائي! </center></b> <center>Do you want to continue?</center> <center> هل تريد المتابعة؟ </center> Please stop the following category first: يرجى إيقاف الفئة التالية أولاَ: </b>" already exists! </b>" موجود مسبقاَ! Send selected downloads to أرسل التحميلات المحددة إلى Send to أرسل إلى Sort by ترتيب على حسب <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center> هذه العملية ستحذف كل العناصر المحملة من قائمة الإنتظار <br> من "كل التحميلات" </center></b> <b>Sorry! You can't remove default queue!</b> <b>عذراَ! لا يمكنك حذف قائمة الإنتظار الرئيسية! </b> Some items didn't transferred successfully! بعض التحميلات لم يتم نقلها بشكل صحيح! Please stop download progress first. يرجى إيقاف التحميل أولاَ. Hide options إخفاء الخيارات Show options إظهار الخيارات Stop all downloads first! إيقاف كل التحميلات أولاَ. Moving is النقل finished! اكتمل! Download is in progress by video finder! التحميل بباحث الفيديو قيد العمل! be patient! كن صبوراً! Stop the following download first: إيقاف التنزيل التالي أولاً: ffmpeg is not installed! لم يتم تركيب ffmpeg! Not enough free space in: لا يوجد مساحة كافية في: muxing error خطأ بالمزج an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File ملف Edit تحرير View عرض Download تحميل Queue إضافة إلى قائمة انتظار Video Finder ملتقط الفيديو Help مساعدة Sort by ترتيب على حسب Persepolis Download Manager مدير التحميل بيرسيبولس Category الفئة File Name اسم الملف Status الحالة Size الحجم Downloaded المحمل Percentage النسبة Connections الاتصالات Link الرابط &File &ملف &Edit &تحرير &View &عرض &Download &تحميل &Queue إضافة إلى قائمة انت&ظار &Help مسا&عدة Show/Hide system tray icon إظهار/إخفاء أيقونة علبة النظام Add New Download Link إضافة رابط تحميل جديد Resume Download استئناف التحميل Pause Download إيقاف التحميل مؤقتاَ Stop Download إيقاف التحميل Stop/Cancel Download إيقاف/إلغاء التحميل Properties الخصائص Progress التقدم Exit خروج Clear all items in download list حذف كل العناصر من قائمة التحميل Create new download queue إنشاء قائمة انتظار جديدة Remove this queue حذف قائمة الانتظار هذه Start this queue إبدأ قائمة الإنتظار هذه Stop this queue إيقاف قائمة الانتظار هذه Move currently selected items up by one row حرك العناصر المحددة مؤخراَ للأعلى بمقدار صف واحد Move currently selected items down by one row حرك العناصر المحددة مؤخراَ للأسفل بمقدار صف واحد Preferences التفضيلات About حول Report an issue الإبلاغ عن مشكلة Start Time وقت البدء End Time وقت الانتهاء Download bottom of the list first التحميل من أسفل القائمة أولاَ Limit Speed تحديد سرعة التحميل Apply تطبيق After download بعد التحميل Shut Down إيقاف التشغيل V&ideo Finder ملتقط ال&فيديو <b>Video file status: </b> <b>حالة ملف الفيديو: </b> <b>Audio file status: </b> <b>حالة ملف الصوت: </b> <b>Status: </b> <b>الحالة: </b> <b>Muxing status: </b> <b>حالة المزج: </b> downloaded تحمل Active نشط Not Active غير نشط Started بدأ Error خطأ Complete اكتمل Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! انقطع الاتصال بـ Aria2! Persepolis is trying to connect! be patient! بيرسيبولس يحاول الاتصال! يرجى الانتظار! Aria2 did not respond! Aria2 لا يستجيب! Please try again. يرجى المحاولة مرة أخرى. Try again! حاول مرة أخرى! progress_ui_tr Persepolis Download Manager مدير التحميل بيرسيبولس Status: الحالة: Downloaded: المحمل: Transfer rate: معدل النقل: Estimated time left: الوقت المتبقي: Number of connections: عدد الاتصالات: Download Information معلومات التحميل After download بعد التحميل Apply تطبيق Shut Down إيقاف التشغيل Download Options خيارات التحميل Resume استئناف Pause إيقاف مؤقت Stop إيقاف Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center> يرجى إعادة تشغيل بيرسيبولس! </center></b><br><center> بعض التغييرات تكون فعالة بعد إعادة تشغيل بيرسيبولس </center> Restart Persepolis! إعادة تشغيل بيرسيبولس! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>لقد تم استخدام هذا الاختصار مسبقا! استخدم اختصار آخر!</center></b> setting_ui_tr Preferences التفضيلات <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p> حدد عدد المحاولات إذا فشل التحميل. </p></body></html> Number of tries: عدد مرات المحاولة: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p> اضبط الوقت بين المحاولات بالثواني. مدير التحميلات سوف يحاول التحميل عند استجابة الخادم بالرمز 503. </p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p> اضبط وقت الانتهاء بالثواني. </p></body></html> Timeout (seconds): وقت الانتهاء (بالثواني): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p> استخدام اتصالات متعددة يمكن أن يساعد في زيادة سرعة التحميل. </p></body></html> Number of connections: عدد الاتصالات: RPC port number: رقم منفذ الـ RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> حدد رقم المنفذ لخادم الـ JSON-RPC/XML-RPC للتنصت له. الأرقام الممكنة: 1024 - 65535 الافتراضي: 6801 </p></body></html> Change Aria2 default path تغيير المسار الافتراضي للـ Aria2 Change تغيير Download Options خيارات التحميل Volume: الحجم: Notifications التنبيهات Style: النمط: Color scheme: مخطط الألوان: Icons: الأيقونات: Notification type: نوع التنبيهات: Font: الخط: Size: الحجم: Run Persepolis at startup تشغيل بيرسيبولس عند بدء النظام Keep system awake! ابقاء الجهاز منتبه! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p> الصيغة د د:س س </p></body></html> File Name اسم الملف Status الحالة Size الحجم Downloaded المحمل Percentage النسبة Connections الاتصالات Category الفئة Video Finder Options خيارات ملتقط الفيديو Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> أكبر عدد روابط ممكن التقاطها: <br/><small> (إذا أرسل المتصفح روابط متعددة في نفس الوقت) </small> Defaults الافتراضيات Cancel إلغاء OK تم Press new keys اضغط مفاتيح جديدة Action الحدث Shortcut الاختصار Shortcuts الاختصارات Quit خروج Hide main window if close button clicked. إخفاء النافذة الرئيسية عند النقر على زر الإغلاق. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>قد لا تعمل هذه الخاصية في نظام التشغيل الخاص بك.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> text_ui_tr Persepolis Download Manager مدير التحميل بيرسيبولس Links الروابط Select All اختيار الكل Deselect All إلغاء اختيار الكل Add to queue: إضافة إلى قائمة الانتظار: Proxy البروكسي IP: عنوان الآي بي: Port: المنفذ: Change Download Folder تغيير مجلد التحميل OK تم Cancel إلغاء Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>حالة ملف الفيديو: </b> <b>Audio file status: </b> <b>حالة ملف الصوت: </b> <b>Muxing status: </b> <b>حالة المزج: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder ملتقط الفيديو Fetch Media List تحديث قائمة الوسائط Select a format اختر صيغة Please enter a valid video link يرجى إدخال رابط فيديو صحيح Fetching Media Info... تحديث معلومات الوسائط ... Video format: صيغة الفيديو: Audio format: صيغة الصوت: Advanced options الخيارات المتقدمة persepolisdm-persepolis-867ee76/resources/locales/ui_de.qm000066400000000000000000000705621464161131600240550ustar00rootroot000000000000002Y>eX A``9Zf o9xwg-B1-Be69N29Nf<=b2G(5M?$]1xDZ."xDZEzg9K C`I(Z)*G^֣=k016 *?u>\6`[q0.w +@ > $BM AN W= ^=( `@| ga[ mp-B }Q{ ~/ F\ F0 U U<+ U^. O g* ^O O< "ZW: _ . _3 if,z if@4 s> `IL K Yp_ A" (a( ,!+ FqY Uq, `r`\ gn- nU v z  {Ǝ) w4: wE d XQ 5 X } 7: B 5@ (> 2SW e.? e.I stA q q ec Nb * G ]B < ^h \  cv _? C/*7 \e64 q B B N B']>EiT`{"}p m VZu[[ '$q $qC?IS.$i{Wiiz<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trber PersepolisAbout Persepolis about_ui_trEntwickler Developers about_ui_tr LizenzLicense about_ui_trOKOK about_ui_tr6Persepolis Download ManagerPersepolis Download Manager about_ui_tr&Speziellen Dank an:Special thanks to: about_ui_trbersetzer Translators about_ui_tr0Zu Kategorie hinzufgen:Add to category:  addlink_ui_tr2Fortgeschrittene OptionenAdvanced Options addlink_ui_trAbbruchCancel addlink_ui_tr0Download Ordner wechselnChange Download Folder addlink_ui_tr Download Ordner:Download Folder:  addlink_ui_trHeader: Header:  addlink_ui_trIP: IP:  addlink_ui_trLinkLink addlink_ui_trCookies laden:Load cookies:  addlink_ui_trMehr Optionen More Options addlink_ui_trOKOK addlink_ui_tr Port:Port: addlink_ui_tr ProxyProxy addlink_ui_trReferrer:  Referrer:  addlink_ui_trUser agent:  User agent:  addlink_ui_tr$<b>Dateiname</b>: File name: after_download_src_ui_tr&<b>Dateigre</b>:  Size: after_download_src_ui_trOK OK after_download_ui_trDatei ffnen Open File after_download_ui_tr0<b>Download beendet!</b>Download Completed!after_download_ui_tr<b>Link</b>:  Link: after_download_ui_tr,<b>Speichern als</b>: Save as: after_download_ui_trHDiese Nachricht nicht mehr anzeigen.Don't show this message again.after_download_ui_tr,Download Ordner ffnenOpen Download Folderafter_download_ui_tr6Persepolis Download ManagerPersepolis Download Managerafter_download_ui_trPersepolis LogPersepolis Loglog_window_ui_tr"Problem berichten Report Issuelog_window_ui_tr0</b>" existiert bereits!
" already exists!mainwindow_src_ui_tr<b><center>Dieser Link wurde bereits hinzugefgt! Wollen Sie Ihn erneut hinzufgen?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Dieser Vorgang lscht heruntergeladene Dateien von Ihrer Festplatte<br>PERMANENT!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Dieser Vorgang entfernt alle Downloads in dieser Warteliste<br>von der "Alle Downloads" Liste!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr*<b>Verbindungen</b>: Connections: mainwindow_src_ui_tr2<b>Hertuntergeladen</b>: Downloaded: mainwindow_src_ui_trH<b>Geschtzte bertragungszeit</b>: Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trrLeider kann die Standardwarteliste nicht gelscht werden!-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Status</b>: Status: mainwindow_src_ui_tr2<b>bertragungsrate</b>: Transfer rate: mainwindow_src_ui_trN<center>Wollen sie fortfahren?</center>)
Do you want to continue?
mainwindow_src_ui_tr0Aria2 hat nicht reagiertAria2 did not respondmainwindow_src_ui_tr2Aria2 hat nicht reagiert!Aria2 did not respond!mainwindow_src_ui_trAria2 hat nicht reagiert! Haben Sie Geduld. Persepolis versucht es erneut in 2 Sekunden!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr&Aria2 unterbrochen!Aria2 disconnected!mainwindow_src_ui_trpberprfen Sie Ihr Netzwerk & Starten Sie Persepolis neu'Check your network & Restart Persepolismainwindow_src_ui_tr,Download abgeschlossenDownload Completemainwindow_src_ui_tr Download geplantDownload Scheduledmainwindow_src_ui_tr Download startetDownload Startsmainwindow_src_ui_tr"Download gestopptDownload Stoppedmainwindow_src_ui_tr^Der Download wird per Videofinder durchgefhrt!(Download is in progress by video finder!mainwindow_src_ui_trFehler -Error - mainwindow_src_ui_trFehler...Error...mainwindow_src_ui_trFehler:Error: mainwindow_src_ui_tr$Optionen verbergen Hide optionsmainwindow_src_ui_tr<In die Systemleiste minimierenMinimize to system traymainwindow_src_ui_trBewegung ist Moving ismainwindow_src_ui_trNicht gefunden Not Foundmainwindow_src_ui_tr>Nicht genug freier Speicher in:Not enough free space in:mainwindow_src_ui_trDDer Vorgang war nicht erfolgreich!Operation was not successful!mainwindow_src_ui_trDer Vorgang war nicht erfolgreich! Bitte die folgende Kategorie zuerst stoppen:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_trDDer Vorgang war nicht erfolgreich.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr\Persepolis kann sich nicht mit Aria2 verbinden#Persepolis can not connect to Aria2mainwindow_src_ui_trHPersepolis fhrt ihr System herunterPersepolis is shutting downmainwindow_src_ui_trnPersepolis versucht zu verbinden! Wir bitten um Geduld.,Persepolis is trying to connect! be patient!mainwindow_src_ui_trnPersepolis versucht zu verbinden! Wir bitten um Geduld.+Persepolis is trying to connect!be patient!mainwindow_src_ui_trfPersepolis hat sich erfolgreich mit Aria2 verbunden)Persepolis reconnected aria2 successfullymainwindow_src_ui_trBitte warten...Please Wait...mainwindow_src_ui_trRBitte mit folgender Kategorie fortfahren:&Please resume the following category: mainwindow_src_ui_trJBitte zuerst die bertragung stoppen.$Please stop download progress first.mainwindow_src_ui_trXBitte die folgende Kategorie zuerst beenden:*Please stop the following category first: mainwindow_src_ui_trJBitte die folgende Kategorie stoppen:$Please stop the following category: mainwindow_src_ui_trXBitte den folgenden Download zuerst stoppen:*Please stop the following download first: mainwindow_src_ui_tr.Bitte erneut versuchen.Please try again.mainwindow_src_ui_tr(Warteliste gestoppt!Queue Stopped!mainwindow_src_ui_tr2Warteliste abgeschlossen!Queue completed!mainwindow_src_ui_trBereit...Ready...mainwindow_src_ui_tr8Wiederverbinden mit Aria2...Reconnecting Aria2...mainwindow_src_ui_tr.Neustart von PersepolisRestart Persepolismainwindow_src_ui_tr<Sende ausgewhlten Download anSend selected downloads tomainwindow_src_ui_trSende anSend tomainwindow_src_ui_tr*Hauptfenster anzeigenShow main Windowmainwindow_src_ui_tr"Optionen anzeigen Show optionsmainwindow_src_ui_trvManche Dateien konnten nicht erfolgreich bertragen werden!+Some items didn't transferred successfully!mainwindow_src_ui_trSortiere nachSort bymainwindow_src_ui_tr<Zuerst alle Downloads stoppen!Stop all downloads first!mainwindow_src_ui_trBStoppe zuerst folgenden Download:#Stop the following download first: mainwindow_src_ui_tr Erneut versuchen Try againmainwindow_src_ui_tr"Erneut versuchen! Try again!mainwindow_src_ui_tr"Haben Sie Geduld! be patient!mainwindow_src_ui_tr:ffmpeg ist nicht installiert!ffmpeg is not installed!mainwindow_src_ui_trFertig! finished!mainwindow_src_ui_trMuxing-Fehler muxing errormainwindow_src_ui_trin 20 Sekundenyour system in 20 secondsmainwindow_src_ui_trheruntergeladen downloadedmainwindow_ui_tr&Herunterladen &Downloadmainwindow_ui_tr&Bearbeiten&Editmainwindow_ui_tr &Datei&Filemainwindow_ui_tr &Hilfe&Helpmainwindow_ui_tr&Warteliste&Queuemainwindow_ui_tr&Anzeigen&Viewmainwindow_ui_tr$Audiodatei Status:Audio file status: mainwindow_ui_trMuxing Status:Muxing status: mainwindow_ui_trStatus:Status: mainwindow_ui_tr,Status der Videodatei:Video file status: mainwindow_ui_trberAboutmainwindow_ui_tr AktivActivemainwindow_ui_tr<Neuen Download Link hinzufgenAdd New Download Linkmainwindow_ui_tr"Nach dem DownloadAfter downloadmainwindow_ui_trAnwendenApplymainwindow_ui_trKategorieCategorymainwindow_ui_trVAlle Eintrge in der Download Liste lschen Clear all items in download listmainwindow_ui_trFertiggestelltCompletemainwindow_ui_trVerbindungen Connectionsmainwindow_ui_trDNeue Download Warteliste erstellenCreate new download queuemainwindow_ui_trHerunterladenDownloadmainwindow_ui_trJEnde der Liste zuerst herunterladen"Download bottom of the list firstmainwindow_ui_trHeruntergeladen Downloadedmainwindow_ui_trBearbeitenEditmainwindow_ui_trAbschlusszeitEnd Timemainwindow_ui_tr FehlerErrormainwindow_ui_trSchlieenExitmainwindow_ui_tr DateiFilemainwindow_ui_trDatei Name File Namemainwindow_ui_tr HilfeHelpmainwindow_ui_tr2Geschwindigkeit begrenzen Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_trrAusgewhlten Eintrag um eine Zeile nach unten verschieben-Move currently selected items down by one rowmainwindow_ui_trpAusgewhlten Eintrag um eine Zeile nach oben verschieben+Move currently selected items up by one rowmainwindow_ui_trNicht Aktiv Not Activemainwindow_ui_tr$Download pausierenPause Downloadmainwindow_ui_trProzent Percentagemainwindow_ui_tr6Persepolis Download ManagerPersepolis Download Managermainwindow_ui_trEinstellungen Preferencesmainwindow_ui_trFortschrittProgressmainwindow_ui_trEigenschaften Propertiesmainwindow_ui_trWartelisteQueuemainwindow_ui_tr4Diese Warteliste entfernenRemove this queuemainwindow_ui_tr*Ein Problem berichtenReport an issuemainwindow_ui_tr&Download fortfahrenResume Downloadmainwindow_ui_trZSymbol in der Systemleiste anzeigen/verbergenShow/Hide system tray iconmainwindow_ui_trHerunterfahren Shut Downmainwindow_ui_trDateigreSizemainwindow_ui_trSortieren nachSort bymainwindow_ui_trStartzeit Start Timemainwindow_ui_tr0Diese Warteliste startenStart this queuemainwindow_ui_trGestartetStartedmainwindow_ui_tr StatusStatusmainwindow_ui_tr Download stoppen Stop Downloadmainwindow_ui_tr0Diese Warteliste stoppenStop this queuemainwindow_ui_tr4Download stoppen/abbrechenStop/Cancel Downloadmainwindow_ui_trV&ideo Suche V&ideo Findermainwindow_ui_trVideo Suche Video Findermainwindow_ui_trAnzeigenViewmainwindow_ui_tr2Aria2 hat nicht reagiert!Aria2 did not respond!progress_src_ui_tr&Aria2 unterbrochen!Aria2 disconnected!progress_src_ui_trnPersepolis versucht zu verbinden! Wir bitten um Geduld.,Persepolis is trying to connect! be patient!progress_src_ui_tr.Bitte erneut versuchen.Please try again.progress_src_ui_tr$Nochmal versuchen! Try again!progress_src_ui_tr"Nach dem DownloadAfter downloadprogress_ui_trAndwendenApplyprogress_ui_tr(Download InformationDownload Informationprogress_ui_tr"Download OptionenDownload Optionsprogress_ui_tr Heruntergeladen: Downloaded:progress_ui_tr8Geschtzte bertragungszeit:Estimated time left:progress_ui_trVerbindungen:Number of connections: progress_ui_tr PausePauseprogress_ui_tr6Persepolis Download ManagerPersepolis Download Managerprogress_ui_trFortfahrenResumeprogress_ui_trHerunterfahren Shut Downprogress_ui_trStatus: Status: progress_ui_trStopStopprogress_ui_tr8bertragungsgeschwindigkeit:Transfer rate: progress_ui_tr&<b><center>Persepolis bitte neu starten!</center></b><br><center>Manche Einstellungen werden erst nach einem Neustart von Persepolis aktiv</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_trDieser Shortcut wurde bereits verwendet. - Bitte verwende einen anderen._
This shortcut has been used before! Use another one!
setting_src_ui_tr.Persepolis neu starten!Restart Persepolis!setting_src_ui_tr<html><head/><body><p> Gib eine Port Nummer eines JSON-RPC/XML-RPC Servers an. Mgliche Werte: 1024 - 65535 Standard: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_tr Zeitformat HH:MM4

Format HH:MM

 setting_ui_tr<html><head/><body><p> Anzahl der Versuche wenn ein Download fehlschlgt.</p></body></html>O

Set number of tries if download failed.

 setting_ui_trh<html><head/><body><p>Anzahl der Sekunden zwischen den Versuchen. Der Download Manager versucht den Download erneut wenn er eine 503 Nachricht vom Server erhlt.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Zeitberschreitung in Sekunden. </p></body></html>@

Set timeout in seconds.

 setting_ui_trDiese Funktion funktioniert mglicherweise nicht in Ihrem Betriebssystem.[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Mehrfache gleichzeitige Verbindungen knnen einen Download beschleunigen. </p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr AktionAction setting_ui_trAbbruchCancel setting_ui_trKategorieCategory setting_ui_tr ndernChange setting_ui_tr8Standardpfad zu Aria2 ndernChange Aria2 default path setting_ui_trFarbschema:Color scheme:  setting_ui_trVerbindungen Connections setting_ui_trStandardDefaults setting_ui_tr"Download OptionenDownload Options setting_ui_trHeruntergeladen Downloaded setting_ui_trDateiname File Name setting_ui_trSchriftart:Font:  setting_ui_trVerstecke das Hauptfenster wenn der Schlieen-Knopf geklickt wurde.)Hide main window if close button clicked. setting_ui_trSymbole:Icons:  setting_ui_trFRuhezustand des Systems verhindern!Keep system awake! setting_ui_trMaximale Anzahl der zu findenden Video Links:<br/><small>(Falls der Browser mehrere Video Links sendet)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr*Benachrichtigungsart:Notification type:  setting_ui_tr$Benachrichtigungen Notifications setting_ui_tr0Anzahl der Verbindungen:Number of connections:  setting_ui_tr(Anzahl der Versuche:Number of tries:  setting_ui_trOKOK setting_ui_trProzent Percentage setting_ui_trEinstellungen Preferences setting_ui_tr,Drcke eine neue TastePress new keys setting_ui_trBeendenQuit setting_ui_tr RPC Port Nummer:RPC port number:  setting_ui_trBPersepolis beim Systemstart ladenRun Persepolis at startup setting_ui_trShortcutShortcut setting_ui_trShortcuts Shortcuts setting_ui_trDateigreSize setting_ui_tr Gre:Size:  setting_ui_tr StatusStatus setting_ui_tr Stil:Style:  setting_ui_tr<Zeitberschreitung (Sekunden):Timeout (seconds):  setting_ui_tr0Optionen zur Video SucheVideo Finder Options setting_ui_trLautstrke:Volume:  setting_ui_tr2Zu Warteliste hinzufgen:Add to queue:  text_ui_trAbbruchCancel text_ui_tr,Download Ordner ndernChange Download Folder text_ui_trAlle abwhlen Deselect All text_ui_trIP:IP: text_ui_tr LinksLinks text_ui_trOKOK text_ui_tr6Persepolis Download ManagerPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProxyProxy text_ui_trAlle auswhlen Select All text_ui_tr,Status der Audiodatei:Audio file status: video_finder_progress_ui_trMuxing Status:Muxing status: video_finder_progress_ui_tr,Status der Videodatei:Video file status: video_finder_progress_ui_tr0Erweiterte EinstellungenAdvanced optionsytaddlink_src_ui_trAudioformat: Audio format:ytaddlink_src_ui_tr&Medienliste abrufenFetch Media Listytaddlink_src_ui_tr*Medieninfo abrufen...Fetching Media Info...ytaddlink_src_ui_trDBitte gltigen Video Link eingebenPlease enter a valid video linkytaddlink_src_ui_tr Format auswhlenSelect a formatytaddlink_src_ui_trVideo Sucher Video Finderytaddlink_src_ui_trVideoformat: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_de.ts000066400000000000000000002373031464161131600240640ustar00rootroot00000000000000 about_ui_tr About Persepolis Über Persepolis Persepolis Download Manager Persepolis Download Manager <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Entwickler Translators Übersetzer License Lizenz OK OK Special thanks to: Speziellen Dank an: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Zu Kategorie hinzufügen: Proxy Proxy IP: IP: Port: Port: Change Download Folder Download Ordner wechseln Download Folder: Download Ordner: Cancel Abbruch OK OK Link Link More Options Mehr Optionen Advanced Options Fortgeschrittene Optionen Referrer: Referrer: Header: Header: Load cookies: Cookies laden: User agent: User agent: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Dateiname</b>: <b>Size</b>: <b>Dateigröße</b>: after_download_ui_tr Persepolis Download Manager Persepolis Download Manager Open File Datei öffnen Open Download Folder Download Ordner öffnen OK OK Don't show this message again. Diese Nachricht nicht mehr anzeigen. <b>Download Completed!</b> <b>Download beendet!</b> <b>Save as</b>: <b>Speichern als</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Persepolis Log Report Issue Problem berichten Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Warteliste gestoppt! Persepolis is shutting down Persepolis fährt ihr System herunter your system in 20 seconds in 20 Sekunden Queue completed! Warteliste abgeschlossen! Show main Window Hauptfenster anzeigen Please Wait... Bitte warten... Ready... Bereit... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 hat nicht reagiert! Haben Sie Geduld. Persepolis versucht es erneut in 2 Sekunden! Error... Fehler... Persepolis can not connect to Aria2 Persepolis kann sich nicht mit Aria2 verbinden Check your network & Restart Persepolis Überprüfen Sie Ihr Netzwerk & Starten Sie Persepolis neu Restart Persepolis Neustart von Persepolis Reconnecting Aria2... Wiederverbinden mit Aria2... Persepolis reconnected aria2 successfully Persepolis hat sich erfolgreich mit Aria2 verbunden Error: Fehler: <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Hertuntergeladen</b>: <b>Transfer rate</b>: <b>Übertragungsrate</b>: <b>Estimated time left</b>: <b>Geschätzte Übertragungszeit</b>: <b>Connections</b>: <b>Verbindungen</b>: <b>Status</b>: <b>Status</b>: Download Stopped Download gestoppt Error - Fehler - Download Complete Download abgeschlossen <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Dieser Link wurde bereits hinzugefügt! Wollen Sie Ihn erneut hinzufügen?</center></b> Download Starts Download startet Download Scheduled Download geplant Operation was not successful. Der Vorgang war nicht erfolgreich. Please resume the following category: Bitte mit folgender Kategorie fortfahren: Aria2 disconnected! Aria2 unterbrochen! Persepolis is trying to connect!be patient! Persepolis versucht zu verbinden! Wir bitten um Geduld. Aria2 did not respond! Aria2 hat nicht reagiert! Try again! Erneut versuchen! Aria2 did not respond Aria2 hat nicht reagiert Try again Erneut versuchen Please stop the following category: Bitte die folgende Kategorie stoppen: Persepolis is trying to connect! be patient! Persepolis versucht zu verbinden! Wir bitten um Geduld. Please try again. Bitte erneut versuchen. Minimize to system tray In die Systemleiste minimieren Not Found Nicht gefunden Operation was not successful! Der Vorgang war nicht erfolgreich! Operation was not successful! Please stop the following category first: Der Vorgang war nicht erfolgreich! Bitte die folgende Kategorie zuerst stoppen: Please stop the following download first: Bitte den folgenden Download zuerst stoppen: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Dieser Vorgang löscht heruntergeladene Dateien von Ihrer Festplatte<br>PERMANENT!</center></b> <center>Do you want to continue?</center> <center>Wollen sie fortfahren?</center> Please stop the following category first: Bitte die folgende Kategorie zuerst beenden: </b>" already exists! </b>" existiert bereits! Send selected downloads to Sende ausgewählten Download an Send to Sende an Sort by Sortiere nach <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Dieser Vorgang entfernt alle Downloads in dieser Warteliste<br>von der "Alle Downloads" Liste!</center></b> <b>Sorry! You can't remove default queue!</b> Leider kann die Standardwarteliste nicht gelöscht werden! Some items didn't transferred successfully! Manche Dateien konnten nicht erfolgreich übertragen werden! Please stop download progress first. Bitte zuerst die Übertragung stoppen. Hide options Optionen verbergen Show options Optionen anzeigen Stop all downloads first! Zuerst alle Downloads stoppen! Moving is Bewegung ist finished! Fertig! Download is in progress by video finder! Der Download wird per Videofinder durchgeführt! be patient! Haben Sie Geduld! Stop the following download first: Stoppe zuerst folgenden Download: ffmpeg is not installed! ffmpeg ist nicht installiert! Not enough free space in: Nicht genug freier Speicher in: muxing error Muxing-Fehler an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Datei Edit Bearbeiten View Anzeigen Download Herunterladen Queue Warteliste Video Finder Video Suche Help Hilfe Sort by Sortieren nach Persepolis Download Manager Persepolis Download Manager Category Kategorie File Name Datei Name Status Status Size Dateigröße Downloaded Heruntergeladen Percentage Prozent Connections Verbindungen Link Link &File &Datei &Edit &Bearbeiten &View &Anzeigen &Download &Herunterladen &Queue &Warteliste &Help &Hilfe Show/Hide system tray icon Symbol in der Systemleiste anzeigen/verbergen Add New Download Link Neuen Download Link hinzufügen Resume Download Download fortfahren Pause Download Download pausieren Stop Download Download stoppen Stop/Cancel Download Download stoppen/abbrechen Properties Eigenschaften Progress Fortschritt Exit Schließen Clear all items in download list Alle Einträge in der Download Liste löschen Create new download queue Neue Download Warteliste erstellen Remove this queue Diese Warteliste entfernen Start this queue Diese Warteliste starten Stop this queue Diese Warteliste stoppen Move currently selected items up by one row Ausgewählten Eintrag um eine Zeile nach oben verschieben Move currently selected items down by one row Ausgewählten Eintrag um eine Zeile nach unten verschieben Preferences Einstellungen About Über Report an issue Ein Problem berichten Start Time Startzeit End Time Abschlusszeit Download bottom of the list first Ende der Liste zuerst herunterladen Limit Speed Geschwindigkeit begrenzen Apply Anwenden After download Nach dem Download Shut Down Herunterfahren V&ideo Finder V&ideo Suche <b>Video file status: </b> Status der Videodatei: <b>Audio file status: </b> Audiodatei Status: <b>Status: </b> Status: <b>Muxing status: </b> Muxing Status: downloaded heruntergeladen Active Aktiv Not Active Nicht Aktiv Started Gestartet Error Fehler Complete Fertiggestellt Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 unterbrochen! Persepolis is trying to connect! be patient! Persepolis versucht zu verbinden! Wir bitten um Geduld. Aria2 did not respond! Aria2 hat nicht reagiert! Please try again. Bitte erneut versuchen. Try again! Nochmal versuchen! progress_ui_tr Persepolis Download Manager Persepolis Download Manager Status: Status: Downloaded: Heruntergeladen: Transfer rate: Übertragungsgeschwindigkeit: Estimated time left: Geschätzte Übertragungszeit: Number of connections: Verbindungen: Download Information Download Information After download Nach dem Download Apply Andwenden Shut Down Herunterfahren Download Options Download Optionen Resume Fortfahren Pause Pause Stop Stop Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Persepolis bitte neu starten!</center></b><br><center>Manche Einstellungen werden erst nach einem Neustart von Persepolis aktiv</center> Restart Persepolis! Persepolis neu starten! <b><center>This shortcut has been used before! Use another one!</center></b> Dieser Shortcut wurde bereits verwendet. -  Bitte verwende einen anderen. setting_ui_tr Preferences Einstellungen <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p> Anzahl der Versuche wenn ein Download fehlschlägt.</p></body></html> Number of tries: Anzahl der Versuche: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Anzahl der Sekunden zwischen den Versuchen. Der Download Manager versucht den Download erneut wenn er eine 503 Nachricht vom Server erhält.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Zeitüberschreitung in Sekunden. </p></body></html> Timeout (seconds): Zeitüberschreitung (Sekunden): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Mehrfache gleichzeitige Verbindungen können einen Download beschleunigen. </p></body></html> Number of connections: Anzahl der Verbindungen: RPC port number: RPC Port Nummer: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Gib eine Port Nummer eines JSON-RPC/XML-RPC Servers an. Mögliche Werte: 1024 - 65535 Standard: 6801 </p></body></html> Change Aria2 default path Standardpfad zu Aria2 ändern Change Ändern Download Options Download Optionen Volume: Lautstärke: Notifications Benachrichtigungen Style: Stil: Color scheme: Farbschema: Icons: Symbole: Notification type: Benachrichtigungsart: Font: Schriftart: Size: Größe: Run Persepolis at startup Persepolis beim Systemstart laden Keep system awake! Ruhezustand des Systems verhindern! <html><head/><body><p>Format HH:MM</p></body></html> Zeitformat HH:MM File Name Dateiname Status Status Size Dateigröße Downloaded Heruntergeladen Percentage Prozent Connections Verbindungen Category Kategorie Video Finder Options Optionen zur Video Suche Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Maximale Anzahl der zu findenden Video Links:<br/><small>(Falls der Browser mehrere Video Links sendet)</small> Defaults Standard Cancel Abbruch OK OK Press new keys Drücke eine neue Taste Action Aktion Shortcut Shortcut Shortcuts Shortcuts Quit Beenden Hide main window if close button clicked. Verstecke das Hauptfenster wenn der Schließen-Knopf geklickt wurde. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> Diese Funktion funktioniert möglicherweise nicht in Ihrem Betriebssystem. Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis Download Manager Links Links Select All Alle auswählen Deselect All Alle abwählen Add to queue: Zu Warteliste hinzufügen: Proxy Proxy IP: IP: Port: Port: Change Download Folder Download Ordner ändern OK OK Cancel Abbruch Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> Status der Videodatei: <b>Audio file status: </b> Status der Audiodatei: <b>Muxing status: </b> Muxing Status: <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Video Sucher Fetch Media List Medienliste abrufen Select a format Format auswählen Please enter a valid video link Bitte gültigen Video Link eingeben Fetching Media Info... Medieninfo abrufen... Video format: Videoformat: Audio format: Audioformat: Advanced options Erweiterte Einstellungen persepolisdm-persepolis-867ee76/resources/locales/ui_es_ES.qm000066400000000000000000000713211464161131600244550ustar00rootroot000000000000001>fxX AaX9Zg o9vwh-B1Z-Be9N29Ng<=bG(5M?$]1xDZ-~xDZE<hKK pC`([2)*G4֣=Q016 s*>u>"6`q- +@ > $A AN W= ^= `@4 ga mp, }Qw ~/M F* F0 U U< U^ O g) ^O N "ZW: _ _3 if+ if? s> `I Yp` @ (a ,!+ Fq Uq, `r`] gn-& nUx v z  {Ǝ(] w4. wE e X 5 Xx 9 79 Bl 5@ (> 2Sa e.?o e.H stAK q A qU e- N *< G ] < ^ ]k  cP _ C/)q \e64 q B B  B

'G]>DiT`{}p  VZ[|[ $q$qCD?IS.${X"ij<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr(Acerca de PersepolisAbout Persepolis about_ui_tr Desarrolladores: Developers about_ui_trLicenciaLicense about_ui_trAceptarOK about_ui_tr<Gestor de descargas PersepolisPersepolis Download Manager about_ui_tr:Agradecimientos especiales a:Special thanks to: about_ui_trTraductores Translators about_ui_tr.Aadir a una categora:Add to category:  addlink_ui_tr$Opciones avanzadasAdvanced Options addlink_ui_trCancelarCancel addlink_ui_tr>Cambiar la carpeta de descargasChange Download Folder addlink_ui_tr*Carpeta de descargas:Download Folder:  addlink_ui_trEncabezado:Header:  addlink_ui_trIP: IP:  addlink_ui_tr EnlaceLink addlink_ui_trCargar cookies:Load cookies:  addlink_ui_trMs opciones More Options addlink_ui_trAceptarOK addlink_ui_trPuerto:Port: addlink_ui_tr ProxyProxy addlink_ui_trReferencia: Referrer:  addlink_ui_tr$Agente de usuario: User agent:  addlink_ui_tr6<b>Nombre del archivo</b>: File name: after_download_src_ui_tr<b>Tamao</b>:  Size: after_download_src_ui_tr Aceptar  OK after_download_ui_tr Abrir un archivo Open File after_download_ui_tr8<b>Descarga completada!</b>Download Completed!after_download_ui_tr<b>Enlace</b>:  Link: after_download_ui_tr*<b>Guardar como</b>: Save as: after_download_ui_trFNo mostrar este mensaje nuevamente.Don't show this message again.after_download_ui_tr@Abrir la carpeta de de descargasOpen Download Folderafter_download_ui_tr<Gestor de descargas PersepolisPersepolis Download Managerafter_download_ui_tr,Registro de PersepolisPersepolis Loglog_window_ui_tr.Informar de un problema Report Issuelog_window_ui_tr"</b>" ya existe!" already exists!mainwindow_src_ui_tr<b><center>Este enlace ha sido aadido anteriormente. Seguro de que quiere aadirlo de nuevo?</center></b>r

This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Esta operacin eliminar los archivos descargados <br>PERMANENTEMENTE!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Esta operacin borrar todos los elementos en esta lista<br>de la lista Todas las descargas.</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr&<b>Conexiones</b>: Connections: mainwindow_src_ui_tr"<b>Descargado</b>Downloaded: mainwindow_src_ui_trB<b>Tiempo restante estimado</b>: Estimated time left: mainwindow_src_ui_tr<b>Enlace</b>:  Link: mainwindow_src_ui_trZ<b>No puede borrar la lista por defecto!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Estado</b>: Status: mainwindow_src_ui_tr:<b>Tasa de transferencia</b>:Transfer rate: mainwindow_src_ui_tr$Quiere continuar?)
Do you want to continue?
mainwindow_src_ui_tr,Aria2 no ha respondidoAria2 did not respondmainwindow_src_ui_tr0Aria2 no ha respondido!Aria2 did not respond!mainwindow_src_ui_trAria2 no ha respondido. Persepolis lo intentar de nuevo en 2 segundos!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr4Aria2 se ha desconectado!Aria2 disconnected!mainwindow_src_ui_trFRevise la red y reinicie Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr"Descarga completaDownload Completemainwindow_src_ui_tr&Descarga programadaDownload Scheduledmainwindow_src_ui_tr"Descarga iniciadaDownload Startsmainwindow_src_ui_tr"Descarga detenidaDownload Stoppedmainwindow_src_ui_trlDescarga en progreso a travs del buscador de vdeos!(Download is in progress by video finder!mainwindow_src_ui_trError - Error - mainwindow_src_ui_trError...Error...mainwindow_src_ui_trError: Error: mainwindow_src_ui_tr(Ocultar las opciones Hide optionsmainwindow_src_ui_trHMinimizar en el rea de notificacinMinimize to system traymainwindow_src_ui_trMoviendo Moving ismainwindow_src_ui_tr&No se ha encontrado Not Foundmainwindow_src_ui_trPNo hay suficiente espacio disponible en:Not enough free space in:mainwindow_src_ui_trBLa operacin no ha tenido xito!Operation was not successful!mainwindow_src_ui_trLa operacin no ha tenido xito! Detenga la categora siguiente primero:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr6La operacin no tuvo xito.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trLPersepolis no puede conectarse a Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr,Persepolis va a cerrarPersepolis is shutting downmainwindow_src_ui_trlPersepolis est tratando de conectarse. Sea paciente!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trlPersepolis est tratando de conectarse. Sea paciente!+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr\Persepolis ha reconectado con xito con Aria2 )Persepolis reconnected aria2 successfullymainwindow_src_ui_trEspere...Please Wait...mainwindow_src_ui_tr>Reanude la categora siguiente:&Please resume the following category: mainwindow_src_ui_trVDetenga el progreso de la descarga primero.$Please stop download progress first.mainwindow_src_ui_trNDetenga la operacin siguiente primero:*Please stop the following category first: mainwindow_src_ui_tr>Detenga la categora siguiente:$Please stop the following category: mainwindow_src_ui_trNDetenga la categora siguiente primero:*Please stop the following download first: mainwindow_src_ui_tr(Vuelva a intentarlo.Please try again.mainwindow_src_ui_tr Lista detenida!Queue Stopped!mainwindow_src_ui_tr$Lista completada!Queue completed!mainwindow_src_ui_trListo...Ready...mainwindow_src_ui_tr2Reconectando con Aria2...Reconnecting Aria2...mainwindow_src_ui_tr(Reiniciar PersepolisRestart Persepolismainwindow_src_ui_trHEnviar las descargas seleccionadas aSend selected downloads tomainwindow_src_ui_trEnviar aSend tomainwindow_src_ui_tr8Mostrar la ventana principalShow main Windowmainwindow_src_ui_tr(Mostrar las opciones Show optionsmainwindow_src_ui_trnAlgunos elementos no se han transferido correctamente!+Some items didn't transferred successfully!mainwindow_src_ui_trOrdenar porSort bymainwindow_src_ui_trJDetenga todas las descargas primero!Stop all downloads first!mainwindow_src_ui_tr<Detener primero esta descarga:#Stop the following download first: mainwindow_src_ui_tr&Vuelva a intentarlo Try againmainwindow_src_ui_tr*Vuelva a intentarlo! Try again!mainwindow_src_ui_trSea paciente! be patient!mainwindow_src_ui_tr4Ffmpeg no est instalado!ffmpeg is not installed!mainwindow_src_ui_trfinalizado! finished!mainwindow_src_ui_tr.Error de multiplexacin muxing errormainwindow_src_ui_tr2su sistema en 20 segundosyour system in 20 secondsmainwindow_src_ui_tr descargado downloadedmainwindow_ui_tr&Descarga &Downloadmainwindow_ui_tr&Edicin&Editmainwindow_ui_tr&Archivo&Filemainwindow_ui_tr &Ayuda&Helpmainwindow_ui_tr &Lista&Queuemainwindow_ui_tr&Ver&Viewmainwindow_ui_trH<b>Estado del archivo de audio: </b>Audio file status: mainwindow_ui_trH<b>Estado de la multiplexacin: </b>Muxing status: mainwindow_ui_tr<b>Estado: </b>Status: mainwindow_ui_trH<b>Estado del archivo de vdeo: </b>Video file status: mainwindow_ui_trAcerca deAboutmainwindow_ui_tr ActivoActivemainwindow_ui_trDAadir un nuevo enlace de descargaAdd New Download Linkmainwindow_ui_tr,Despus de la descargaAfter downloadmainwindow_ui_trAplicarApplymainwindow_ui_trCategoraCategorymainwindow_ui_trfBorrar todos los elementos de la lista de descargas Clear all items in download listmainwindow_ui_trCompletadaCompletemainwindow_ui_trConexiones Connectionsmainwindow_ui_trDCrear una nueva lista de descargasCreate new download queuemainwindow_ui_trDescargaDownloadmainwindow_ui_trLDescargar primero el final de la lista"Download bottom of the list firstmainwindow_ui_trDescargado Downloadedmainwindow_ui_tr EditarEditmainwindow_ui_tr(Hora de finalizacinEnd Timemainwindow_ui_tr ErrorErrormainwindow_ui_tr SalirExitmainwindow_ui_trArchivoFilemainwindow_ui_tr$Nombre del archivo File Namemainwindow_ui_tr AyudaHelpmainwindow_ui_tr Velocidad lmite Limit Speedmainwindow_ui_tr EnlaceLinkmainwindow_ui_trlBajar una fila los elementos seleccionados actualmente-Move currently selected items down by one rowmainwindow_ui_trnSubir una fila los elementos seleccionados actualmente +Move currently selected items up by one rowmainwindow_ui_trInactivo Not Activemainwindow_ui_tr$Pausar la descargaPause Downloadmainwindow_ui_trPorcentaje Percentagemainwindow_ui_tr<Gestor de descargas PersepolisPersepolis Download Managermainwindow_ui_trPreferencias Preferencesmainwindow_ui_trProgresoProgressmainwindow_ui_trPropiedades Propertiesmainwindow_ui_tr ListaQueuemainwindow_ui_tr"Borrar esta listaRemove this queuemainwindow_ui_tr.Informar de un problemaReport an issuemainwindow_ui_tr(Reanudar la descargaResume Downloadmainwindow_ui_trPMostrar/ocultar el icono de notificacinShow/Hide system tray iconmainwindow_ui_tr Apagar el equipo Shut Downmainwindow_ui_tr TamaoSizemainwindow_ui_trOrdenar porSort bymainwindow_ui_trHora de inicio Start Timemainwindow_ui_tr$Iniciar esta listaStart this queuemainwindow_ui_trIniciadaStartedmainwindow_ui_tr EstadoStatusmainwindow_ui_tr&Detener la descarga Stop Downloadmainwindow_ui_tr$Detener esta listaStop this queuemainwindow_ui_tr8Detener/cancelar la descargaStop/Cancel Downloadmainwindow_ui_tr$Buscador de vdeos V&ideo Findermainwindow_ui_tr"Buscador de vdeo Video Findermainwindow_ui_trVerViewmainwindow_ui_tr0Aria2 no ha respondido!Aria2 did not respond!progress_src_ui_tr2Aria2 est desconectado!Aria2 disconnected!progress_src_ui_trlPersepolis est tratando de conectarse. Sea paciente!,Persepolis is trying to connect! be patient!progress_src_ui_tr(Vuelva a intentarlo.Please try again.progress_src_ui_tr*Vuelva a intentarlo! Try again!progress_src_ui_tr,Despus de la descargaAfter downloadprogress_ui_trAplicarApplyprogress_ui_tr4Informacin de la descargaDownload Informationprogress_ui_tr(Opciones de descargaDownload Optionsprogress_ui_trDescargado: Downloaded:progress_ui_tr2Tiempo restante estimado:Estimated time left:progress_ui_tr*Nmero de conexiones:Number of connections: progress_ui_tr PausarPauseprogress_ui_tr<Gestor de descargas PersepolisPersepolis Download Managerprogress_ui_trReanudarResumeprogress_ui_tr Apagar Shut Downprogress_ui_trEstado:Status: progress_ui_trDetenerStopprogress_ui_tr,Tasa de transferencia:Transfer rate: progress_ui_tr<b><center>Reinicie Persepolis!</center></b><br><center>Algunos ajustes solo se activarn despus de reiniciar Persepolis.</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_trt<center><b>Este atajo ya se ha usado antes. Use otro!</b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr*Reinicie Persepolis!Restart Persepolis!setting_src_ui_trL<html><head/><body><p> Especifique el nmero del puerto para buscar un servidor JSON-RPC/XML-RPC. Valores posibles: 1024 - 65535. Por defecto: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trj<html><head/><body><p>Formato HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Configura el nmero de intentos si la descarga falla.</p></body></html>O

Set number of tries if download failed.

 setting_ui_trh<html><head/><body><p>Configura el tiempo de espera en segundos entre intentos. Persepolis reintentar la descarga si el servidor HTTP devuelve una respuesta 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Configura el tiempo de espera en segundos. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Es posible que esta caracterstica no funcione en su sistema operativo.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>El uso de conexiones mltiples puede acelerar la descarga.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr AccinAction setting_ui_trCancelarCancel setting_ui_trCategoraCategory setting_ui_trCambiarChange setting_ui_trHCambiar la ruta por defecto de Aria2Change Aria2 default path setting_ui_tr&Esquema de colores:Color scheme:  setting_ui_trConexiones Connections setting_ui_tr&Valores por defectoDefaults setting_ui_tr(Opciones de descargaDownload Options setting_ui_trDescargado Downloaded setting_ui_tr$Nombre del archivo File Name setting_ui_trTipografa:Font:  setting_ui_trOcultar la ventana principal al hacer clic en el botn de cerrar)Hide main window if close button clicked. setting_ui_trIconos:Icons:  setting_ui_tr8Mantenga el sistema activo!Keep system awake! setting_ui_trNmero mximo de enlaces que capturar:<br/><small>(Si el navegador enva varios enlaces de vdeo a la vez)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr*Tipo de notificacin:Notification type:  setting_ui_trNotificaciones Notifications setting_ui_tr*Nmero de conexiones:Number of connections:  setting_ui_tr&Nmero de intentos:Number of tries:  setting_ui_trAceptarOK setting_ui_trPorcentaje Percentage setting_ui_trPreferencias Preferences setting_ui_tr(Pulsar teclas nuevasPress new keys setting_ui_tr SalirQuit setting_ui_tr,Nmero del puerto RPC:RPC port number:  setting_ui_tr:Ejecutar Persepolis al inicioRun Persepolis at startup setting_ui_tr AtajoShortcut setting_ui_tr Atajos Shortcuts setting_ui_tr TamaoSize setting_ui_trTamao:Size:  setting_ui_tr EstadoStatus setting_ui_trEstilo:Style:  setting_ui_tr8Tiempo de espera (segundos):Timeout (seconds):  setting_ui_trBOpciones de la bsqueda de vdeosVideo Finder Options setting_ui_trVolumen:Volume:  setting_ui_tr$Aadir a la lista:Add to queue:  text_ui_trCancelarCancel text_ui_tr>Cambiar la carpeta de descargasChange Download Folder text_ui_tr$Deseleccionar todo Deselect All text_ui_trDireccin IP:IP: text_ui_trEnlacesLinks text_ui_trAceptarOK text_ui_tr<Gestor de descargas PersepolisPersepolis Download Manager text_ui_trPuerto:Port: text_ui_tr ProxyProxy text_ui_tr Seleccionar todo Select All text_ui_trH<b>Estado del archivo de audio: </b>Audio file status: video_finder_progress_ui_trH<b>Estado de la multiplexacin: </b>Muxing status: video_finder_progress_ui_trH<b>Estado del archivo de vdeo: </b>Video file status: video_finder_progress_ui_tr$Opciones avanzadasAdvanced optionsytaddlink_src_ui_tr"Formato de audio: Audio format:ytaddlink_src_ui_tr4Obtener la lista de mediosFetch Media Listytaddlink_src_ui_trHObteniendo informacin multimedia...Fetching Media Info...ytaddlink_src_ui_trBEscriba un enlace de vdeo vlidoPlease enter a valid video linkytaddlink_src_ui_tr*Seleccione un formatoSelect a formatytaddlink_src_ui_tr$Buscador de vdeos Video Finderytaddlink_src_ui_tr"Formato de vdeo: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_es_ES.ts000066400000000000000000002401241464161131600244650ustar00rootroot00000000000000 about_ui_tr About Persepolis Acerca de Persepolis Persepolis Download Manager Gestor de descargas Persepolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Desarrolladores: Translators Traductores License Licencia OK Aceptar Special thanks to: Agradecimientos especiales a: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Añadir a una categoría: Proxy Proxy IP: IP: Port: Puerto: Change Download Folder Cambiar la carpeta de descargas Download Folder: Carpeta de descargas: Cancel Cancelar OK Aceptar Link Enlace More Options Más opciones Advanced Options Opciones avanzadas Referrer: Referencia: Header: Encabezado: Load cookies: Cargar cookies: User agent: Agente de usuario: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Nombre del archivo</b>: <b>Size</b>: <b>Tamaño</b>: after_download_ui_tr Persepolis Download Manager Gestor de descargas Persepolis Open File Abrir un archivo Open Download Folder Abrir la carpeta de de descargas OK Aceptar Don't show this message again. No mostrar este mensaje nuevamente. <b>Download Completed!</b> <b>¡Descarga completada!</b> <b>Save as</b>: <b>Guardar como</b>: <b>Link</b>: <b>Enlace</b>: log_window_ui_tr Persepolis Log Registro de Persepolis Report Issue Informar de un problema Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! ¡Lista detenida! Persepolis is shutting down Persepolis va a cerrar your system in 20 seconds su sistema en 20 segundos Queue completed! ¡Lista completada! Show main Window Mostrar la ventana principal Please Wait... Espere... Ready... Listo... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 no ha respondido. ¡Persepolis lo intentará de nuevo en 2 segundos! Error... Error... Persepolis can not connect to Aria2 Persepolis no puede conectarse a Aria2 Check your network & Restart Persepolis Revise la red y reinicie Persepolis Restart Persepolis Reiniciar Persepolis Reconnecting Aria2... Reconectando con Aria2... Persepolis reconnected aria2 successfully Persepolis ha reconectado con éxito con Aria2 Error: Error: <b>Link</b>: <b>Enlace</b>: <b>Downloaded</b>: <b>Descargado</b> <b>Transfer rate</b>: <b>Tasa de transferencia</b>: <b>Estimated time left</b>: <b>Tiempo restante estimado</b>: <b>Connections</b>: <b>Conexiones</b>: <b>Status</b>: <b>Estado</b>: Download Stopped Descarga detenida Error - Error - Download Complete Descarga completa <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Este enlace ha sido añadido anteriormente. ¿Seguro de que quiere añadirlo de nuevo?</center></b> Download Starts Descarga iniciada Download Scheduled Descarga programada Operation was not successful. La operación no tuvo éxito. Please resume the following category: Reanude la categoría siguiente: Aria2 disconnected! ¡Aria2 se ha desconectado! Persepolis is trying to connect!be patient! Persepolis está tratando de conectarse. ¡Sea paciente! Aria2 did not respond! ¡Aria2 no ha respondido! Try again! ¡Vuelva a intentarlo! Aria2 did not respond Aria2 no ha respondido Try again Vuelva a intentarlo Please stop the following category: Detenga la categoría siguiente: Persepolis is trying to connect! be patient! Persepolis está tratando de conectarse. ¡Sea paciente! Please try again. Vuelva a intentarlo. Minimize to system tray Minimizar en el área de notificación Not Found No se ha encontrado Operation was not successful! ¡La operación no ha tenido éxito! Operation was not successful! Please stop the following category first: ¡La operación no ha tenido éxito! Detenga la categoría siguiente primero: Please stop the following download first: Detenga la categoría siguiente primero: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>¡Esta operación eliminará los archivos descargados <br>PERMANENTEMENTE!</center></b> <center>Do you want to continue?</center> ¿Quiere continuar? Please stop the following category first: Detenga la operación siguiente primero: </b>" already exists! </b>" ¡ya existe! Send selected downloads to Enviar las descargas seleccionadas a Send to Enviar a Sort by Ordenar por <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Esta operación borrará todos los elementos en esta lista<br>de la lista «Todas las descargas».</center></b> <b>Sorry! You can't remove default queue!</b> <b>¡No puede borrar la lista por defecto!</b> Some items didn't transferred successfully! ¡Algunos elementos no se han transferido correctamente! Please stop download progress first. Detenga el progreso de la descarga primero. Hide options Ocultar las opciones Show options Mostrar las opciones Stop all downloads first! ¡Detenga todas las descargas primero! Moving is Moviendo finished! ¡finalizado! Download is in progress by video finder! ¡Descarga en progreso a través del buscador de vídeos! be patient! ¡Sea paciente! Stop the following download first: Detener primero esta descarga: ffmpeg is not installed! ¡Ffmpeg no está instalado! Not enough free space in: No hay suficiente espacio disponible en: muxing error Error de multiplexación an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Archivo Edit Editar View Ver Download Descarga Queue Lista Video Finder Buscador de vídeo Help Ayuda Sort by Ordenar por Persepolis Download Manager Gestor de descargas Persepolis Category Categoría File Name Nombre del archivo Status Estado Size Tamaño Downloaded Descargado Percentage Porcentaje Connections Conexiones Link Enlace &File &Archivo &Edit &Edición &View &Ver &Download &Descarga &Queue &Lista &Help &Ayuda Show/Hide system tray icon Mostrar/ocultar el icono de notificación Add New Download Link Añadir un nuevo enlace de descarga Resume Download Reanudar la descarga Pause Download Pausar la descarga Stop Download Detener la descarga Stop/Cancel Download Detener/cancelar la descarga Properties Propiedades Progress Progreso Exit Salir Clear all items in download list Borrar todos los elementos de la lista de descargas Create new download queue Crear una nueva lista de descargas Remove this queue Borrar esta lista Start this queue Iniciar esta lista Stop this queue Detener esta lista Move currently selected items up by one row Subir una fila los elementos seleccionados actualmente Move currently selected items down by one row Bajar una fila los elementos seleccionados actualmente Preferences Preferencias About Acerca de Report an issue Informar de un problema Start Time Hora de inicio End Time Hora de finalización Download bottom of the list first Descargar primero el final de la lista Limit Speed Velocidad límite Apply Aplicar After download Después de la descarga Shut Down Apagar el equipo V&ideo Finder Buscador de vídeos <b>Video file status: </b> <b>Estado del archivo de vídeo: </b> <b>Audio file status: </b> <b>Estado del archivo de audio: </b> <b>Status: </b> <b>Estado: </b> <b>Muxing status: </b> <b>Estado de la multiplexación: </b> downloaded descargado Active Activo Not Active Inactivo Started Iniciada Error Error Complete Completada Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! ¡Aria2 está desconectado! Persepolis is trying to connect! be patient! Persepolis está tratando de conectarse. ¡Sea paciente! Aria2 did not respond! ¡Aria2 no ha respondido! Please try again. Vuelva a intentarlo. Try again! ¡Vuelva a intentarlo! progress_ui_tr Persepolis Download Manager Gestor de descargas Persepolis Status: Estado: Downloaded: Descargado: Transfer rate: Tasa de transferencia: Estimated time left: Tiempo restante estimado: Number of connections: Número de conexiones: Download Information Información de la descarga After download Después de la descarga Apply Aplicar Shut Down Apagar Download Options Opciones de descarga Resume Reanudar Pause Pausar Stop Detener Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>¡Reinicie Persepolis!</center></b><br><center>Algunos ajustes solo se activarán después de reiniciar Persepolis.</center> Restart Persepolis! ¡Reinicie Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> <center><b>Este atajo ya se ha usado antes. ¡Use otro!</b> setting_ui_tr Preferences Preferencias <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Configura el número de intentos si la descarga falla.</p></body></html> Number of tries: Número de intentos: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Configura el tiempo de espera en segundos entre intentos. Persepolis reintentará la descarga si el servidor HTTP devuelve una respuesta 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Configura el tiempo de espera en segundos. </p></body></html> Timeout (seconds): Tiempo de espera (segundos): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>El uso de conexiones múltiples puede acelerar la descarga.</p></body></html> Number of connections: Número de conexiones: RPC port number: Número del puerto RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Especifique el número del puerto para buscar un servidor JSON-RPC/XML-RPC. Valores posibles: 1024 - 65535. Por defecto: 6801 </p></body></html> Change Aria2 default path Cambiar la ruta por defecto de Aria2 Change Cambiar Download Options Opciones de descarga Volume: Volumen: Notifications Notificaciones Style: Estilo: Color scheme: Esquema de colores: Icons: Iconos: Notification type: Tipo de notificación: Font: Tipografía: Size: Tamaño: Run Persepolis at startup Ejecutar Persepolis al inicio Keep system awake! ¡Mantenga el sistema activo! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Formato HH:MM</p></body></html> File Name Nombre del archivo Status Estado Size Tamaño Downloaded Descargado Percentage Porcentaje Connections Conexiones Category Categoría Video Finder Options Opciones de la búsqueda de vídeos Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Número máximo de enlaces que capturar:<br/><small>(Si el navegador envía varios enlaces de vídeo a la vez)</small> Defaults Valores por defecto Cancel Cancelar OK Aceptar Press new keys Pulsar teclas nuevas Action Acción Shortcut Atajo Shortcuts Atajos Quit Salir Hide main window if close button clicked. Ocultar la ventana principal al hacer clic en el botón de cerrar <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Es posible que esta característica no funcione en su sistema operativo.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Gestor de descargas Persepolis Links Enlaces Select All Seleccionar todo Deselect All Deseleccionar todo Add to queue: Añadir a la lista: Proxy Proxy IP: Dirección IP: Port: Puerto: Change Download Folder Cambiar la carpeta de descargas OK Aceptar Cancel Cancelar Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Estado del archivo de vídeo: </b> <b>Audio file status: </b> <b>Estado del archivo de audio: </b> <b>Muxing status: </b> <b>Estado de la multiplexación: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Buscador de vídeos Fetch Media List Obtener la lista de medios Select a format Seleccione un formato Please enter a valid video link Escriba un enlace de vídeo válido Fetching Media Info... Obteniendo información multimedia... Video format: Formato de vídeo: Audio format: Formato de audio: Advanced options Opciones avanzadas persepolisdm-persepolis-867ee76/resources/locales/ui_fa_IR.qm000066400000000000000000001251021464161131600244340ustar00rootroot00000000000000GOO_. ._` c>>Nc>,i<?jrJ#jr]t tvQep5d>>>X-\)t9Z%[l oNw}%D9)o5)oc>)o!-B=-B9N?9N:X:<=G(EM?$([Pe]1tyEtA;xDZ9;xDZa;#K&SCW(y` b)*b֣V8S q&K9`p` +@) .K . > $^ AN+[ R  WWv ^U `[ b gg mp7 |.y }R }Q" ~; t a F0& U'' NT~  eO UU U O+ g4 sG e~~! ^n l4 "ZWR /lU Ert _t _B _{ if6Y ifZ s> X `e  Yps \F (8 ,!5 >ENg >E Fq Uq6 `r` gn8 nx9 vr z  {Ǝ3> wC wa s  ES ~z N2 % G 7R1 ^ 5[ (XX 2S  P[ Xr. b[X e.Z e.d st]# q q e'd N 5 DV c K}J U  V ( U c(m  C/4` .H ~ >P \eF q. B Bx BUS Bd? B $? A  i":.dT3>7I 7I_2xB xBN$+J(O2g910'2,g2`3Ka j6!?r1?C]>1]>`iT!uMy^@By^v3{%A}p=V%[)g[*$q"e$q_c?eqL..j{}i^ 9D16' 'E15EE E-E/16' 9(/'DDG 2'/G 5'/B 9D16' E57A '3/ ,9A1 ".HF/9D ' -'E/ -. 13*E '-3'F * *4 E-E/'EF H'-/ F' AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia about_ui_tr<a href=https://github.com/KaranGauswami/socks-to-http-proxy>~1HG *(/D ~1H3 socks (G http </a>\Socks to http proxy project about_ui_trr<a href=https://github.com/aria2/aria2>Aria2c project</a>9Aria2c project about_ui_trv<a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a>;FFmpeg project about_ui_trr<a href=https://github.com/ginuerzh/gost>Gost project</a>9Gost project about_ui_trv<a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a>;YT-DLP project about_ui_tr<https://persepolisdm.github.ioIhttps://persepolisdm.github.io about_ui_tr@https://telegram.me/persepolisdmMhttps://telegram.me/persepolisdm about_ui_tr@https://twitter.com/persepolisdmMhttps://twitter.com/persepolisdm about_ui_tr/1('1G ~13~HD3About Persepolis about_ui_trB/1/'F G'Acknowledgments about_ui_trB/1/'F G':Acknowledgments: about_ui_tr*H39G /GF/'F Developers about_ui_tr ~1H'FGLicense about_ui_tr *'/OK about_ui_tr*/'FDH/ EF,1 ~13~HD3Persepolis Download Manager about_ui_tr*41 HG '2:Special thanks to: about_ui_tr*1,EG FF/'F Translators about_ui_trF3.G .. Version 4.3.0 about_ui_tr$'A2H/F DF /'FDH/Add Download Link addlink_ui_tr'A2H/F (G /3*G:Add to category:  addlink_ui_tr"2FG G' ~41A*GAdvanced Options addlink_ui_trD:HCancel addlink_ui_tr"*:1 ~H4G /'FDH/Change Download Folder addlink_ui_tr$H1'4 F'E ~1HF/G:Change file name:  addlink_ui_tr4*4.5 *F8E'* ~1'3 33*EDetect System Proxy Settings addlink_ui_tr~H4G /'FDH/: Download Folder:  addlink_ui_tr(9/' /'FDH/FDownload Later addlink_ui_trDF /'FDH/:Download link:  addlink_ui_tr 01H'G /'FDH/: Download password:  addlink_ui_tr6F'E '1(1 H 01H'G /'FDH/Download username and password addlink_ui_tr$F'E '1(1 /'FDH/:Download username:  addlink_ui_tr2E'F ~''FEnd time addlink_ui_trHTTPHTTP addlink_ui_tr HTTPSHTTPS addlink_ui_tr G/1: Header:  addlink_ui_tr " ~:IP:  addlink_ui_trE-/H/* 319* Limit speed addlink_ui_tr ~HF/Link addlink_ui_trH G':Load cookies:  addlink_ui_tr2FG G' (4*1 More Options addlink_ui_tr4E'1 '*5'D G':Number of connections: addlink_ui_tr *'/OK addlink_ui_tr~H1* : Port: addlink_ui_tr ~1'3Proxy addlink_ui_tr01H'G ~1'3:Proxy password:  addlink_ui_tr$F'E '1(1 ~1'3:Proxy username:  addlink_ui_tr'1,'9 /GF/G: Referrer:  addlink_ui_tr2'F E31 1' (G .'71 (3~'1Remember this path addlink_ui_tr SOCKS5SOCKS5 addlink_ui_tr2E'F 41H9 Start time addlink_ui_tr9H'ED '1(1: User agent:  addlink_ui_tr&<b>F'E ~1HF/G</b>: File name: after_download_src_ui_tr$<b>-,E ~1HF/G</b>: Size: after_download_src_ui_tr *'/ OK after_download_ui_tr4H/F ~1HF/G Open File after_download_ui_tr6<b>/'FDH/ (G ~''F 13/</b>Download Completed!after_download_ui_tr<b>~HF/</b>: Link: after_download_ui_tr(<b>0.1G 4/G /1</b>:Save as: after_download_ui_tr4'F ~'E 1' /1 F4'F F/G.Don't show this message again.after_download_ui_tr"4H/F ~H4G /'FDH/Open Download Folderafter_download_ui_tr*/'FDH/ EF,1 ~13~HD3Persepolis Download Managerafter_download_ui_tr*~' 1/F ~'E G' D'Clear Log Messageslog_window_ui_tr(3*FCloselog_window_ui_tr< 1HFH4* '2 2/G /1 D~ (H1/ Copy Selected to Clipboardlog_window_ui_trD' ~13~HD3Persepolis Loglog_window_ui_tr(('2(F ~'E G' D'Refresh Log Messageslog_window_ui_tr 2'14 Report Issuelog_window_ui_tr8</b> /1 -'D -'61 EH,H/ '3*!" already exists!mainwindow_src_ui_tr<b><center>'F ~HF/ B(D' '6'AG 4/G '3* ! "' E7E&F/ E .H'G/ /H('1G "F 1' ('A2'/ </center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>'F 9ED'* ~1HF/G G' 1' <br>(/HF ('24*</b>'2 /3 4E' ~' E F/</center>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>'F 9ED'* *E'E /'FDH/G' 1' '2 'F 5A -0A .H'G/ 1/</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr*<b>*9/'/ '*5'D G'</b>Connections: mainwindow_src_ui_tr$<b>/'FDH/ 4/G:</b>Downloaded: mainwindow_src_ui_tr,<b>2E'F ('BE'F/G:</b>Estimated time left: mainwindow_src_ui_tr<b>~HF/</b>: Link: mainwindow_src_ui_trp<b>(' 916 ~H24 4E' FE *H'F/ 5A ~4A16 1' -0A F/!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>H69*:</b>Status: mainwindow_src_ui_tr<b>319*:</b>Transfer rate: mainwindow_src_ui_trN<center>E .H'G/ '/'EG /G/ </center>)
Do you want to continue?
mainwindow_src_ui_tr"1' ~'3. F/'/Aria2 did not respondmainwindow_src_ui_tr&"1' ~'3. FE /G/!Aria2 did not respond!mainwindow_src_ui_tr"1' ~'3. FE/G/! 5(H1 ('4/! ~13~HD3  +'FG /1 /H('1G *D'4 .H'G/ 1/.FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr "1' E*5D F3*!Aria2 disconnected!mainwindow_src_ui_trd4(G .H/ 1' (113 F/ H ~13~HD3 1' '2 FH (4'/'Check your network & Restart Persepolismainwindow_src_ui_tr(/'FDH/ (G ~''F 13/Download Completemainwindow_src_ui_tr$/'FDH/ 2E'F(F/ 4/Download Scheduledmainwindow_src_ui_tr/'FDH/ ":'2 4/Download Startsmainwindow_src_ui_tr/'FDH/ E*HBA 4/Download Stoppedmainwindow_src_ui_trN('11 *H37 '(F/G H/&H /1 ,1'F '3*.(Download is in progress by video finder!mainwindow_src_ui_tr .7' - Error - mainwindow_src_ui_tr .7'...Error...mainwindow_src_ui_tr.7':Error: mainwindow_src_ui_tr$E.A 1/F 2FG G' Hide optionsmainwindow_src_ui_tr8A13*'/F (1F'EG (G 3F FE'GMinimize to system traymainwindow_src_ui_tr'F*B'D  Moving ismainwindow_src_ui_tr~/' F4/ Not Foundmainwindow_src_ui_tr6A6' .'D 'A H,H/ F/'1/: Not enough free space in:mainwindow_src_ui_tr$9ED'* F'EHAB (H/.Operation was not successful!mainwindow_src_ui_trl9ED'* F'EHAB (H/! D7A' '(*/' 'F /3*G 1' E*HBA F/: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr$9ED'* F'EHAB (H/.Operation was not successful.mainwindow_src_ui_tr~13~HD3 Persepolismainwindow_src_ui_trH~13~HD3 FE *H'F/ (G "1' E*5D 4H/#Persepolis can not connect to Aria2mainwindow_src_ui_tr4~13~HD3 /1 -'D .'EH4 1/FPersepolis is shutting downmainwindow_src_ui_trZ~13~HD3 (1' '*5'D *D'4 E F/! 4(' ('4/!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trZ~13~HD3 (1' '*5'D *D'4 E F/! 4(' ('4/!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trT~13~HD3 /H('1G (G "1' (' EHAB* E*5D 4/)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr&D7A' 4(' ('4/...Please Wait...mainwindow_src_ui_tr:D7A' 'F /3*G 1' '/'EG /G/: &Please resume the following category: mainwindow_src_ui_trTD7A' /1 '(*/' A1"F/ /'FDH/ 1' E*HBA F/!$Please stop download progress first.mainwindow_src_ui_trDD7A' '(*/' 'F /3*G 1' E*HBA F/:*Please stop the following category first: mainwindow_src_ui_tr:D7A' 'F /3*G 1' E*HBA F/: $Please stop the following category: mainwindow_src_ui_trJD7A' '(*/' 'F /1'A* 1' E*HBA F/: *Please stop the following download first: mainwindow_src_ui_tr,D7A' /H('1G *D'4 F/.Please try again.mainwindow_src_ui_tr@D7A' ~13~HD3 1' (1H213'F F/.Please update Persepolis.mainwindow_src_ui_tr5A E*HBA 4/!Queue Stopped!mainwindow_src_ui_tr"5A (G ~''F 13/!Queue completed!mainwindow_src_ui_tr"E'/G...Ready...mainwindow_src_ui_tr6 '*5'D /H('1G (G "1' ... Reconnecting Aria2...mainwindow_src_ui_tr2~13~HD3 1' '2 FH (4'/Restart Persepolismainwindow_src_ui_tr4A13*'/F /'FDH/G' EF*.( (GSend selected downloads tomainwindow_src_ui_trA13*'/F (GSend tomainwindow_src_ui_tr FE'4 AG13* '5DShow main Windowmainwindow_src_ui_trFE'4 2FG G' Show optionsmainwindow_src_ui_tr@'F*B'D (96 '2 EH'1/ F'EHAB (H/!+Some items didn't transferred successfully!mainwindow_src_ui_trF4Sort bymainwindow_src_ui_tr>'(*/' GEG /'FDH/G' 1' E*HBA F!Stop all downloads first!mainwindow_src_ui_tr@'(*/' 'F ('11 1' E*HBA F/:#Stop the following download first: mainwindow_src_ui_trA6' 'A /1 ~H4G /'FDH/ ('B FE'F/G '3*! D7A' ' ~H4G /1 'F*.'( F/ ' A6' 1' "2'/ F/.oThere is not enough disk space available at the download folder! Please choose another one or clear some space.mainwindow_src_ui_tr*D'4 /H('1G Try againmainwindow_src_ui_tr*D'4 /H('1G! Try again!mainwindow_src_ui_tr.7' 1. /'/an error occurredmainwindow_src_ui_tr4(' ('4/! be patient!mainwindow_src_ui_tr(ffmpeg F5( F4/G '3*!ffmpeg is not installed!mainwindow_src_ui_tr~''F 'A*G! finished!mainwindow_src_ui_tr.7' E3 muxing errormainwindow_src_ui_tr*33*E 4E' /1  +'FGyour system in 20 secondsmainwindow_src_ui_tr yt-dlp F5( F3*!yt-dlp is not installed!mainwindow_src_ui_tr('11 4/ downloadedmainwindow_ui_tr /'FDH/ &Downloadmainwindow_ui_tr H1'4&Editmainwindow_ui_tr ~1HF/G&Filemainwindow_ui_trE&Helpmainwindow_ui_tr5A&Queuemainwindow_ui_tr FE'4&Viewmainwindow_ui_tr4<b>H69* ~1HF/G 5/': </b>,Audio File Status: mainwindow_ui_tr4<b>H69* ~1HF/G 5/': </b>,Audio file status: mainwindow_ui_tr&<b>H69* E3: </b>Mixing status: mainwindow_ui_tr&<b>H69* E3: </b>Muxing status: mainwindow_ui_tr<b>H69*: </b>Status: mainwindow_ui_tr2<b>H69* ~1HF/G H/&H</b>Video File Status: mainwindow_ui_tr2<b>H69* ~1HF/G H/&H</b>Video file status: mainwindow_ui_tr*<html><head/><body><p>'F 2FG '2 (G .H'( 1A*F 33*E ,DH1 E F/ 'F 2FG '1 33*E 4E' (5H1* .H/'1 (G .H'( E 1H/ 61H1 '3*.</p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

mainwindow_ui_tr/1('1G Aboutmainwindow_ui_trA9'DActivemainwindow_ui_tr,'A2H/F ~HF/ /'FDH/ FHAdd New Download Linkmainwindow_ui_tr,'A2H/F ~HF/ /'FDH/ FHAdd New Download Link...mainwindow_ui_tr~3 '2 /'FDH/After downloadmainwindow_ui_tr '9E'DApplymainwindow_ui_tr/3*GCategorymainwindow_ui_tr*~' 1/F AG13* /'FDH/Clear Download Listmainwindow_ui_tr2~' 1/F GEG AG13* /'FDH/ Clear all items in download listmainwindow_ui_tr~''F 'A*Completemainwindow_ui_tr'*5'D G' Connectionsmainwindow_ui_tr5A ,// (3'2Create New Queue...mainwindow_ui_trl~1HF/G ' E*F (3'2/ H G1 ~HF/ 1' /1 G1 .7 B1'1 /G/5Create a text file and put links in it, line by line!mainwindow_ui_tr(5A /'FDH/ ,// (3'2Create new download queuemainwindow_ui_tr@~1HF/G /'FDH/G' EF*.( 1' ~' FDelete Selected Download Filesmainwindow_ui_tr /'FDH/Downloadmainwindow_ui_trH69* /'FDH/Download Statusmainwindow_ui_tr0'(*/' AG13* 1' /'FDH/F"Download bottom of the list firstmainwindow_ui_trV/'FDH/ H/&H ' 5/' '2 H*H( ' HE&H H...1Download video or audio from Youtube, Vimeo, etc.mainwindow_ui_tr/'FDH/ 4/G Downloadedmainwindow_ui_tr H1'4Editmainwindow_ui_tr2E'F ~''FEnd Timemainwindow_ui_tr.7'Errormainwindow_ui_tr2E'F ('BE'F/GEstimated Time Leftmainwindow_ui_tr.1H,Exitmainwindow_ui_tr ~1HF/GFilemainwindow_ui_trF'E ~1HF/G File Namemainwindow_ui_tr-,E ~1HF/G File Sizemainwindow_ui_tr*'A*F ~HF/ H/&H ...Find Video Links...mainwindow_ui_tr2E'F 'HDF *D'4First Try Datemainwindow_ui_trEHelpmainwindow_ui_tr2FG G' E.A Hide Optionsmainwindow_ui_tr6'A2H/F ~HF/G' '2 D~ (H1/Import Links From Clipboardmainwindow_ui_tr>'A2H/F ~HF/G' '2 D~ (H1/ ...Import Links from Clipboard...mainwindow_ui_tr:'A2H/F ~HF/G' '2 ~1HF/G E*FImport Links from Text File...mainwindow_ui_tr,33*E 1' 1H4F FG /'1!Keep System Awake!mainwindow_ui_tr2E'F ".1F *D'4 Last Try Datemainwindow_ui_trE-/H/* 319* Limit Speedmainwindow_ui_tr ~HF/Linkmainwindow_ui_tr8A13*'/F (1F'EG (G 3F FE'GMinimize to System Traymainwindow_ui_trl~1HF/G ('11 G' 'F*.'( 4/G 1' (G ~H4G /1 EF*BD F.Move Selected Download Files to Another Foldermainwindow_ui_trt~1HF/G ('11 G' 'F*.'( 4/G 1' (G ~H4G /1 EF*BD F ...1Move Selected Download Files to Another Folder...mainwindow_ui_trF"*E G' EF*.( 1' (G ~'F ,'(,' FMove Selected Items Downmainwindow_ui_trD"*E G' EF*.( 1' (G ('D' ,'(,' FMove Selected Items Upmainwindow_ui_trR"*E G' EF*.( 1'  .7 (G ~'F ,'(,' F-Move currently selected items down by one rowmainwindow_ui_trP"*E G' EF*.( 1'  .7 (G ('D' ,'(,' F+Move currently selected items up by one rowmainwindow_ui_tr:1A9'D Not Activemainwindow_ui_tr04H/F ~H4G ~4A16 /'FDH/Open Default Download Foldermainwindow_ui_tr"4H/F ~H4G /'FDH/Open Download Foldermainwindow_ui_tr 4H/F ~1HF/G ... Open File...mainwindow_ui_trE+ /1 /'FDH/Pause Downloadmainwindow_ui_tr/15/ Percentagemainwindow_ui_tr*/'FDH/ EF,1 ~13~HD3Persepolis Download Managermainwindow_ui_tr4.5 3'2 Preferencesmainwindow_ui_tr ~41A*Progressmainwindow_ui_trH G' Propertiesmainwindow_ui_tr5AQueuemainwindow_ui_tr 'F 5A 1' -0A F Remove Queuemainwindow_ui_tr8-0A /'FDH/G' EF*.( '2 AG13*#Remove Selected Downloads from Listmainwindow_ui_tr 'F 5A 1' -0A FRemove this queuemainwindow_ui_tr2'14 .7'Report an Issuemainwindow_ui_tr2'14 .7'Report an issuemainwindow_ui_tr'/'EG /'FDH/Resume Downloadmainwindow_ui_tr FE'4 ~1HF/G D' Show Log Filemainwindow_ui_trFE'4 EFH('1 Show Menubarmainwindow_ui_trFE'4 ~FD F'1Show Side Panelmainwindow_ui_tr2FE'4 FE'G /1 3F FE'GShow System Tray Iconmainwindow_ui_trFFE'4/9/E FE'4 FE'G /1 3F 33*EShow/Hide system tray iconmainwindow_ui_tr.'EH4 1/F Shut Downmainwindow_ui_tr-,ESizemainwindow_ui_trF4Sort bymainwindow_ui_tr41H9 E3 Start Mixingmainwindow_ui_tr5A 1' 41H9 F Start Queuemainwindow_ui_tr2E'F 41H9 Start Timemainwindow_ui_tr5A 1' 41H9 FStart this queuemainwindow_ui_tr":'2 4/GStartedmainwindow_ui_tr H69*Statusmainwindow_ui_tr.*HBA GEG /'FDH/G' ,'1Stop All Active Downloadsmainwindow_ui_tr*HBA /'FDH/ Stop Downloadmainwindow_ui_tr5A 1' E*HBA F Stop Queuemainwindow_ui_tr5A 1' E*HBA FStop this queuemainwindow_ui_tr"*HBA H D:H /'FDH/Stop/Cancel Downloadmainwindow_ui_tr319* Transfer Ratemainwindow_ui_tr&'(F/G H/&H V&ideo Findermainwindow_ui_tr'(F/G H/&H Video Findermainwindow_ui_tr FE'4Viewmainwindow_ui_tr "1' ~'3. F/'/!Aria2 did not respond!progress_src_ui_tr"1' B79 4/!Aria2 disconnected!progress_src_ui_trp~13~HD3 /1 *D'4 (1' '*5'D /H('1G '3*! D7A' 5(H1 ('4/!,Persepolis is trying to connect! be patient!progress_src_ui_tr,D7A' /H('1G *D'4 F/.Please try again.progress_src_ui_tr*D'4 /H('1G! Try again!progress_src_ui_tr~3 '2 /'FDH/After downloadprogress_ui_tr '9E'DApplyprogress_ui_tr'7D'9'* /'FDH/Download Informationprogress_ui_tr 2FG G' /'FDH/Download Optionsprogress_ui_tr/'FDH/ 4/G: Downloaded:progress_ui_tr2E'F ('BE'F/G:Estimated time left:progress_ui_trE-/H/* 319* Limit speedprogress_ui_tr ~HF/:Link: progress_ui_tr*9/'/ '*5'D'*:Number of connections: progress_ui_tr/1FPauseprogress_ui_tr*/'FDH/ EF,1 ~13~HD3Persepolis Download Managerprogress_ui_tr '/'EGResumeprogress_ui_tr.'EH4 1/F Shut Downprogress_ui_tr H69*:Status: progress_ui_tr*HBAStopprogress_ui_tr 319*:Transfer rate: progress_ui_tr<b><center>D7A' ~13~HD3 1' '2FH (4'/!</center></b><br><center>(96 *:1'* ~3 '2 "F '+1 E ~01F/</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>'F E'F(1 B(D' '3*A'/G 4/G '3*! E'F(1 /1 '3*A'/G F/!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr4~13~HD3 1' '2 FH (4'/!Restart Persepolis!setting_src_ui_tr<html><head/><body><p>4E'1G ~H1* .'5 (1' H4 /'/F (G 31H1 JSON-RPC/XML-RPC. (F  *'  ~4 A16: </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_tr <html><head/><body><p> *H,G: E31 F'/13* ('9+ (1H2 .7' E 4H/! (' /B* H1'4 F/ ' *F8E'* ~4A16 1' *:1 F/G/!</p></body></html>

Attention: Wrong path may cause problems! Do it carefully or don't change default setting!

 setting_ui_trn<html><head/><body><p>B'D( 3'9*:/BBG</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p> '1 EEF (H/ 2E'F 1' '2 31H1 1EH* HTTP/FTP /1'A* F H (1 ~1HF/G E-D '9E'D F.</p></body></html>

Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.

 setting_ui_tr<html><head/><body><p>*9/'/ *D'4 G' ~3 '2 .7' /1 /'FDH/ 1' E4.5 F/</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>2E'F E+ (F G1('1 *D'4 1' /1 H'-/ +'FG E4.5 F/</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>2E'F HBAG 1' E4.5 F/. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>(1F'EG (5H1* .H/'1 D~ (H1/ 1' (1' ~HF/G' ~ 4/G (113 E F/.x

The program will automatically check the clipboard for copied links.

 setting_ui_tr<html><head/><body><p>'F H 4'/ /1 33*E 9'ED 4E' '1 FF/.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>'F 2FG '2 GF/4 F'EHAB SSL/TLS ,DH1 E F/ 'E' (' E3&HD* .H/ '2 "F '3*A'/G F/ </p></body></html>r

This option avoids SSL/TLS handshake failure. But use it at your own risk!

 setting_ui_tr*<html><head/><body><p>'F 2FG '2 (G .H'( 1A*F 33*E ,DH1 E F/ 'F 2FG '1 33*E 4E' (5H1* .H/'1 (G .H'( E 1H/ 61H1 '3*.</p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

 setting_ui_tr<html><head/><body><p>'3*A'/G '2 F/ '*5'D E *H'F/ (G 319* /'FDH/ 4E' E F/..</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr<html><head/><body><p>~3 '2 '13'D /1.H'3* /'FDH/ '2 'A2HFG E1H11 /'FDH/ (/HF FE'4 ~F,1G Add Link 41H9 E 4H/.</p></body></html>

When a download request is sent from the browser extension, the download will start without showing the Add Link window.

 setting_ui_tr 9ED1/Action setting_ui_tr,'A2H/F ~HF/ /'FDH/ FHAdd New Download Link setting_ui_tr0'A2H/F ~HF/ H/&H ,//Add New Video Link setting_ui_trD:HCancel setting_ui_tr/3*GCategory setting_ui_tr *:1Change setting_ui_tr.*:1 E31 ~4A16 "1'Change Aria2 default path setting_ui_trJ(113 D~ (H1/ (1' ~HF/G' ~ 4/G'Check system clipboard for copied links setting_ui_tr3'.*'1 1FColor scheme:  setting_ui_tr"4.5 3'2 3*HF G'Columns Customization setting_ui_tr'*5'D G' Connections setting_ui_tr(1' H/&H  EH3B H... /1 ~H4G ~4A16 /'FDH/ ~H4G G' E,2' (3'2BCreate subfolders for Music,Videos, ... in default download folder setting_ui_tr ~4A16Defaults setting_ui_tr2~' 1/F "*E G' ('11Delete Download Items setting_ui_trR'2 H'G (1' *#/ GE*''F '3*A'/G FF/)Don't use certificate to verify the peers setting_ui_tr 2FG G' /'FDH/Download Options setting_ui_tr~H4G /'FDH/: Download folder:  setting_ui_trd/1.H'3* G' /'FDH/ '2 E1H11 (D'A'5DG ',1' E 4H/.@Download requests from the browser will be executed immediately. setting_ui_tr/'FDH/ 4/G Downloaded setting_ui_tr0A9'D 1/F 5/' "'G 3'2Enable Notification Sounds setting_ui_tr:A9'D 1/F FE'G /1 3F FE'GEnable system tray icon setting_ui_tr2E'F ('BE'F/GEstimated Time Left setting_ui_trF'E ~1HF/G File Name setting_ui_tr2E'F 'HDF *D'4First Try Date setting_ui_tr AHF*:Font:  setting_ui_trVE.A 1/F ~F,1G '5D GF'E 'F*.'( /EG (3*F)Hide main window if close button clicked. setting_ui_tr "F:Icons:  setting_ui_trj'1 E1H11 ',1' 4/ ~13~HD3 1' /1 3F FE'G ',1' F5If browser is opened, start Persepolis in system tray setting_ui_tr:'A2H/F ~HF/G' '2 ~1HF/G E*FImport Links from Text File setting_ui_tr,33*E 1' 1H4F FG /'1!Keep system awake! setting_ui_tr 2('F: Language:  setting_ui_tr2E'F ".1F *D'4 Last Try Date setting_ui_tr(4FG 4E'1 ~HF/G' /1'A* :<br/><small> ('1 E1H11 F/F ~HF/ H/&H 1' GE2E'F (A13*/)hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr8A13*'/F (1F'EG (G 3F FE'GMinimize to System Tray setting_ui_trF"*E G' EF*.( 1' (G ~'F ,'(,' FMove Selected Items Down setting_ui_trD"*E G' EF*.( 1' (G ('D' ,'(,' FMove Selected Items Up setting_ui_trFH9 "'G 3'2Notification type:  setting_ui_tr"'G 3'2 G' Notifications setting_ui_tr*9/'/ '*5'D'*:Number of connections:  setting_ui_tr,*9/'/ *D'4 G' /H('1G:Number of tries:  setting_ui_tr *'/OK setting_ui_tr/15/ Percentage setting_ui_tr4.5 3'2 Preferences setting_ui_tr0D/G' ,// 1' (A4'1/Press new keys setting_ui_tr.1H,Quit setting_ui_tr 4E'1G ~H1* RPC: RPC port number:  setting_ui_tr2E'F 1EH* Remote time setting_ui_tr(-0A "*E G' ('11Remove Download Items setting_ui_tr:',1' ~13~HD3 /1 '(*/' F43*Run Persepolis at startup setting_ui_tr0.1G /1Save As setting_ui_tr E'F(1Shortcut setting_ui_trE'F(1G' Shortcuts setting_ui_trVFE'4 ~F,1G ~''F /'FDH/ ~3 '2 '*E'E /'FDH/7Show download complete dialog when download is finished setting_ui_tr2FE'4 ~F,1G ~41A* /'FDH/Show download progress window setting_ui_trFE'4 EFH('1 Show menubar setting_ui_trFE'4 ~FD F'1Show side panel setting_ui_tr$FE'4 'F 3*HF G':Show these columns: setting_ui_tr-,ESize setting_ui_tr'F/'2G : Size:  setting_ui_tr H69*Status setting_ui_tr3(Style:  setting_ui_tr&HBAG 2E'F (+'FG):Timeout (seconds):  setting_ui_trB'F/'2G FE'G G' /1 FH'2 '(2'1 : Toolbar icons size:  setting_ui_tr319* Transfer Rate setting_ui_tr,2FG G' '(F/G H/&HVideo Finder Options setting_ui_tr E2'F (DF/ 5/':Volume:  setting_ui_tr.E+ (F G1 /'FDH/ /1 5A+Wait period between each download in queue: setting_ui_trL/1F /1 (F *D'4 G' /H('1G((G +'FG):'Wait period between retries (seconds):  setting_ui_tr'A2H/F (G 5A: Add to queue:  text_ui_trD:HCancel text_ui_tr"*:1 ~H4G /'FDH/Change Download Folder text_ui_tr9/E 'F*.'( GEG Deselect All text_ui_tr 2FG G' /'FDH/Download Options text_ui_tr~H4G /'FDH/: Download folder:  text_ui_tr 01H'G /'FDH/: Download password:  text_ui_tr6F'E '1(1 H 01H'G /'FDH/Download username and password text_ui_tr$F'E '1(1 /'FDH/:Download username:  text_ui_tr " ~:IP: text_ui_trE-/H/* 319* Limit speed text_ui_tr~HF/G'Links text_ui_tr4E'1 '*5'D G':Number of connections: text_ui_tr *'/OK text_ui_tr*/'FDH/ EF,1 ~13~HD3Persepolis Download Manager text_ui_tr ~H1*:Port: text_ui_tr ~1'3Proxy text_ui_tr01H'G ~1'3:Proxy password:  text_ui_tr$F'E '1(1 ~1'3:Proxy username:  text_ui_tr'F*.'( GEG Select All text_ui_tr2<b>H69* ~1HF/G 5/': </b>Audio file status: video_finder_progress_ui_tr&<b>H69* E3: </b>Mixing status: video_finder_progress_ui_tr&<b>H69* E3: </b>Muxing status: video_finder_progress_ui_tr4<b>H69* ~1HF/ H/&H: </b>Video file status: video_finder_progress_ui_tr"2FG G' ~41A*GAdvanced optionsytaddlink_src_ui_trA1E* 5/': Audio format:ytaddlink_src_ui_tr"1A*F AG13* 13'FGFetch Media Listytaddlink_src_ui_tr0(113 /'/G G' 13'FG ...Fetching Media Info...ytaddlink_src_ui_trHD7A' ~HF/ H/&H /13* 1' H'1/ F/Please enter a valid video linkytaddlink_src_ui_tr'F*.'( A1E*Select a formatytaddlink_src_ui_tr'(F/G H/&H Video Finderytaddlink_src_ui_trA1E* H/&H: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_fa_IR.ts000066400000000000000000002636551464161131600244650ustar00rootroot00000000000000 about_ui_tr About Persepolis درباره پرسپولیس Persepolis Download Manager دانلود منیجر پرسپولیس <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! https://persepolisdm.github.io <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! https://telegram.me/persepolisdm <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! https://twitter.com/persepolisdm Developers توسعه دهندگان Translators ترجمه‌کنندگان License پروانه OK تایید Special thanks to: تشکر ویژه از: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! علیرضا امیرصمیمی محمدرضا عبدالله‌زاده صادق علیرضایی مصطفی اسدی جعفر آخوندعلی کیا حامدی ح. رستمی احسان تی‌تیش محمدامین واحدی‌نیا Acknowledgments: قدردانی‌ها: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments قدردانی‌ها <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> <a href=https://github.com/KaranGauswami/socks-to-http-proxy>پروژه تبدیل پروکسی socks به http </a> Version 4.3.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! نسخه ۴.۳.۰ addlink_ui_tr Add to category: افزودن به دسته: Proxy پراکسی IP: آی‌پی: Port: پورت : Change Download Folder تغییر پوشه دانلود Download Folder: پوشه دانلود: Cancel لغو OK تایید Link پیوند More Options گزینه‌های بیشتر Advanced Options گزینه‌های پیشرفته Referrer: ارجاع دهنده: Header: هدر:‌ Load cookies: کوکی‌ها: User agent: عوامل کاربر: Add Download Link افزودن لینک دانلود Download link: لینک دانلود: Change file name: ویرایش نام پرونده: Detect System Proxy Settings تشخیص تنظیمات پراکسی سیستم Proxy password: گذرواژه پراکسی: Proxy username: نام کاربری پراکسی: Download username and password نام‌کاربری و گذرواژه دانلود Download username: نام‌کاربری دانلود: Download password: گذرواژه دانلود: Remember this path این مسیر را به خاطر بسپار Start time زمان شروع End time زمان پایان Limit speed محدودیت سرعت Number of connections: شمار اتصال‌ها: Download Later بعدا دانلودکن HTTP HTTP HTTPS HTTPS SOCKS5 SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>نام پرونده</b>: <b>Size</b>: <b>حجم پرونده</b>: after_download_ui_tr Persepolis Download Manager دانلود منیجر پرسپولیس Open File گشودن پرونده Open Download Folder گشودن پوشه دانلود OK تایید Don't show this message again. این پیام را دیگر نشان نده. <b>Download Completed!</b> <b>دانلود به پایان رسید</b> <b>Save as</b>: <b>ذخیره شده در</b>: <b>Link</b>: <b>پیوند</b>: log_window_ui_tr Persepolis Log لاگ پرسپولیس Report Issue گزارش Close بستن Copy Selected to Clipboard رونوشت از گزیده در کلیپ‌بورد Refresh Log Messages بازبینی پیام‌های لاگ Clear Log Messages پاک‌کردن پیام‌های لاگ mainwindow_src_ui_tr Persepolis پرسپولیس Queue Stopped! صف متوقف شد! Persepolis is shutting down پرسپولیس در حال خاموش کردن your system in 20 seconds سیستم شما در ۲۰ ثانیه Queue completed! صف به پایان رسید! Show main Window نمایش فهرست اصلی Please Wait... لطفا شکیبا باشید... Ready... آماده... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! آریا۲ پاسخ نمیدهد! صبور باشید! پرسپولیس ۲ ثانیه دیگر دوباره تلاش خواهد کرد. Error... خطا... Persepolis can not connect to Aria2 پرسپولیس نمی‌تواند به آریا۲ متصل شود Check your network & Restart Persepolis شبکه خود را بررسی کنید و پرسپولیس را از نو بگشایید Restart Persepolis پرسپولیس را از نو بگشایید Reconnecting Aria2... اتصال دوباره به آریا۲ ... Persepolis reconnected aria2 successfully پرسپولیس دوباره به آریا۲ با موفقیت متصل شد Error: خطا: <b>Link</b>: <b>پیوند</b>: <b>Downloaded</b>: <b>دانلود شده:</b> <b>Transfer rate</b>: <b>سرعت:</b> <b>Estimated time left</b>: <b>زمان باقیمانده:</b> <b>Connections</b>: <b>تعداد اتصال ها</b> <b>Status</b>: <b>وضعیت:</b> Download Stopped دانلود متوقف شد Error - خطا - Download Complete دانلود به پایان رسید <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>این پیوند قبلا اضافه شده است ! آیا مطمئنید می‌خواهید دوباره آن را بیافزایید ؟</center></b> Download Starts دانلود آغاز شد Download Scheduled دانلود زمانبندی شد Operation was not successful. عملیات ناموفق بود. Please resume the following category: لطفا این دسته را ادامه دهید: Aria2 disconnected! آریا۲ متصل نیست! Persepolis is trying to connect!be patient! پرسپولیس برای اتصال تلاش می‌کند! شکیبا باشید! Aria2 did not respond! آریا۲ پاسخ نمی‌دهد! Try again! تلاش دوباره! Aria2 did not respond آریا۲ پاسخ نداد Try again تلاش دوباره Please stop the following category: لطفا این دسته را متوقف کنید: Persepolis is trying to connect! be patient! پرسپولیس برای اتصال تلاش می‌کند! شکیبا باشید! Please try again. لطفا دوباره تلاش کنید. Minimize to system tray فرستادن برنامه به سینی نمایه Not Found پیدا نشد Operation was not successful! عملیات ناموفق بود. Operation was not successful! Please stop the following category first: عملیات ناموفق بود! لطفا ابتدا این دسته را متوقف کنید: Please stop the following download first: لطفا ابتدا این دریافت را متوقف کنید: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>این عملیات پرونده‌ها را <br>بدون بازگشت</b>از دیسک شما پاک می‌کند</center> <center>Do you want to continue?</center> <center>می‌خواهید ادامه دهید ؟</center> Please stop the following category first: لطفا ابتدا این دسته را متوقف کنید: </b>" already exists! </b>» در حال حاضر موجود است! Send selected downloads to فرستادن دانلودهای منتخب به Send to فرستادن به Sort by چینش <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>این عملیات تمام دانلودها را از این صف حذف خواهد کرد</center></b> <b>Sorry! You can't remove default queue!</b> <b>با عرض پوزش شما نمی‌توانید صف پیشفرض را حذف کنید!</b> Some items didn't transferred successfully! انتقال بعضی از موارد ناموفق بود! Please stop download progress first. لطفا در ابتدا فرآیند دانلود را متوقف کنید! Hide options مخفی کردن گزینه ها Show options نمایش گزینه‌ها Stop all downloads first! ابتدا همه دانلودها را متوقف کن! Moving is انتقال finished! پایان یافته! Download is in progress by video finder! بارگیری توسط یابنده ویدئو در جریان است. be patient! شکیبا باشید! Stop the following download first: ابتدا این بارگیری را متوقف کنید: ffmpeg is not installed! ffmpeg نصب نشده است! Not enough free space in: فضای خالی کافی وجود ندارد: muxing error خطای میکس an error occurred خطایی رخ داد Please update Persepolis. لطفا پرسپولیس را بروزرسانی کنید. There is not enough disk space available at the download folder! Please choose another one or clear some space. فضای کافی در پوشه دانلود باقی نمانده است! لطفا یا پوشه دیگری انتخاب کنید یا فضایی را آزاد کنید. yt-dlp is not installed! yt-dlp نصب نیست! mainwindow_ui_tr File پرونده Edit ویرایش View نمایش Download دانلود Queue صف Video Finder یابنده ویدئو Help کمک Sort by چینش Persepolis Download Manager دانلود منیجر پرسپولیس Category دسته File Name نام پرونده Status وضعیت Size حجم Downloaded دانلود شده Percentage درصد Connections اتصال‌ها Link پیوند &File پرونده &Edit ویرایش &View نمایش &Download دانلود &Queue صف &Help کمک Show/Hide system tray icon نمایش/عدم نمایش نمایه در سینی سیستم Add New Download Link افزودن پیوند دانلود نو Resume Download ادامه دانلود Pause Download مکث در دانلود Stop Download توقف دانلود Stop/Cancel Download توقف و لغو دانلود Properties ویژگی ها Progress پیشرفت Exit خروج Clear all items in download list پاک‌کردن همه فهرست دانلود Create new download queue صف دانلود جدیدی بساز Remove this queue این صف را حذف کن Start this queue صف را شروع کن Stop this queue صف را متوقف کن Move currently selected items up by one row آیتم‌های منتخب را یک خط به بالا جابجا کن Move currently selected items down by one row آیتم‌های منتخب را یک خط به پایین جابجا کن Preferences شخصی‌سازی About درباره Report an issue گزارش خطا Start Time زمان شروع End Time زمان پایان Download bottom of the list first ابتدای فهرست را دانلودکن Limit Speed محدودیت سرعت Apply اعمال After download پس از دانلود Shut Down خاموش ‌کردن V&ideo Finder ی&ابنده ویدئو <b>Video file status: </b> <b>وضعیت پرونده ویدئو</b> <b>Audio file status: </b> <b>وضعیت پرونده صدا: </b>, <b>Status: </b> <b>وضعیت: </b> <b>Muxing status: </b> <b>وضعیت میکس: </b> downloaded بارگیری شد Active فعال Not Active غیرفعال Started آغاز شده Error خطا Complete پایان یافت Transfer Rate سرعت Estimated Time Left زمان باقیمانده First Try Date زمان اولین تلاش Last Try Date زمان آخرین تلاش Find Video Links... یافتن پیوند ویدئو ... Download video or audio from Youtube, Vimeo, etc. دانلود ویدئو یا صدا از یوتیوب یا ویمئو و... Stop All Active Downloads توقف همه دانلودهای جاری File Size حجم پرونده Download Status وضعیت دانلود Show System Tray Icon نمایش نمایه در سینی نمایه Show Menubar نمایش منوبار Show Side Panel نمایش پنل کناری Minimize to System Tray فرستادن برنامه به سینی نمایه Add New Download Link... افزودن پیوند دانلود نو Import Links from Text File... افزودن پیوندها از پرونده متنی Create a text file and put links in it, line by line! پرونده‌ای متنی بسازید و هر پیوند را در هر خط قرار دهید Open File... گشودن پرونده ... Open Download Folder گشودن پوشه دانلود Open Default Download Folder گشودن پوشه پیشفرض دانلود Clear Download List پاک‌کردن فهرست دانلود Remove Selected Downloads from List حذف دانلودهای منتخب از فهرست Delete Selected Download Files پرونده دانلودهای منتخب را پاک کن Move Selected Download Files to Another Folder... پرونده بارگیری‌های انتخاب شده را به پوشه دیگر منتقل کن ... Move Selected Download Files to Another Folder پرونده بارگیری‌های انتخاب شده را به پوشه دیگر منتقل کن Create New Queue... صف جدید بساز Remove Queue این صف را حذف کن Start Queue صف را شروع کن Stop Queue صف را متوقف کن Move Selected Items Up آیتم‌های منتخب را به بالا جابجا کن Move Selected Items Down آیتم‌های منتخب را به پایین جابجا کن Report an Issue گزارش خطا Show Log File نمایش پرونده لاگ Hide Options گزینه‌های مخفی Keep System Awake! سیستم را روشن نگه‌دار! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>این گزینه از به خواب رفتن سیستم جلوگیری می‌کند این گزینه اگر سیستم شما بصورت خودکار به خواب می رود ضروری است.</p></body></html> Start Mixing شروع میکس <b>Video File Status: </b> <b>وضعیت پرونده ویدئو</b> <b>Audio File Status: </b> <b>وضعیت پرونده صدا: </b>, <b>Mixing status: </b> <b>وضعیت میکس: </b> Import Links from Clipboard... افزودن پیوندها از کلیپ‌بورد ... Import Links From Clipboard افزودن پیوندها از کلیپ‌بورد progress_src_ui_tr Aria2 disconnected! آریا۲ قطع شد! Persepolis is trying to connect! be patient! پرسپولیس در تلاش برای اتصال دوباره است! لطفا صبور باشید! Aria2 did not respond! آریا۲ پاسخ نداد! Please try again. لطفا دوباره تلاش کنید. Try again! تلاش دوباره! progress_ui_tr Persepolis Download Manager دانلود منیجر پرسپولیس Status: وضعیت: Downloaded: دانلود شده: Transfer rate: سرعت: Estimated time left: زمان باقیمانده: Number of connections: تعداد اتصالات: Download Information اطلاعات دانلود After download پس از دانلود Apply اعمال Shut Down خاموش کردن Download Options گزینه‌های دانلود Resume ادامه Pause درنگ Stop توقف Link: پیوند: Limit speed محدودیت سرعت setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>لطفا پرسپولیس را ازنو بگشایید!</center></b><br><center>بعضی تغییرات پس از آن اثر می‌پذیرند</center> Restart Persepolis! پرسپولیس را از نو بگشایید! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>این میانبر قبلا استفاده شده است! میانبر دیگری استفاده کنید!</center></b> setting_ui_tr Preferences شخصی‌سازی <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>تعداد تلاش‌ها پس از خطا در دانلود را مشخص کنید</p></body></html> Number of tries: تعداد تلاش های دوباره: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>زمان مکث بین هربار تلاش را در واحد ثانیه مشخص کنید</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>زمان وقفه را مشخص کنید. </p></body></html> Timeout (seconds): وقفه زمانی (ثانیه): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>استفاده از چند اتصال می‌تواند به سرعت دانلود شما کمک کند..</p></body></html> Number of connections: تعداد اتصالات: RPC port number: شماره پورت RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p>شماره پورتی خاص برای گوش دادن به سرور JSON-RPC/XML-RPC. بین ۱۰۲۴ تا ۶۵۵۳۵ پیش‌فرض:۶۸۰۱ </p></body></html> Change Aria2 default path تغییر مسیر پیشفرض آریا۲ Change تغییر Download Options گزینه‌های دانلود Volume: میزان بلندی صدا: Notifications آگاه‌سازی ها Style: سبک Color scheme: ساختار رنگ Icons: آیکن: Notification type: نوع آگاه‌سازی Font: فونت: Size: اندازه :‌ Run Persepolis at startup اجرای پرسپولیس در ابتدای نشست Keep system awake! سیستم را روشن نگه‌دار! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>قالب ساعت:دقیقه</p></body></html> File Name نام پرونده Status وضعیت Size حجم Downloaded دانلود شده Percentage درصد Connections اتصال‌ها Category دسته Video Finder Options گزینه‌های یابنده ویدئو Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> بیشینه شمار پیوندهای دریافتی :<br/><small> (اگر مرورگر چندین پیوند ویدئو را همزمان بفرستد) Defaults پیشفرض Cancel لغو OK تایید Press new keys کلیدهای جدیدی را بفشارید Action عملکرد Shortcut میانبر Shortcuts میانبرها Quit خروج Hide main window if close button clicked. مخفی کردن پنجره اصلی هنگام انتخاب دکمه بستن <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>این ویژگی شاید در سیستم عامل شما کار نکند.</p></body></html> Language: زبان: Minimize to System Tray فرستادن برنامه به سینی نمایه Remove Download Items حذف آیتم‌های بارگیری Delete Download Items پاک کردن آیتم‌های بارگیری Move Selected Items Up آیتم‌های منتخب را به بالا جابجا کن Move Selected Items Down آیتم‌های منتخب را به پایین جابجا کن Add New Download Link افزودن پیوند دانلود نو Add New Video Link افزودن پیوند ویدئوی جدید Import Links from Text File افزودن پیوندها از پرونده متنی Wait period between retries (seconds): درنگ در بین تلاش های دوباره(به ثانیه): Wait period between each download in queue: مکث بین هر دانلود در صف Don't use certificate to verify the peers از گواهی برای تأیید همتایان استفاده نکنید <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>این گزینه از هندشیک ناموفق SSL/TLS جلوگیری می‌کند، اما با مسئولیت خود از آن استفاده کنید </p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> <html><head/><body><p> توجه: مسیر نادرست باعث بروز خطا می‌شود! با دقت ویرایش کنید یا تنظیمات پیشفرض را تغییر ندهید!</p></body></html> Download folder: پوشه دانلود: Create subfolders for Music,Videos, ... in default download folder برای ویدئو ، موسیقی و... در پوشه پیشفرض دانلود پوشه‌های مجزا بساز Save As ذخیره در Enable Notification Sounds فعال کردن صدای آگاه‌سازی Toolbar icons size: اندازه نمایه‌ها در نواز ابزار :‌ If browser is opened, start Persepolis in system tray اگر مرورگر اجرا شد، پرسپولیس را در سینی نمایه اجرا کن Enable system tray icon فعال کردن نمایه در سینی نمایه Show download complete dialog when download is finished نمایش پنجره پایان دانلود پس از اتمام دانلود Show menubar نمایش منوبار Show side panel نمایش پنل کناری Show download progress window نمایش پنجره پیشرفت دانلود <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>این گزینه از به خواب رفتن سیستم جلوگیری می‌کند این گزینه اگر سیستم شما بصورت خودکار به خواب می رود ضروری است.</p></body></html> Show these columns: نمایش این ستون‌ها: Transfer Rate سرعت Estimated Time Left زمان باقیمانده First Try Date زمان اولین تلاش Last Try Date زمان آخرین تلاش Columns Customization شخصی‌سازی ستون‌ها Remote time زمان ریموت <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> <html><head/><body><p> اگر ممکن بود زمان را از سرور ریموت HTTP/FTP دریافت کن و بر پرونده محلی اعمال کن.</p></body></html> Check system clipboard for copied links بررسی کلیپ‌بورد برای پیوندهای کپی‌شده <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> <html><head/><body><p>برنامه بصورت خودکار کلیپ‌بورد را برای پیوندهای کپی‌شده بررسی می‌کند. Download requests from the browser will be executed immediately. درخواست های دانلود از مرورگر بلافاصله اجرا می شود. <html><head/><body><p>When a download request is sent from the browser extension, the download will start without showing the Add Link window. </p></body></html> <html><head/><body><p>پس از ارسال درخواست دانلود از افزونه مرورگر، دانلود بدون نمایش پنجره Add Link شروع می شود.</p></body></html> text_ui_tr Persepolis Download Manager دانلود منیجر پرسپولیس Links پیوندها Select All انتخاب همه Deselect All عدم انتخاب همه Add to queue: افزودن به صف: Proxy پراکسی IP: آی‌پی: Port: پورت: Change Download Folder تغییر پوشه دانلود OK تایید Cancel لغو Download Options گزینه‌های دانلود Proxy password: گذرواژه پراکسی: Proxy username: نام کاربری پراکسی: Download username and password نام‌کاربری و گذرواژه دانلود Download username: نام‌کاربری دانلود: Download password: گذرواژه دانلود: Download folder: پوشه دانلود: Limit speed محدودیت سرعت Number of connections: شمار اتصال‌ها: video_finder_progress_ui_tr <b>Video file status: </b> <b>وضعیت پروند ویدئو: </b> <b>Audio file status: </b> <b>وضعیت پرونده صدا: </b> <b>Muxing status: </b> <b>وضعیت میکس: </b> <b>Mixing status: </b> <b>وضعیت میکس: </b> ytaddlink_src_ui_tr Video Finder یابنده ویدئو Fetch Media List گرفتن فهرست رسانه Select a format انتخاب فرمت Please enter a valid video link لطفا پیوند ویدئوی درستی را وارد کنید Fetching Media Info... بررسی داده های رسانه ... Video format: فرمت ویدئو: Audio format: فرمت صدا: Advanced options گزینه‌های پیشرفته persepolisdm-persepolis-867ee76/resources/locales/ui_fr_FR.qm000066400000000000000000001321371464161131600244600ustar00rootroot00000000000000J2viGDCHw9F4Hw9ibJ6LbMOgMR$:iS#Vl WizWizW4WX[P W­Nf@Kb|!@i w&Lp{J_Z2D!5U5S:]dJcIQ u 5Nu 5YuO-CcPwc#(pg'ajA4>u[ g,0 nw Qq? 1^ T*jr<+KFj KFKF_Id.?2[4 [4;1%'#7=쑀1 Ha B>N@E]I3^}LFeMg z^zD}WtI@IIC(Qi_m^-I.XjuXjW a;T<0Nko05~1TM1TO -O_. 0 _` sc>?i<@~jrNjrtet=v5lV>@>Xc#)|9ZB%a oR2w%F)o Z)ok)oQ-B?-BL9NAS9N^:^:<=G(GM?$)V[T"]1tyHxDZ: xDZhK{WC-(`)*j֣[ S `=1K BscZp p *`u]`b6`B6`06` 9u]#q&:`` +@* .O . > $e AN,h W\ ^Z `b/ b g mp9: }R }Q" ~ `mU  Yp1 b ( ,!7 >EQ >EV Fq Uq8 `r` gn9 n v z {Ǝ4 wE wi  n H  % KM 7V e 5bz (] 2SG P[ b[^I e.` e.m stc qN q5 e' N/ 6 D[ k J Z x  ) U c) _ C/5 .Hq  >P \eI q B B BY BlP BS $D ,  i";.dY87I7I_4jxBvxBN$<JqR%o12K(x2-2g3O} ~s6 ?r2?E>]>3]>h^iTuPy^Ay^~{%N}pV&[*[+$q"J$qf?mz./{Fi,, AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia about_ui_tr<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr, propos de PersepolisAbout Persepolis about_ui_trDveloppeurs Developers about_ui_trLicenceLicense about_ui_trOKOK about_ui_trRGestionnaire de tlchargement PersepolisPersepolis Download Manager about_ui_tr2Remerciement spciaux :Special thanks to: about_ui_trTraducteurs Translators about_ui_trBAjouter un lien de tlchargementAdd Download Link addlink_ui_tr0Ajouter la catgorie :Add to category:  addlink_ui_tr Options avancesAdvanced Options addlink_ui_trAnnulerCancel addlink_ui_trHChanger le dossier de tlchargementChange Download Folder addlink_ui_tr6Changer le nom de fichier :Change file name:  addlink_ui_trPDtecter les paramtres systme de proxyDetect System Proxy Settings addlink_ui_tr6Dossier de tlchargement :Download Folder:  addlink_ui_tr*Tlcharger plus tardDownload Later addlink_ui_tr0Lien de tlchargement :Download link:  addlink_ui_tr@Mot de passe du tlchargement :Download password:  addlink_ui_trfNom d'utilisateur et mot de passe du tlchargementDownload username and password addlink_ui_trJNom d'utilisateur du tlchargement :Download username:  addlink_ui_trHeure de finEnd time addlink_ui_trEn-tte :Header:  addlink_ui_tr IP : IP:  addlink_ui_tr$Limiter la vitesse Limit speed addlink_ui_trLienLink addlink_ui_tr"Charger cookies :Load cookies:  addlink_ui_trPlus d'options More Options addlink_ui_tr,Nombre de connexions :Number of connections: addlink_ui_trOKOK addlink_ui_tr Port :Port: addlink_ui_tr ProxyProxy addlink_ui_tr.Mot de passe du proxy :Proxy password:  addlink_ui_tr8Nom d'utilisateur du proxy :Proxy username:  addlink_ui_trRfrence : Referrer:  addlink_ui_tr0Se souvenir de ce cheminRemember this path addlink_ui_trHeure de dbut Start time addlink_ui_tr&Agent utilisateur : User agent:  addlink_ui_tr0<b>Nom de fichier</b> : File name: after_download_src_ui_tr <b>Taille</b> :  Size: after_download_src_ui_tr OK  OK after_download_ui_trOuvrir fichier Open File after_download_ui_tr><b>Tlchargement termin !</b>Download Completed!after_download_ui_tr<b>Lien</b> :  Link: after_download_ui_tr4<b>Enregistrer sous</b> : Save as: after_download_ui_tr8Ne plus afficher ce message.Don't show this message again.after_download_ui_trFOuvrir le dossier de tlchargementOpen Download Folderafter_download_ui_trRGestionnaire de tlchargement PersepolisPersepolis Download Managerafter_download_ui_trBEffacer les messages des journauxClear Log Messageslog_window_ui_tr FermerCloselog_window_ui_trRCopier la slection vers le presse-papierCopy Selected to Clipboardlog_window_ui_tr,Journaux de PersepolisPersepolis Loglog_window_ui_trHRafrachir les messages des journauxRefresh Log Messageslog_window_ui_tr*Rapporter un problme Report Issuelog_window_ui_tr&</b>" existe dj !" already exists!mainwindow_src_ui_tr<b><center>Ce lien a t ajout auparavant ! tes-vous sr que vous voulez l'ajouter nouveau ?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Cette opration va supprimer les fichiers tlchargs de votre disque dur <br>DFINITIVEMENT !</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_trd<b><center>Cette opration va supprimer tous les lments de tlchargement dans cette file d'attente<br>de la liste "Tous les tlchargements" !</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr(<b>Connexions</b> : Connections: mainwindow_src_ui_tr*<b>Tlchargs</b> : Downloaded: mainwindow_src_ui_tr<<b>Temps restant estim</b> : Estimated time left: mainwindow_src_ui_tr<b>Lien</b> :  Link: mainwindow_src_ui_tr<b>Dsol ! Vous ne pouvez pas supprimer la file d'attente par dfaut !</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr <b>Statut</b> : Status: mainwindow_src_ui_tr6<b>Taux de transfert</b> : Transfer rate: mainwindow_src_ui_trP<center>Voulez-vous continuer ?</center>)
Do you want to continue?
mainwindow_src_ui_tr*Aria2 n'a pas rponduAria2 did not respondmainwindow_src_ui_tr.Aria2 n'a pas rpondu !Aria2 did not respond!mainwindow_src_ui_trAria2 n'a pas rpondu ! Soyez patient ! Persepolis essaye nouveau dans 2 secondes !FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr0Aria2 s'est dconnect !Aria2 disconnected!mainwindow_src_ui_tr\Vrifiez votre rseau et redmarrez Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr,Tlchargement terminDownload Completemainwindow_src_ui_tr0Tlchargement plannifiDownload Scheduledmainwindow_src_ui_tr.Dbut du tlchargementDownload Startsmainwindow_src_ui_tr2Tlchargement interrompuDownload Stoppedmainwindow_src_ui_tr~Le tlchargement est en cours par l'outil de recherche vido !(Download is in progress by video finder!mainwindow_src_ui_trErreur - Error - mainwindow_src_ui_trErreur...Error...mainwindow_src_ui_trErreur :Error: mainwindow_src_ui_tr$Cacher les options Hide optionsmainwindow_src_ui_trHRduire dans la zone de notificationMinimize to system traymainwindow_src_ui_tr$Le dplacement est Moving ismainwindow_src_ui_trIntrouvable Not Foundmainwindow_src_ui_tr>Pas assez d'espace libre dans :Not enough free space in:mainwindow_src_ui_tr8L'opration n'a pas russi !Operation was not successful!mainwindow_src_ui_trL'opration n'a pas russi ! Veuillez d'abord arrter la catgorie suivante :HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr4L'opration n'a pas russiOperation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trbPersepolis ne parvient pas se connecter Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr*Persepolis va arrterPersepolis is shutting downmainwindow_src_ui_trfPersepolis essaye de se connecter ! Soyez patient !,Persepolis is trying to connect! be patient!mainwindow_src_ui_trfPersepolis essaye de se connecter ! Soyez patient !+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr^Persepolis s'est reconnect Aria2 avec succs)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr*Veuillez patienter...Please Wait...mainwindow_src_ui_tr~Veuillez reprendre le tlchargement de la catgorie suivante :&Please resume the following category: mainwindow_src_ui_trtVeuillez d'abord arrter la progression du tlchargement.$Please stop download progress first.mainwindow_src_ui_tr`Veuillez d'abord arrter la catgorie suivante :*Please stop the following category first: mainwindow_src_ui_trPVeuillez arrter la catgorie suivante :$Please stop the following category: mainwindow_src_ui_trhVeuillez d'abord arrter le tlchargement suivant :*Please stop the following download first: mainwindow_src_ui_tr&Veuillez ressayer.Please try again.mainwindow_src_ui_tr0File d'attente arrte !Queue Stopped!mainwindow_src_ui_tr2File d'attente termine !Queue completed!mainwindow_src_ui_trPrt...Ready...mainwindow_src_ui_tr,Reconnexion Aria2...Reconnecting Aria2...mainwindow_src_ui_tr*Redmarrer PersepolisRestart Persepolismainwindow_src_ui_trZEnvoyer les tlchargements slectionns versSend selected downloads tomainwindow_src_ui_trEnvoyer versSend tomainwindow_src_ui_tr<Afficher la fentre principaleShow main Windowmainwindow_src_ui_tr(Afficher les options Show optionsmainwindow_src_ui_trtCertains lments ne se sont pas transfrs correctement !+Some items didn't transferred successfully!mainwindow_src_ui_trTrier parSort bymainwindow_src_ui_trTArrtez d'abord tous les tlchargements !Stop all downloads first!mainwindow_src_ui_trVArrter d'abord le tlchargement suivant :#Stop the following download first: mainwindow_src_ui_trRessayer Try againmainwindow_src_ui_trRessayer ! Try again!mainwindow_src_ui_tr:une erreur est s'est produitean error occurredmainwindow_src_ui_tr soyez patients ! be patient!mainwindow_src_ui_tr6ffmpeg n'est pas install !ffmpeg is not installed!mainwindow_src_ui_trtermin ! finished!mainwindow_src_ui_tr,erreur de multiplexage muxing errormainwindow_src_ui_tr<votre systme dans 20 secondesyour system in 20 secondsmainwindow_src_ui_trtlchargs downloadedmainwindow_ui_tr&Tlcharger &Downloadmainwindow_ui_tr&Modifier&Editmainwindow_ui_tr&Fichier&Filemainwindow_ui_tr &Aide&Helpmainwindow_ui_tr&File d'attente&Queuemainwindow_ui_tr&Afficher&Viewmainwindow_ui_trB<b>Statut du fichier audio : </b>Audio File Status: mainwindow_ui_trB<b>Statut du fichier audio : </b>Audio file status: mainwindow_ui_tr@<b>Statut du multiplexage : </b>Mixing status: mainwindow_ui_tr@<b>Statut du multiplexage : </b>Muxing status: mainwindow_ui_tr <b>Statut : </b>Status: mainwindow_ui_trB<b>Statut du fichier vido : </b>Video File Status: mainwindow_ui_trB<b>Statut du fichier vido : </b>Video file status: mainwindow_ui_tr<html><head/><body><p>Cette option empchera votre systme de se mettre en veille. Ceci est ncessaire si votre gestionnaire d'alimentation met le systme en veille automatiquement. </p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

mainwindow_ui_tr proposAboutmainwindow_ui_tr ActifActivemainwindow_ui_trRAjouter un nouveau lien de tlchargementAdd New Download Linkmainwindow_ui_trXAjouter un nouveau lien de tlchargement...Add New Download Link...mainwindow_ui_tr.Aprs le tlchargementAfter downloadmainwindow_ui_trAppliquerApplymainwindow_ui_trCatgorieCategorymainwindow_ui_trDVider la liste des tlchargementsClear Download Listmainwindow_ui_trrEffacer tous les lments dans la liste de tlchargement Clear all items in download listmainwindow_ui_trTerminCompletemainwindow_ui_trConnexions Connectionsmainwindow_ui_trHCrer une nouvelle file d'attente...Create New Queue...mainwindow_ui_tr~Crez un fichier texte et mettez-y des liens, ligne par ligne !5Create a text file and put links in it, line by line!mainwindow_ui_trfCrer une nouvelle file d'attente de tlchargementCreate new download queuemainwindow_ui_trjSupprimer les fichiers de tlchargement slectionnsDelete Selected Download Filesmainwindow_ui_trTlchargerDownloadmainwindow_ui_tr0Statut du tlchargementDownload Statusmainwindow_ui_trNTlcharger d'abord le bas de la liste"Download bottom of the list firstmainwindow_ui_trTlcharger des vidos ou de l'audio depuis Youtube, Vimeo, etc.1Download video or audio from Youtube, Vimeo, etc.mainwindow_ui_trTlchargs Downloadedmainwindow_ui_trModifierEditmainwindow_ui_trHeure de finEnd Timemainwindow_ui_tr ErreurErrormainwindow_ui_tr(Temps restant estimEstimated Time Leftmainwindow_ui_trQuitterExitmainwindow_ui_trFichierFilemainwindow_ui_trNom de fichier File Namemainwindow_ui_tr"Taille du fichier File Sizemainwindow_ui_tr4Trouver des liens vido...Find Video Links...mainwindow_ui_tr*Date de premier essaiFirst Try Datemainwindow_ui_trAideHelpmainwindow_ui_tr$Cacher les options Hide Optionsmainwindow_ui_trZImporter des liens depuis un fichier texte...Import Links from Text File...mainwindow_ui_tr6Garder le systme veill !Keep System Awake!mainwindow_ui_tr*Date de dernier essai Last Try Datemainwindow_ui_tr$Limiter la vitesse Limit Speedmainwindow_ui_trLienLinkmainwindow_ui_trHRduire dans la zone de notificationMinimize to System Traymainwindow_ui_trDplacer les fichiers de tlchargement slectionns vers un autre dossier.Move Selected Download Files to Another Foldermainwindow_ui_trDplacer les fichiers de tlchargement slectionns vers un autre dossier...1Move Selected Download Files to Another Folder...mainwindow_ui_trFDescendre les lments slectionnsMove Selected Items Downmainwindow_ui_tr@Monter les lments slectionnsMove Selected Items Upmainwindow_ui_trpDescendre l'lment actuellement slectionn d'une ligne-Move currently selected items down by one rowmainwindow_ui_trjMonter l'lment actuellement slectionn d'une ligne+Move currently selected items up by one rowmainwindow_ui_trInactif Not Activemainwindow_ui_tr\Ouvrir le dossier de tlchargement par dfautOpen Default Download Foldermainwindow_ui_trFOuvrir le dossier de tlchargementOpen Download Foldermainwindow_ui_tr"Ouvrir fichier... Open File...mainwindow_ui_trBMettre le tlchargement en pausePause Downloadmainwindow_ui_trPourcentage Percentagemainwindow_ui_trRGestionnaire de tlchargement PersepolisPersepolis Download Managermainwindow_ui_trPrfrences Preferencesmainwindow_ui_trProgressionProgressmainwindow_ui_trProprits Propertiesmainwindow_ui_trFile d'attenteQueuemainwindow_ui_tr6Supprimer la file d'attente Remove Queuemainwindow_ui_trlSupprimer les tlchargements slectionns de la liste#Remove Selected Downloads from Listmainwindow_ui_tr<Supprimer cette file d'attenteRemove this queuemainwindow_ui_tr*Rapporter un problmeReport an Issuemainwindow_ui_tr*Rapporter un problmeReport an issuemainwindow_ui_tr6Reprendre le tlchargementResume Downloadmainwindow_ui_tr6Afficher le fichier journal Show Log Filemainwindow_ui_tr4Afficher la barre de menus Show Menubarmainwindow_ui_tr6Afficher le panneau latralShow Side Panelmainwindow_ui_trZAfficher l'icne dans la zone de notificationShow System Tray Iconmainwindow_ui_trhAfficher/cacher l'icne dans la zone de notificationShow/Hide system tray iconmainwindow_ui_trArrter Shut Downmainwindow_ui_tr TailleSizemainwindow_ui_trTrier parSort bymainwindow_ui_tr0Dmarrer le multiplexage Start Mixingmainwindow_ui_tr4Dmarrer la file d'attente Start Queuemainwindow_ui_trHeure de dbut Start Timemainwindow_ui_tr:Dmarrer cette file d'attenteStart this queuemainwindow_ui_trDmarrStartedmainwindow_ui_tr StatutStatusmainwindow_ui_trNArrter tous les tlchargements actifsStop All Active Downloadsmainwindow_ui_tr2Arrter le tlchargement Stop Downloadmainwindow_ui_tr2Arrter la file d'attente Stop Queuemainwindow_ui_tr8Arrter cette file d'attenteStop this queuemainwindow_ui_trBArrter/Annuler le tlchargementStop/Cancel Downloadmainwindow_ui_tr"Taux de transfert Transfer Ratemainwindow_ui_tr(&Recherche de vidos V&ideo Findermainwindow_ui_tr&Recherche de vidos Video Findermainwindow_ui_trAfficherViewmainwindow_ui_tr.Aria2 n'a pas rpondu !Aria2 did not respond!progress_src_ui_tr0Aria2 s'est dconnect !Aria2 disconnected!progress_src_ui_trfPersepolis essaye de se connecter ! Soyez patient !,Persepolis is trying to connect! be patient!progress_src_ui_tr&Veuillez ressayer.Please try again.progress_src_ui_trRessayer ! Try again!progress_src_ui_tr.Aprs le tlchargementAfter downloadprogress_ui_trAppliquerApplyprogress_ui_tr:Information de tlchargementDownload Informationprogress_ui_tr2Options de tlchargementDownload Optionsprogress_ui_trTlchargs : Downloaded:progress_ui_tr,Temps restant estim :Estimated time left:progress_ui_tr$Limiter la vitesse Limit speedprogress_ui_tr Lien :Link: progress_ui_tr,Nombre de connexions :Number of connections: progress_ui_trMettre en pausePauseprogress_ui_trRGestionnaire de tlchargement PersepolisPersepolis Download Managerprogress_ui_trReprendreResumeprogress_ui_trArrter Shut Downprogress_ui_trStatut : Status: progress_ui_trArrterStopprogress_ui_tr&Taux de transfert :Transfer rate: progress_ui_tr(<b><center>Veuillez redmarrer Persepolis !</center></b><br><center>Certains changements prendront effet aprs le redmarrage de Persepolis</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Ce raccourci a t utilis auparavant ! Utilisez-en un autre !</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr.Redmarrer Persepolis !Restart Persepolis!setting_src_ui_tr<<html><head/><body><p> Spcifier un numero de port pour couter un serveur JSON-RPC/XML-RPC. Valeurs possibles : 1024 - 65535 Dfaut : 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trP<html><head/><body><p>Attention : un chemin incorrect peut causer des problmes ! Procdez avec prudence ou ne changez pas les paramtres par dfaut !</p></body></html>

Attention: Wrong path may cause problems! Do it carefully or don't change default setting!

 setting_ui_trh<html><head/><body><p>Format HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Dfinir le nombre de tentatives si le tlchargement choue.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>Dfinit le nombre de secondes de temporisation entre les tentatives. Le gestionnaire de tlchargement ressayera les tlchargements lorsque le serveur HTTP retourne une rponse 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Dfinir la temporisation en secondes. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Cette fonctionnalit pourrait ne pas fonctionner dans votre systme d'exploitation.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Cette option vite les checs de handshake SSL/TLS. Utilisez-la vos risques et prils !</p></body></html>r

This option avoids SSL/TLS handshake failure. But use it at your own risk!

 setting_ui_tr<html><head/><body><p>Cette option empchera votre systme de se mettre en veille. Ceci est ncessaire si votre gestionnaire d'alimentation met le systme en veille automatiquement. </p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

 setting_ui_tr<html><head/><body><p>Utiliser plusieurs connexion peut aider acclrer votre tlchargement.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr ActionAction setting_ui_trRAjouter un nouveau lien de tlchargementAdd New Download Link setting_ui_tr:Ajouter un nouveau lien vidoAdd New Video Link setting_ui_trAnnulerCancel setting_ui_trCatgorieCategory setting_ui_trModifierChange setting_ui_trJModifier le chemin par dfaut d'aria2Change Aria2 default path setting_ui_tr$Thme de couleur :Color scheme:  setting_ui_tr:Personnalisation des colonnesColumns Customization setting_ui_trConnexions Connections setting_ui_trCrer des sous-dossiers pour Musique, Vidos, etc. dans le dossier de tlchargement par dfautBCreate subfolders for Music,Videos, ... in default download folder setting_ui_trPar dfautDefaults setting_ui_trDSupprimer les lments tlchargsDelete Download Items setting_ui_trlNe pas utiliser de certificats pour vrifier les pairs)Don't use certificate to verify the peers setting_ui_tr2Options de tlchargementDownload Options setting_ui_tr6Dossier de tlchargement :Download folder:  setting_ui_trTlchargs Downloaded setting_ui_tr@Activer les sons de notificationEnable Notification Sounds setting_ui_trZActiver l'icne dans la zone de notification.Enable system tray icon setting_ui_tr(Temps restant estimEstimated Time Left setting_ui_trNom de fichier File Name setting_ui_tr*Date de premier essaiFirst Try Date setting_ui_trPolice :Font:  setting_ui_trvCacher la fentre principale si le bouton fermer est cliqu)Hide main window if close button clicked. setting_ui_trIcnes :Icons:  setting_ui_tr l'ouverture du navigateur, dmarrer Persepolis dans la zone de notifications5If browser is opened, start Persepolis in system tray setting_ui_trTImporter des liens depuis un fichier texteImport Links from Text File setting_ui_tr6Garder le systme veill !Keep system awake! setting_ui_trLangue : Language:  setting_ui_tr*Date de dernier essai Last Try Date setting_ui_trNombre maximum de lignes capturer :<br/><small>(Si le navigateur envoie plusieurs liens vido en mme temps)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_trHRduire vers la zone de notificationMinimize to System Tray setting_ui_trFDescendre les lments slectionnsMove Selected Items Down setting_ui_tr@Monter les lments slectionnsMove Selected Items Up setting_ui_tr.Type de notification : Notification type:  setting_ui_trNotifications Notifications setting_ui_tr,Nombre de connexions :Number of connections:  setting_ui_tr,Nombre de tentatives :Number of tries:  setting_ui_trOKOK setting_ui_trPourcentage Percentage setting_ui_trPrfrences Preferences setting_ui_tr@Appuyer sur de nouvelles touchesPress new keys setting_ui_trQuitterQuit setting_ui_tr(Numro de port RPC :RPC port number:  setting_ui_tr@Retirer les lments tlchargsRemove Download Items setting_ui_tr<Lancer Persepolis au dmarrageRun Persepolis at startup setting_ui_tr Enregistrer sousSave As setting_ui_trRaccourciShortcut setting_ui_trRaccourcis Shortcuts setting_ui_trAfficher une fentre d'annonce lorsque le tlchargement est termin7Show download complete dialog when download is finished setting_ui_trlAfficher la fentre de progression des tlchargementsShow download progress window setting_ui_tr4Afficher la barre de menus Show menubar setting_ui_tr6Afficher le panneau latralShow side panel setting_ui_tr.Afficher ces colonnes :Show these columns: setting_ui_tr TailleSize setting_ui_trTaille :Size:  setting_ui_tr StatutStatus setting_ui_trStyle :Style:  setting_ui_tr4Temporisation (secondes) :Timeout (seconds):  setting_ui_trPTaille des icnes de la barre d'outils :Toolbar icons size:  setting_ui_tr"Taux de transfert Transfer Rate setting_ui_tr@Option de la recherche de vidosVideo Finder Options setting_ui_trVolume : Volume:  setting_ui_trTemps d'attente entre chaque tlchargement d'une file d'attente :+Wait period between each download in queue: setting_ui_trbTemps d'attente entre les tentatives (secondes) :'Wait period between retries (seconds):  setting_ui_tr:Ajouter la file d'attente :Add to queue:  text_ui_trAnnulerCancel text_ui_trHChanger le dossier de tlchargementChange Download Folder text_ui_tr&Tout dslectionner Deselect All text_ui_tr2Options de tlchargementDownload Options text_ui_tr6Dossier de tlchargement :Download folder:  text_ui_tr@Mot de passe du tlchargement :Download password:  text_ui_trfNom d'utilisateur et mot de passe du tlchargementDownload username and password text_ui_trJNom d'utilisateur du tlchargement :Download username:  text_ui_trIP :IP: text_ui_tr$Limiter la vitesse Limit speed text_ui_tr LiensLinks text_ui_tr,Nombre de connexions :Number of connections: text_ui_trOKOK text_ui_trRGestionnaire de tlchargement PersepolisPersepolis Download Manager text_ui_tr Port :Port: text_ui_tr ProxyProxy text_ui_tr.Mot de passe du proxy :Proxy password:  text_ui_tr8Nom d'utilisateur du proxy :Proxy username:  text_ui_tr"Tout slectionner Select All text_ui_trB<b>Statut du fichier audio : </b>Audio file status: video_finder_progress_ui_tr@<b>Statut du multiplexage : </b>Muxing status: video_finder_progress_ui_trB<b>Statut du fichier vido : </b>Video file status: video_finder_progress_ui_tr Options avancesAdvanced optionsytaddlink_src_ui_trFormat audio : Audio format:ytaddlink_src_ui_tr:Rcuprer la liste des mdiasFetch Media Listytaddlink_src_ui_trLRcupration des informations mdia...Fetching Media Info...ytaddlink_src_ui_trHVeuillez saisir un lien vido validePlease enter a valid video linkytaddlink_src_ui_tr,Slectionner un formatSelect a formatytaddlink_src_ui_tr&Recherche de vidos Video Finderytaddlink_src_ui_trFormat vido : Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_fr_FR.ts000066400000000000000000002545701464161131600244770ustar00rootroot00000000000000 about_ui_tr About Persepolis À propos de Persepolis Persepolis Download Manager Gestionnaire de téléchargement Persepolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Développeurs Translators Traducteurs License Licence OK OK Special thanks to: Remerciement spéciaux à : AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.2.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: Ajouter à la catégorie : Proxy Proxy IP: IP : Port: Port : Change Download Folder Changer le dossier de téléchargement Download Folder: Dossier de téléchargement : Cancel Annuler OK OK Link Lien More Options Plus d'options Advanced Options Options avancées Referrer: Référence : Header: En-tête : Load cookies: Charger cookies : User agent: Agent utilisateur : Add Download Link Ajouter un lien de téléchargement Download link: Lien de téléchargement : Change file name: Changer le nom de fichier : Detect System Proxy Settings Détecter les paramètres système de proxy Proxy password: Mot de passe du proxy : Proxy username: Nom d'utilisateur du proxy : Download username and password Nom d'utilisateur et mot de passe du téléchargement Download username: Nom d'utilisateur du téléchargement : Download password: Mot de passe du téléchargement : Remember this path Se souvenir de ce chemin Start time Heure de début End time Heure de fin Limit speed Limiter la vitesse Number of connections: Nombre de connexions : Download Later Télécharger plus tard HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Nom de fichier</b> : <b>Size</b>: <b>Taille</b> : after_download_ui_tr Persepolis Download Manager Gestionnaire de téléchargement Persepolis Open File Ouvrir fichier Open Download Folder Ouvrir le dossier de téléchargement OK OK Don't show this message again. Ne plus afficher ce message. <b>Download Completed!</b> <b>Téléchargement terminé !</b> <b>Save as</b>: <b>Enregistrer sous</b> : <b>Link</b>: <b>Lien</b> : log_window_ui_tr Persepolis Log Journaux de Persepolis Report Issue Rapporter un problème Close Fermer Copy Selected to Clipboard Copier la sélection vers le presse-papier Refresh Log Messages Rafraîchir les messages des journaux Clear Log Messages Effacer les messages des journaux mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! File d'attente arrêtée ! Persepolis is shutting down Persepolis va arrêter your system in 20 seconds votre système dans 20 secondes Queue completed! File d'attente terminée ! Show main Window Afficher la fenêtre principale Please Wait... Veuillez patienter... Ready... Prêt... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 n'a pas répondu ! Soyez patient ! Persepolis essaye à nouveau dans 2 secondes ! Error... Erreur... Persepolis can not connect to Aria2 Persepolis ne parvient pas à se connecter à Aria2 Check your network & Restart Persepolis Vérifiez votre réseau et redémarrez Persepolis Restart Persepolis Redémarrer Persepolis Reconnecting Aria2... Reconnexion à Aria2... Persepolis reconnected aria2 successfully Persepolis s'est reconnecté à Aria2 avec succès Error: Erreur : <b>Link</b>: <b>Lien</b> : <b>Downloaded</b>: <b>Téléchargés</b> : <b>Transfer rate</b>: <b>Taux de transfert</b> : <b>Estimated time left</b>: <b>Temps restant estimé</b> : <b>Connections</b>: <b>Connexions</b> : <b>Status</b>: <b>Statut</b> : Download Stopped Téléchargement interrompu Error - Erreur - Download Complete Téléchargement terminé <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Ce lien a été ajouté auparavant ! Êtes-vous sûr que vous voulez l'ajouter à nouveau ?</center></b> Download Starts Début du téléchargement Download Scheduled Téléchargement plannifié Operation was not successful. L'opération n'a pas réussi Please resume the following category: Veuillez reprendre le téléchargement de la catégorie suivante : Aria2 disconnected! Aria2 s'est déconnecté ! Persepolis is trying to connect!be patient! Persepolis essaye de se connecter ! Soyez patient ! Aria2 did not respond! Aria2 n'a pas répondu ! Try again! Réessayer ! Aria2 did not respond Aria2 n'a pas répondu Try again Réessayer Please stop the following category: Veuillez arrêter la catégorie suivante : Persepolis is trying to connect! be patient! Persepolis essaye de se connecter ! Soyez patient ! Please try again. Veuillez réessayer. Minimize to system tray Réduire dans la zone de notification Not Found Introuvable Operation was not successful! L'opération n'a pas réussi ! Operation was not successful! Please stop the following category first: L'opération n'a pas réussi ! Veuillez d'abord arrêter la catégorie suivante : Please stop the following download first: Veuillez d'abord arrêter le téléchargement suivant : <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Cette opération va supprimer les fichiers téléchargés de votre disque dur <br>DÉFINITIVEMENT !</center></b> <center>Do you want to continue?</center> <center>Voulez-vous continuer ?</center> Please stop the following category first: Veuillez d'abord arrêter la catégorie suivante : </b>" already exists! </b>" existe déjà ! Send selected downloads to Envoyer les téléchargements sélectionnés vers Send to Envoyer vers Sort by Trier par <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Cette opération va supprimer tous les éléments de téléchargement dans cette file d'attente<br>de la liste "Tous les téléchargements" !</center></b> <b>Sorry! You can't remove default queue!</b> <b>Désolé ! Vous ne pouvez pas supprimer la file d'attente par défaut !</b> Some items didn't transferred successfully! Certains éléments ne se sont pas transférés correctement ! Please stop download progress first. Veuillez d'abord arrêter la progression du téléchargement. Hide options Cacher les options Show options Afficher les options Stop all downloads first! Arrêtez d'abord tous les téléchargements ! Moving is Le déplacement est finished! terminé ! Download is in progress by video finder! Le téléchargement est en cours par l'outil de recherche vidéo ! be patient! soyez patients ! Stop the following download first: Arrêter d'abord le téléchargement suivant : ffmpeg is not installed! ffmpeg n'est pas installé ! Not enough free space in: Pas assez d'espace libre dans : muxing error erreur de multiplexage an error occurred une erreur est s'est produite Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Fichier Edit Modifier View Afficher Download Télécharger Queue File d'attente Video Finder Recherche de vidéos Help Aide Sort by Trier par Persepolis Download Manager Gestionnaire de téléchargement Persepolis Category Catégorie File Name Nom de fichier Status Statut Size Taille Downloaded Téléchargés Percentage Pourcentage Connections Connexions Link Lien &File &Fichier &Edit &Modifier &View &Afficher &Download &Télécharger &Queue &File d'attente &Help &Aide Show/Hide system tray icon Afficher/cacher l'icône dans la zone de notification Add New Download Link Ajouter un nouveau lien de téléchargement Resume Download Reprendre le téléchargement Pause Download Mettre le téléchargement en pause Stop Download Arrêter le téléchargement Stop/Cancel Download Arrêter/Annuler le téléchargement Properties Propriétés Progress Progression Exit Quitter Clear all items in download list Effacer tous les éléments dans la liste de téléchargement Create new download queue Créer une nouvelle file d'attente de téléchargement Remove this queue Supprimer cette file d'attente Start this queue Démarrer cette file d'attente Stop this queue Arrêter cette file d'attente Move currently selected items up by one row Monter l'élément actuellement sélectionné d'une ligne Move currently selected items down by one row Descendre l'élément actuellement sélectionné d'une ligne Preferences Préférences About À propos Report an issue Rapporter un problème Start Time Heure de début End Time Heure de fin Download bottom of the list first Télécharger d'abord le bas de la liste Limit Speed Limiter la vitesse Apply Appliquer After download Après le téléchargement Shut Down Arrêter V&ideo Finder &Recherche de vidéos <b>Video file status: </b> <b>Statut du fichier vidéo : </b> <b>Audio file status: </b> <b>Statut du fichier audio : </b> <b>Status: </b> <b>Statut : </b> <b>Muxing status: </b> <b>Statut du multiplexage : </b> downloaded téléchargés Active Actif Not Active Inactif Started Démarré Error Erreur Complete Terminé Transfer Rate Taux de transfert Estimated Time Left Temps restant estimé First Try Date Date de premier essai Last Try Date Date de dernier essai Find Video Links... Trouver des liens vidéo... Download video or audio from Youtube, Vimeo, etc. Télécharger des vidéos ou de l'audio depuis Youtube, Vimeo, etc. Stop All Active Downloads Arrêter tous les téléchargements actifs File Size Taille du fichier Download Status Statut du téléchargement Show System Tray Icon Afficher l'icône dans la zone de notification Show Menubar Afficher la barre de menus Show Side Panel Afficher le panneau latéral Minimize to System Tray Réduire dans la zone de notification Add New Download Link... Ajouter un nouveau lien de téléchargement... Import Links from Text File... Importer des liens depuis un fichier texte... Create a text file and put links in it, line by line! Créez un fichier texte et mettez-y des liens, ligne par ligne ! Open File... Ouvrir fichier... Open Download Folder Ouvrir le dossier de téléchargement Open Default Download Folder Ouvrir le dossier de téléchargement par défaut Clear Download List Vider la liste des téléchargements Remove Selected Downloads from List Supprimer les téléchargements sélectionnés de la liste Delete Selected Download Files Supprimer les fichiers de téléchargement sélectionnés Move Selected Download Files to Another Folder... Déplacer les fichiers de téléchargement sélectionnés vers un autre dossier... Move Selected Download Files to Another Folder Déplacer les fichiers de téléchargement sélectionnés vers un autre dossier Create New Queue... Créer une nouvelle file d'attente... Remove Queue Supprimer la file d'attente Start Queue Démarrer la file d'attente Stop Queue Arrêter la file d'attente Move Selected Items Up Monter les éléments sélectionnés Move Selected Items Down Descendre les éléments sélectionnés Report an Issue Rapporter un problème Show Log File Afficher le fichier journal Hide Options Cacher les options Keep System Awake! Garder le système éveillé ! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>Cette option empêchera votre système de se mettre en veille. Ceci est nécessaire si votre gestionnaire d'alimentation met le système en veille automatiquement. </p></body></html> Start Mixing Démarrer le multiplexage <b>Video File Status: </b> <b>Statut du fichier vidéo : </b> <b>Audio File Status: </b> <b>Statut du fichier audio : </b> <b>Mixing status: </b> <b>Statut du multiplexage : </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! Aria2 s'est déconnecté ! Persepolis is trying to connect! be patient! Persepolis essaye de se connecter ! Soyez patient ! Aria2 did not respond! Aria2 n'a pas répondu ! Please try again. Veuillez réessayer. Try again! Réessayer ! progress_ui_tr Persepolis Download Manager Gestionnaire de téléchargement Persepolis Status: Statut : Downloaded: Téléchargés : Transfer rate: Taux de transfert : Estimated time left: Temps restant estimé : Number of connections: Nombre de connexions : Download Information Information de téléchargement After download Après le téléchargement Apply Appliquer Shut Down Arrêter Download Options Options de téléchargement Resume Reprendre Pause Mettre en pause Stop Arrêter Link: Lien : Limit speed Limiter la vitesse setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Veuillez redémarrer Persepolis !</center></b><br><center>Certains changements prendront effet après le redémarrage de Persepolis</center> Restart Persepolis! Redémarrer Persepolis ! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Ce raccourci a été utilisé auparavant ! Utilisez-en un autre !</center></b> setting_ui_tr Preferences Préférences <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Définir le nombre de tentatives si le téléchargement échoue.</p></body></html> Number of tries: Nombre de tentatives : <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Définit le nombre de secondes de temporisation entre les tentatives. Le gestionnaire de téléchargement réessayera les téléchargements lorsque le serveur HTTP retourne une réponse 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Définir la temporisation en secondes. </p></body></html> Timeout (seconds): Temporisation (secondes) : <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Utiliser plusieurs connexion peut aider à accélérer votre téléchargement.</p></body></html> Number of connections: Nombre de connexions : RPC port number: Numéro de port RPC : <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Spécifier un numero de port pour écouter un serveur JSON-RPC/XML-RPC. Valeurs possibles : 1024 - 65535 Défaut : 6801 </p></body></html> Change Aria2 default path Modifier le chemin par défaut d'aria2 Change Modifier Download Options Options de téléchargement Volume: Volume : Notifications Notifications Style: Style : Color scheme: Thème de couleur : Icons: Icônes : Notification type: Type de notification : Font: Police : Size: Taille : Run Persepolis at startup Lancer Persepolis au démarrage Keep system awake! Garder le système éveillé ! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Format HH:MM</p></body></html> File Name Nom de fichier Status Statut Size Taille Downloaded Téléchargés Percentage Pourcentage Connections Connexions Category Catégorie Video Finder Options Option de la recherche de vidéos Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Nombre maximum de lignes à capturer :<br/><small>(Si le navigateur envoie plusieurs liens vidéo en même temps)</small> Defaults Par défaut Cancel Annuler OK OK Press new keys Appuyer sur de nouvelles touches Action Action Shortcut Raccourci Shortcuts Raccourcis Quit Quitter Hide main window if close button clicked. Cacher la fenêtre principale si le bouton fermer est cliqué <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Cette fonctionnalité pourrait ne pas fonctionner dans votre système d'exploitation.</p></body></html> Language: Langue : Minimize to System Tray Réduire vers la zone de notification Remove Download Items Retirer les éléments téléchargés Delete Download Items Supprimer les éléments téléchargés Move Selected Items Up Monter les éléments sélectionnés Move Selected Items Down Descendre les éléments sélectionnés Add New Download Link Ajouter un nouveau lien de téléchargement Add New Video Link Ajouter un nouveau lien vidéo Import Links from Text File Importer des liens depuis un fichier texte Wait period between retries (seconds): Temps d'attente entre les tentatives (secondes) : Wait period between each download in queue: Temps d'attente entre chaque téléchargement d'une file d'attente : Don't use certificate to verify the peers Ne pas utiliser de certificats pour vérifier les pairs <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Cette option évite les échecs de handshake SSL/TLS. Utilisez-la à vos risques et périls !</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> <html><head/><body><p>Attention : un chemin incorrect peut causer des problèmes ! Procédez avec prudence ou ne changez pas les paramètres par défaut !</p></body></html> Download folder: Dossier de téléchargement : Create subfolders for Music,Videos, ... in default download folder Créer des sous-dossiers pour Musique, Vidéos, etc. dans le dossier de téléchargement par défaut Save As Enregistrer sous Enable Notification Sounds Activer les sons de notification Toolbar icons size: Taille des icônes de la barre d'outils : If browser is opened, start Persepolis in system tray À l'ouverture du navigateur, démarrer Persepolis dans la zone de notifications Enable system tray icon Activer l'icône dans la zone de notification. Show download complete dialog when download is finished Afficher une fenêtre d'annonce lorsque le téléchargement est terminé Show menubar Afficher la barre de menus Show side panel Afficher le panneau latéral Show download progress window Afficher la fenêtre de progression des téléchargements <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>Cette option empêchera votre système de se mettre en veille. Ceci est nécessaire si votre gestionnaire d'alimentation met le système en veille automatiquement. </p></body></html> Show these columns: Afficher ces colonnes : Transfer Rate Taux de transfert Estimated Time Left Temps restant estimé First Try Date Date de premier essai Last Try Date Date de dernier essai Columns Customization Personnalisation des colonnes Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> text_ui_tr Persepolis Download Manager Gestionnaire de téléchargement Persepolis Links Liens Select All Tout sélectionner Deselect All Tout désélectionner Add to queue: Ajouter à la file d'attente : Proxy Proxy IP: IP : Port: Port : Change Download Folder Changer le dossier de téléchargement OK OK Cancel Annuler Download Options Options de téléchargement Proxy password: Mot de passe du proxy : Proxy username: Nom d'utilisateur du proxy : Download username and password Nom d'utilisateur et mot de passe du téléchargement Download username: Nom d'utilisateur du téléchargement : Download password: Mot de passe du téléchargement : Download folder: Dossier de téléchargement : Limit speed Limiter la vitesse Number of connections: Nombre de connexions : video_finder_progress_ui_tr <b>Video file status: </b> <b>Statut du fichier vidéo : </b> <b>Audio file status: </b> <b>Statut du fichier audio : </b> <b>Muxing status: </b> <b>Statut du multiplexage : </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Recherche de vidéos Fetch Media List Récupérer la liste des médias Select a format Sélectionner un format Please enter a valid video link Veuillez saisir un lien vidéo valide Fetching Media Info... Récupération des informations média... Video format: Format vidéo : Audio format: Format audio : Advanced options Options avancées persepolisdm-persepolis-867ee76/resources/locales/ui_hu.qm000066400000000000000000000700411464161131600240710ustar00rootroot00000000000000]>I_B`GA+H*/q*%/*0/+0RG2)Hw93SHw9DNLb6S#bnVF-WizWizc3WWcaX<&­Ahg5b|Zi&pRJg2DS cIQ lu 57u 5X/c#pA&0 a,# nOG QK 1^ Z*E<<vKFDKFW_I@9!{X-y% ##*쑀$]I3];e6z^USz2a: tg8IIUIaQUm^ lI"3WXjf a-T.0(1T6,1TW_. #@_`i<1bv 5F_r>0>dPX ?_9Ze o7wfG-B0-Bc9N19Nd<=`G(4aM?$]1xDZ,xDZCeK C^(Y)*E|֣;/315h *=u<6`Aq|-% +@ > $@ AN W g` mp+ }Q ~. D F0% Ub U: U\ O g)r ^N, Mh "ZW9= _ , _2 if+ if>| s> `G` C Yp^( ?f (_ ,!*n FqE Uq+Z `r`[B gn, nT vQ z  {Ǝ' w3 wD c W[ 4 W  78o A 5> (=& 2Sc e.> e.G st? q q e NJ ) E [ ;^ \ [ ( c ] C/( \e4 q B B Z B: BFo Bb i".4.d:F7IS7IeB_'VxBxBaNNJI1%;02 2B a6?r%]>&]>CViT^{d}p  VYO[[ $qZ$qA?GQ."{Vih0<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr*A Persepolis nvjegyeAbout Persepolis about_ui_trKsztQk Developers about_ui_trLicenszLicense about_ui_trOKOK about_ui_tr6Persepolis Download ManagerPersepolis Download Manager about_ui_trKln ksznet:Special thanks to: about_ui_trFordtk Translators about_ui_tr,Hozads kategrihoz:Add to category:  addlink_ui_trHalad opcikAdvanced Options addlink_ui_tr MgseCancel addlink_ui_tr8Letlts helynek mdostsaChange Download Folder addlink_ui_trLetlts helye:Download Folder:  addlink_ui_trFejlc:Header:  addlink_ui_trIP: IP:  addlink_ui_trLinkLink addlink_ui_tr Stik betltse:Load cookies:  addlink_ui_trTovbbi opcik More Options addlink_ui_trOKOK addlink_ui_tr Port:Port: addlink_ui_tr ProxyProxy addlink_ui_trHivatkoz: Referrer:  addlink_ui_tr(Felhasznli gynk: User agent:  addlink_ui_tr$<b>File name</b>: File name: after_download_src_ui_tr<b>Size</b>:  Size: after_download_src_ui_tr OK  OK after_download_ui_trFjl megnyitsa Open File after_download_ui_tr4<b>Letlts elkszlt!</b>Download Completed!after_download_ui_tr<b>Link</b>:  Link: after_download_ui_tr.<b>Ments msknt</b>: Save as: after_download_ui_trDNe jelenjen meg jra ez az zenet.Don't show this message again.after_download_ui_tr8Letlts helynek megnyitsaOpen Download Folderafter_download_ui_tr6Persepolis Download ManagerPersepolis Download Managerafter_download_ui_trPersepolis LogPersepolis Loglog_window_ui_trHibajelents Report Issuelog_window_ui_tr$</b>" mr ltezik!" already exists!mainwindow_src_ui_tr<b><center>Ezt a linket korbban mr hozzadtad! Biztos, hogy ismt hozzadod?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Ez a mqvelet trlni fogja a letlttt fjlokat a merevlemezrQl.<br>VGLEGESEN!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Ez a mqvelet eltvoltja a vrlista sszes letlttt elemt<br>az "sszes letlts" listbl!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr(<b>Kapcsolatok</b>: Connections: mainwindow_src_ui_tr"<b>Letltve</b>: Downloaded: mainwindow_src_ui_tr,<b>HtralvQ idQ</b>: Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trl<b>Az alaprtelmezett vrlista nem tvolthat el</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr <b>llapot</b>: Status: mainwindow_src_ui_tr,<b>tviteli rta</b>: Transfer rate: mainwindow_src_ui_trD<center>Akarod folytatni?</center>)
Do you want to continue?
mainwindow_src_ui_tr,Az Aria2 nem vlaszoltAria2 did not respondmainwindow_src_ui_tr.Az Aria2 nem vlaszolt!Aria2 did not respond!mainwindow_src_ui_trAz Aria2 nem vlaszolt! Legyl trelmes! A Persepolis jra megprblja 2 msodperc mlva!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr*Az Aria2 sztkapcsoltAria2 disconnected!mainwindow_src_ui_trhEllenQrizd a hlzatot s indtsd jra a Persepolist'Check your network & Restart Persepolismainwindow_src_ui_tr$Letlts befejezveDownload Completemainwindow_src_ui_tr$temezett letltsDownload Scheduledmainwindow_src_ui_tr"Letlts indtsaDownload Startsmainwindow_src_ui_tr&Letlts meglltvaDownload Stoppedmainwindow_src_ui_trXA letlts folyamatban van a videokeresQvel!(Download is in progress by video finder!mainwindow_src_ui_tr Hiba -Error - mainwindow_src_ui_trHiba...Error...mainwindow_src_ui_tr Hiba:Error: mainwindow_src_ui_tr Opcik elrejtse Hide optionsmainwindow_src_ui_tr*Kicsinyts a tlcraMinimize to system traymainwindow_src_ui_trMozgats Moving ismainwindow_src_ui_trNem tallhat Not Foundmainwindow_src_ui_tr(Nincs elg hely itt:Not enough free space in:mainwindow_src_ui_tr.A mqvelet nem sikerlt!Operation was not successful!mainwindow_src_ui_trA mqvelet nem sikerlt! Krlek, elQszr lltsd le a kvetkezQ kategrit:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr.A mqvelet nem sikerlt.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trZA Persepolis nem tud csatlakozni az Aria2-hz#Persepolis can not connect to Aria2mainwindow_src_ui_tr$A Persepolis lellPersepolis is shutting downmainwindow_src_ui_trRA Persepolis csatlakozni prbl. Trelem!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trdA Persepolis megprbl csatlakozni! Lgy trelmes!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trhA Persepolis sikeresen jracsatlakozott az Aria2-hz)Persepolis reconnected aria2 successfullymainwindow_src_ui_trKrlek vrj...Please Wait...mainwindow_src_ui_tr@Folytasd a kvetkezQ kategrit:&Please resume the following category: mainwindow_src_ui_trhKrlek, elQszr lltsd le a letltsi folyamatokat.$Please stop download progress first.mainwindow_src_ui_trdKrlek, elQszr lltsd le a kvetkezQ kategrit:*Please stop the following category first: mainwindow_src_ui_trTKrlek, lltsd le a kvetkezQ kategrit:$Please stop the following category: mainwindow_src_ui_trbKrlek, elQszr lltsd le a kvetkezQ letltst:*Please stop the following download first: mainwindow_src_ui_tr*Krlek, prbld jra.Please try again.mainwindow_src_ui_tr*Vrlista meglltva!Queue Stopped!mainwindow_src_ui_tr4A sorbarendezs elkszlt!Queue completed!mainwindow_src_ui_trKszenlt...Ready...mainwindow_src_ui_tr>jracsatlakozs az Aria2-hz...Reconnecting Aria2...mainwindow_src_ui_tr.Persepolis jraindtsaRestart Persepolismainwindow_src_ui_tr>Kivlasztott letltsek kldseSend selected downloads tomainwindow_src_ui_tr KldsSend tomainwindow_src_ui_tr*FQablak megjelentseShow main Windowmainwindow_src_ui_tr(Opcik megjelentse Show optionsmainwindow_src_ui_trLNhny elemet nem sikerlt thelyezni.+Some items didn't transferred successfully!mainwindow_src_ui_trRendezs mdjaSort bymainwindow_src_ui_trNElQszQr lltsd le az sszes letltst!Stop all downloads first!mainwindow_src_ui_trRElQszr lltsd le a kvetkezQ letltst:#Stop the following download first: mainwindow_src_ui_trjraprblkozs Try againmainwindow_src_ui_trPrbld jra! Try again!mainwindow_src_ui_tr lgy trelemmel! be patient!mainwindow_src_ui_tr4Az ffmpeg nincs teleptve!ffmpeg is not installed!mainwindow_src_ui_trbefejezve! finished!mainwindow_src_ui_trmuxing hiba muxing errormainwindow_src_ui_tr2a rendszered 20 mp. mlvayour system in 20 secondsmainwindow_src_ui_trletltve downloadedmainwindow_ui_trLetlts &Downloadmainwindow_ui_trSzerkeszts&Editmainwindow_ui_trFjl&Filemainwindow_ui_trSg&Helpmainwindow_ui_trVrlista&Queuemainwindow_ui_tr Nzet&Viewmainwindow_ui_tr4<b>Audifjl llapot: </b>Audio file status: mainwindow_ui_tr.<b>Muxing llapot: </b>Muxing status: mainwindow_ui_tr <b>llapot: </b>Status: mainwindow_ui_tr4<b>Videfjl llapot: </b>Video file status: mainwindow_ui_trNvjegyAboutmainwindow_ui_tr AktvActivemainwindow_ui_tr6j letltsilink hozzadsaAdd New Download Linkmainwindow_ui_trLetlts utnAfter downloadmainwindow_ui_trHozzadApplymainwindow_ui_trKategriaCategorymainwindow_ui_trRA letltsi lista sszes elemnek trlse Clear all items in download listmainwindow_ui_trElkszltCompletemainwindow_ui_trKapcsolatok Connectionsmainwindow_ui_trDj letltsi vrlista ltrehozsaCreate new download queuemainwindow_ui_trLetltsDownloadmainwindow_ui_tr@Letlts elQszQr a lista aljrl"Download bottom of the list firstmainwindow_ui_trLetltve Downloadedmainwindow_ui_trSzerkesztsEditmainwindow_ui_trBefejezsEnd Timemainwindow_ui_trHibaErrormainwindow_ui_trKilpsExitmainwindow_ui_trFjlFilemainwindow_ui_trFjl nv File Namemainwindow_ui_trSgHelpmainwindow_ui_trSebessgkorlt Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_tr|Az aktulisan kivlasztott elemek lejjebb mozgatsa egy sorral-Move currently selected items down by one rowmainwindow_ui_tr|Az aktulisan kivlasztott elemek feljebb mozgatsa egy sorral+Move currently selected items up by one rowmainwindow_ui_trPasszv Not Activemainwindow_ui_tr2A letlts felfggesztsePause Downloadmainwindow_ui_trHalads Percentagemainwindow_ui_tr6Persepolis Download ManagerPersepolis Download Managermainwindow_ui_trBelltsok Preferencesmainwindow_ui_trFolyamatProgressmainwindow_ui_trBelltsok Propertiesmainwindow_ui_trVrlistaQueuemainwindow_ui_tr6Ezen vrlista eltvoltsaRemove this queuemainwindow_ui_tr$Problma jelentseReport an issuemainwindow_ui_tr*A letlts folytatsaResume Downloadmainwindow_ui_trBTlcaikon megjelentse/elrejtseShow/Hide system tray iconmainwindow_ui_trKikapcsols Shut Downmainwindow_ui_tr MretSizemainwindow_ui_trRendezs mdjaSort bymainwindow_ui_tr Kezds Start Timemainwindow_ui_tr2Ezen vrlista elindtsaStart this queuemainwindow_ui_trElkezdveStartedmainwindow_ui_trllapotStatusmainwindow_ui_tr,A letlts meglltsa Stop Downloadmainwindow_ui_tr2Ezen vrlista lelltsaStop this queuemainwindow_ui_trHA letlts lelltsa / megszaktsaStop/Cancel Downloadmainwindow_ui_trVidekeresQ V&ideo Findermainwindow_ui_trVidekeresQ Video Findermainwindow_ui_tr NzetViewmainwindow_ui_tr.Az Aria2 nem vlaszolt!Aria2 did not respond!progress_src_ui_tr*Az Aria2 sztkapcsoltAria2 disconnected!progress_src_ui_trRA Persepolis csatlakozni prbl. Trelem!,Persepolis is trying to connect! be patient!progress_src_ui_tr*Krlek, prbld jra.Please try again.progress_src_ui_trPrbld jra! Try again!progress_src_ui_trLetlts utnAfter downloadprogress_ui_trHozzadApplyprogress_ui_tr&Letlts informciDownload Informationprogress_ui_tr(Letlts informcikDownload Optionsprogress_ui_trLetltve: Downloaded:progress_ui_trHtralvQ idQ:Estimated time left:progress_ui_tr$Kapcsolatok szma:Number of connections: progress_ui_trFelfggesztsPauseprogress_ui_tr6Persepolis Download ManagerPersepolis Download Managerprogress_ui_trFolytatsResumeprogress_ui_trKikapcsols Shut Downprogress_ui_trllapot:Status: progress_ui_trStopStopprogress_ui_trtviteli rta:Transfer rate: progress_ui_tr<b><center>Krlek, indtsd jra a Persepolist!</center></b><br><center>Nhny vltozs csak ezt kvetQen lp letbe</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Ezt a parancsikont korbban mr hasznltad! Vlassz msikat!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr6Indtsd jra a Persepolist!Restart Persepolis!setting_src_ui_tr><html><head/><body><p> Add meg a megfigyelendQ JSON-RPC / XML-RPC szerver portszmt. Lehetsges rtkek: 1024 - 65535 Alaprtelmezett: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trn<html><head/><body><p>Formtum: :PP</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Prblkozsok szma sikertelen letltseknl.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>lltsd be az jraprblkozsok kztti vrakozsi msodperceket. A letltskezelQ megprblja jra letlteni a fjlokat, amikor a HTTP szerver 503-as vlaszt ad vissza.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>IdQtllps belltsa msodpercekben. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Lehet, hogy ez a szolgltats nem mqkdik ezen az opercis rendszeren.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Tbb kapcsolat hasznlata felgyorsthatja a letltst.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trTevkenysgAction setting_ui_tr MgseCancel setting_ui_trKategriaCategory setting_ui_trVltoztatChange setting_ui_trbAria2 alaprtelmezett tvonalnak megvltoztatsaChange Aria2 default path setting_ui_trSznsma:Color scheme:  setting_ui_trKapcsolatok Connections setting_ui_trAlaprtelmezsDefaults setting_ui_tr Letltsi opcikDownload Options setting_ui_trLetltve Downloaded setting_ui_trFjl nv File Name setting_ui_tr Betq:Font:  setting_ui_trhFQablak elrejtse a Bezrs gombra val kattintskor)Hide main window if close button clicked. setting_ui_trIkonok:Icons:  setting_ui_tr*Rendszer brentartsaKeep system awake! setting_ui_trA rgztendQ linkek maximlis szma:<br/><small>(Ha a bngszQ egyszerre tbb videolinket kld el)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr"rtests tpusa:Notification type:  setting_ui_trrtestsek Notifications setting_ui_tr$Kapcsolatok szma:Number of connections:  setting_ui_tr(Prblkozsok szma:Number of tries:  setting_ui_trOKOK setting_ui_trHalads Percentage setting_ui_trBelltsok Preferences setting_ui_tr8Nyomd meg az j billentyqketPress new keys setting_ui_trKilpsQuit setting_ui_trRPC port szm: RPC port number:  setting_ui_trZPersepolis automatikus indtsa a rendszerrelRun Persepolis at startup setting_ui_trParancsikonShortcut setting_ui_trParancsikonok Shortcuts setting_ui_tr MretSize setting_ui_tr Mret:Size:  setting_ui_trllapotStatus setting_ui_trStlus:Style:  setting_ui_tr$IdQtllps (sec):Timeout (seconds):  setting_ui_tr$VidekeresQ opcikVideo Finder Options setting_ui_trHangerQ:Volume:  setting_ui_tr$Vrlisthoz ads:Add to queue:  text_ui_tr MgseCancel text_ui_tr8Letlts helynek mdostsaChange Download Folder text_ui_tr.Kijells megszntetse Deselect All text_ui_trIP:IP: text_ui_tr LinkekLinks text_ui_trOKOK text_ui_tr6Persepolis Download ManagerPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProxyProxy text_ui_trMind kijelli Select All text_ui_tr4<b>Audifjl llapot: </b>Audio file status: video_finder_progress_ui_tr.<b>Muxing llapot: </b>Muxing status: video_finder_progress_ui_tr4<b>Videfjl llapot: </b>Video file status: video_finder_progress_ui_trHalad opcikAdvanced optionsytaddlink_src_ui_trAudioformtum: Audio format:ytaddlink_src_ui_tr*Mdialista beolvassaFetch Media Listytaddlink_src_ui_tr:Mdiainformcik letltse...Fetching Media Info...ytaddlink_src_ui_tr2Vals videlinket adj megPlease enter a valid video linkytaddlink_src_ui_tr&Formtum vlasztsaSelect a formatytaddlink_src_ui_trVidekeresQ Video Finderytaddlink_src_ui_trVideformtum: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_hu.ts000066400000000000000000002404021464161131600241020ustar00rootroot00000000000000 about_ui_tr About Persepolis A Persepolis névjegye Persepolis Download Manager Persepolis Download Manager <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Készítők Translators Fordítók License Licensz OK OK Special thanks to: Külön köszönet: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Hozáadás kategóriához: Proxy Proxy IP: IP: Port: Port: Change Download Folder Letöltés helyének módosítása Download Folder: Letöltés helye: Cancel Mégse OK OK Link Link More Options További opciók Advanced Options Haladó opciók Referrer: Hivatkozó: Header: Fejléc: Load cookies: Sütik betöltése: User agent: Felhasználói ügynök: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>File name</b>: <b>Size</b>: <b>Size</b>: after_download_ui_tr Persepolis Download Manager Persepolis Download Manager Open File Fájl megnyitása Open Download Folder Letöltés helyének megnyitása OK OK Don't show this message again. Ne jelenjen meg újra ez az üzenet. <b>Download Completed!</b> <b>Letöltés elkészült!</b> <b>Save as</b>: <b>Mentés másként</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Persepolis Log Report Issue Hibajelentés Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Várólista megállítva! Persepolis is shutting down A Persepolis leáll your system in 20 seconds a rendszered 20 mp. múlva Queue completed! A sorbarendezés elkészült! Show main Window Főablak megjelenítése Please Wait... Kérlek várj... Ready... Készenlét... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Az Aria2 nem válaszolt! Legyél türelmes! A Persepolis újra megpróbálja 2 másodperc múlva! Error... Hiba... Persepolis can not connect to Aria2 A Persepolis nem tud csatlakozni az Aria2-höz Check your network & Restart Persepolis Ellenőrizd a hálózatot és indítsd újra a Persepolist Restart Persepolis Persepolis újraindítása Reconnecting Aria2... Újracsatlakozás az Aria2-höz... Persepolis reconnected aria2 successfully A Persepolis sikeresen újracsatlakozott az Aria2-höz Error: Hiba: <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Letöltve</b>: <b>Transfer rate</b>: <b>Átviteli ráta</b>: <b>Estimated time left</b>: <b>Hátralévő idő</b>: <b>Connections</b>: <b>Kapcsolatok</b>: <b>Status</b>: <b>Állapot</b>: Download Stopped Letöltés megállítva Error - Hiba - Download Complete Letöltés befejezve <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Ezt a linket korábban már hozzáadtad! Biztos, hogy ismét hozzáadod?</center></b> Download Starts Letöltés indítása Download Scheduled Ütemezett letöltés Operation was not successful. A művelet nem sikerült. Please resume the following category: Folytasd a következő kategóriát: Aria2 disconnected! Az Aria2 szétkapcsolt Persepolis is trying to connect!be patient! A Persepolis megpróbál csatlakozni! Légy türelmes! Aria2 did not respond! Az Aria2 nem válaszolt! Try again! Próbáld újra! Aria2 did not respond Az Aria2 nem válaszolt Try again Újrapróbálkozás Please stop the following category: Kérlek, állítsd le a következő kategóriát: Persepolis is trying to connect! be patient! A Persepolis csatlakozni próbál. Türelem! Please try again. Kérlek, próbáld újra. Minimize to system tray Kicsinyítés a tálcára Not Found Nem található Operation was not successful! A művelet nem sikerült! Operation was not successful! Please stop the following category first: A művelet nem sikerült! Kérlek, először állítsd le a következő kategóriát: Please stop the following download first: Kérlek, először állítsd le a következő letöltést: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Ez a művelet törölni fogja a letöltött fájlokat a merevlemezről.<br>VÉGLEGESEN!</center></b> <center>Do you want to continue?</center> <center>Akarod folytatni?</center> Please stop the following category first: Kérlek, először állítsd le a következő kategóriát: </b>" already exists! </b>" már létezik! Send selected downloads to Kiválasztott letöltések küldése Send to Küldés Sort by Rendezés módja <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Ez a művelet eltávolítja a várólista összes letöltött elemét<br>az "Összes letöltés" listából!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Az alapértelmezett várólista nem távolítható el</b> Some items didn't transferred successfully! Néhány elemet nem sikerült áthelyezni. Please stop download progress first. Kérlek, először állítsd le a letöltési folyamatokat. Hide options Opciók elrejtése Show options Opciók megjelenítése Stop all downloads first! Előszőr állítsd le az összes letöltést! Moving is Mozgatás finished! befejezve! Download is in progress by video finder! A letöltés folyamatban van a videokeresővel! be patient! légy türelemmel! Stop the following download first: Először állítsd le a következő letöltést: ffmpeg is not installed! Az ffmpeg nincs telepítve! Not enough free space in: Nincs elég hely itt: muxing error muxing hiba an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Fájl Edit Szerkesztés View Nézet Download Letöltés Queue Várólista Video Finder Videókereső Help Súgó Sort by Rendezés módja Persepolis Download Manager Persepolis Download Manager Category Kategória File Name Fájl név Status Állapot Size Méret Downloaded Letöltve Percentage Haladás Connections Kapcsolatok Link Link &File Fájl &Edit Szerkesztés &View Nézet &Download Letöltés &Queue Várólista &Help Súgó Show/Hide system tray icon Tálcaikon megjelenítése/elrejtése Add New Download Link Új letöltésilink hozzáadása Resume Download A letöltés folytatása Pause Download A letöltés felfüggesztése Stop Download A letöltés megállítása Stop/Cancel Download A letöltés leállítása / megszakítása Properties Beállítások Progress Folyamat Exit Kilépés Clear all items in download list A letöltési lista összes elemének törlése Create new download queue Új letöltési várólista létrehozása Remove this queue Ezen várólista eltávolítása Start this queue Ezen várólista elindítása Stop this queue Ezen várólista leállítása Move currently selected items up by one row Az aktuálisan kiválasztott elemek feljebb mozgatása egy sorral Move currently selected items down by one row Az aktuálisan kiválasztott elemek lejjebb mozgatása egy sorral Preferences Beállítások About Névjegy Report an issue Probléma jelentése Start Time Kezdés End Time Befejezés Download bottom of the list first Letöltés előszőr a lista aljáról Limit Speed Sebességkorlát Apply Hozzáad After download Letöltés után Shut Down Kikapcsolás V&ideo Finder Videókereső <b>Video file status: </b> <b>Videófájl állapot: </b> <b>Audio file status: </b> <b>Audiófájl állapot: </b> <b>Status: </b> <b>Állapot: </b> <b>Muxing status: </b> <b>Muxing állapot: </b> downloaded letöltve Active Aktív Not Active Passzív Started Elkezdve Error Hiba Complete Elkészült Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Az Aria2 szétkapcsolt Persepolis is trying to connect! be patient! A Persepolis csatlakozni próbál. Türelem! Aria2 did not respond! Az Aria2 nem válaszolt! Please try again. Kérlek, próbáld újra. Try again! Próbáld újra! progress_ui_tr Persepolis Download Manager Persepolis Download Manager Status: Állapot: Downloaded: Letöltve: Transfer rate: Átviteli ráta: Estimated time left: Hátralévő idő: Number of connections: Kapcsolatok száma: Download Information Letöltés információ After download Letöltés után Apply Hozzáad Shut Down Kikapcsolás Download Options Letöltés információk Resume Folytatás Pause Felfüggesztés Stop Stop Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Kérlek, indítsd újra a Persepolist!</center></b><br><center>Néhány változás csak ezt követően lép életbe</center> Restart Persepolis! Indítsd újra a Persepolist! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Ezt a parancsikont korábban már használtad! Válassz másikat!</center></b> setting_ui_tr Preferences Beállítások <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Próbálkozások száma sikertelen letöltéseknél.</p></body></html> Number of tries: Próbálkozások száma: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Állítsd be az újrapróbálkozások közötti várakozási másodperceket. A letöltéskezelő megpróbálja újra letölteni a fájlokat, amikor a HTTP szerver 503-as választ ad vissza.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Időtúllépés beállítása másodpercekben. </p></body></html> Timeout (seconds): Időtúllépés (sec): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Több kapcsolat használata felgyorsíthatja a letöltést.</p></body></html> Number of connections: Kapcsolatok száma: RPC port number: RPC port szám: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Add meg a megfigyelendő JSON-RPC / XML-RPC szerver portszámát. Lehetséges értékek: 1024 - 65535 Alapértelmezett: 6801 </p></body></html> Change Aria2 default path Aria2 alapértelmezett útvonalának megváltoztatása Change Változtat Download Options Letöltési opciók Volume: Hangerő: Notifications Értesítések Style: Stílus: Color scheme: Színséma: Icons: Ikonok: Notification type: Értesítés típusa: Font: Betű: Size: Méret: Run Persepolis at startup Persepolis automatikus indítása a rendszerrel Keep system awake! Rendszer ébrentartása <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Formátum: ÓÓ:PP</p></body></html> File Name Fájl név Status Állapot Size Méret Downloaded Letöltve Percentage Haladás Connections Kapcsolatok Category Kategória Video Finder Options Videókereső opciók Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> A rögzítendő linkek maximális száma:<br/><small>(Ha a böngésző egyszerre több videolinket küld el)</small> Defaults Alapértelmezés Cancel Mégse OK OK Press new keys Nyomd meg az új billentyűket Action Tevékenység Shortcut Parancsikon Shortcuts Parancsikonok Quit Kilépés Hide main window if close button clicked. Főablak elrejtése a Bezárás gombra való kattintáskor <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Lehet, hogy ez a szolgáltatás nem működik ezen az operációs rendszeren.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis Download Manager Links Linkek Select All Mind kijelöli Deselect All Kijelölés megszüntetése Add to queue: Várólistához adás: Proxy Proxy IP: IP: Port: Port: Change Download Folder Letöltés helyének módosítása OK OK Cancel Mégse Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Videófájl állapot: </b> <b>Audio file status: </b> <b>Audiófájl állapot: </b> <b>Muxing status: </b> <b>Muxing állapot: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Videókereső Fetch Media List Médialista beolvasása Select a format Formátum választása Please enter a valid video link Valós videólinket adj meg Fetching Media Info... Médiainformációk letöltése... Video format: Videóformátum: Audio format: Audioformátum: Advanced options Haladó opciók persepolisdm-persepolis-867ee76/resources/locales/ui_ko.qm000066400000000000000000001042631464161131600240720ustar00rootroot00000000000000`R@L+R*/*%/*00#+02vg/G5#Hw96zHw9O(J6Lb;OgqR$-qS#wVQWiz WizxW HWxXE­L}:b|i 9w&dp\J}GGq2D 5@5l@S]K,cIQ u 5<u 5gu<CeZc=c#pg'I*A(0[uEF u-,&Yeq nZB QUC 1^-*O< yKFOKFf$KFv_IKk$ahp[4 [4v.%e#+쑀& 7 B0N2Et]I3nw^}:e;g Fz^bz5QBzt|IdIbIunCo4(>mGc?m^#XI%Xj XjxWh@|Ub a.hT/?0NP0)1T;(1TfO OwA_. %_`ec>1i<2>jr;jrgt uty'vh5Qrh>1>zTXJ]r)]9Z{f%Ii o?w{%6)o )oPa)ow-B1--By9N29Nz:GE:qr<=tG(7M?$ |[@@]1ty8MxDZ-(xDZN{KBCpS(j`)*P֣DS*/y19BsJp Lpv *H,uF{`sB6`fd6`vX6`9uF=qt-` `yj +@!| .=U .h > $K AN" WE ^D `I b  gr mp,v }R }QW ~. to OX F0 U4 NCW  e? UC Un O" g* s9C e~d ^YM X "ZWA Ertp _ _5 _b@ if+ ifH s>c `R P Ypo J+ (r ,!+^ >E> >Ej Fq Uq, `r`l gn, n` vk z z {Ǝ)' w65 wN y e* 7 dO  9 7A~ L< 5I (F 2S5 P[ b[F e.H e.Q stJ q q eo N  * DE P mb Dx nB m/ Ui c @ n C/*) .H 9 f >PW \e8 q B B BD BQ@ Bxs $ i tG i"..dC7I(7I{$_(xBxBuNjlJ ?ikT1'I2#2M3= uW36?r'?5]>(3]>NPiTp#u>y^3Ny^_-{~}p3Vh![! ["/$q$qL?Ro[.%{ci}, AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia about_ui_tr<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trPersepolis About Persepolis about_ui_trǐ Developers about_ui_tr|t ¤License about_ui_trUxOK about_ui_tr&Persepolis ƴ\ ǐPersepolis Download Manager about_ui_trҹ׈ \ :Special thanks to: about_ui_trǐ Translators about_ui_trƴ\ l ͔X0Add Download Link addlink_ui_trtL๬ ͔X0:Add to category:  addlink_ui_tr 5XAdvanced Options addlink_ui_trCancel addlink_ui_trƴ\ T X0Change Download Folder addlink_ui_tr | t X0:Change file name:  addlink_ui_tr¤\ ] $ X0Detect System Proxy Settings addlink_ui_trƴ\ T:Download Folder:  addlink_ui_tr ƴ\Download Later addlink_ui_trƴ\ l: Download link:  addlink_ui_trD8 ƴ\: Download password:  addlink_ui_tr"Ʃǐt  D8 ƴ\Download username and password addlink_ui_trƩǐt ƴ\: Download username:  addlink_ui_tr ȅ ܬEnd time addlink_ui_trT:Header:  addlink_ui_trIP: IP:  addlink_ui_tr \  Limit speed addlink_ui_trlLink addlink_ui_trФ $0:Load cookies:  addlink_ui_tr ͔ 5X More Options addlink_ui_tr :Number of connections: addlink_ui_trUxOK addlink_ui_trҸ:Port: addlink_ui_tr]Proxy addlink_ui_tr] D8: Proxy password:  addlink_ui_tr] Ʃǐt: Proxy username:  addlink_ui_tr |:  Referrer:  addlink_ui_trt \ 0ŵX0Remember this path addlink_ui_tr Ǒ ܬ Start time addlink_ui_trƩǐ tҸ: User agent:  addlink_ui_tr<b> | t</b>: File name: after_download_src_ui_tr<b>l0</b>:  Size: after_download_src_ui_trUx OK after_download_ui_tr | 0 Open File after_download_ui_tr*<b>ƴ\ܬ D̴µȲ!</b>Download Completed!after_download_ui_tr<b>l</b>:  Link: after_download_ui_tr&<b>x t<\ ǥ</b>: Save as: after_download_ui_tr(t T| \X JµȲ.Don't show this message again.after_download_ui_trƴ\ T 0Open Download Folderafter_download_ui_tr&Persepolis ƴ\ ǐPersepolis Download Managerafter_download_ui_tr\ T Dư0Clear Log Messageslog_window_ui_tr0Closelog_window_ui_tr$ \ mD t X0Copy Selected to Clipboardlog_window_ui_trPersepolis \Persepolis Loglog_window_ui_tr\ T ȸ\hRefresh Log Messageslog_window_ui_tr tˆ  Report Issuelog_window_ui_tr </b>" t tǬiȲ!" already exists!mainwindow_src_ui_tr<b><center>t l t ͔ t LjµȲ! ͔XܬµȮL?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>t ǑD ՉXt ƴ\\ |t X ¤l l<\ <br>)Ȳ!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>t ǑD ՉXt " ƴ\" ] t 0X <br>ƴ\ mt p)Ȳ!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr<b> </b>: Connections: mainwindow_src_ui_tr<b>ƴ\ܴ(</b>: Downloaded: mainwindow_src_ui_tr"<b>@  ܬ</b>: Estimated time left: mainwindow_src_ui_tr<b>l</b>:  Link: mainwindow_src_ui_trB<b>iȲ! 0 0@ p`  µȲ!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b></b>: Status: mainwindow_src_ui_tr<b> </b>: Transfer rate: mainwindow_src_ui_tr4<center>XܬµȮL?</center>)
Do you want to continue?
mainwindow_src_ui_tr"Aria2 QX JXµȲAria2 did not respondmainwindow_src_ui_tr$Aria2 QX JXµȲ!Aria2 did not respond!mainwindow_src_ui_trtAria2 QX JXµȲ! Ǡܹ 0$8Ɣ! Persepolis 2 ܳiȲ!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr"Aria2 t JŴLµȲ!Aria2 disconnected!mainwindow_src_ui_trBƩǐX $Ҹl Ux  Persepolis ǑX0'Check your network & Restart Persepolismainwindow_src_ui_trƴ\ܹ| DXµȲDownload Completemainwindow_src_ui_trƴ\ܬ }µȲDownload Scheduledmainwindow_src_ui_trƴ\ܬ Ǒ)ȲDownload Startsmainwindow_src_ui_trƴ\ܬ µȲDownload Stoppedmainwindow_src_ui_tr4D$ xT| ѵt ƴ\ܬ Չ DžȲ!(Download is in progress by video finder!mainwindow_src_ui_tr $X - Error - mainwindow_src_ui_tr $X...Error...mainwindow_src_ui_tr$X: Error: mainwindow_src_ui_tr 5X (00 Hide optionsmainwindow_src_ui_tr¤\ Ҹt\ \TMinimize to system traymainwindow_src_ui_tr tX0 Moving ismainwindow_src_ui_tr>D  L Not Foundmainwindow_src_ui_tr"Ʃ \ t qiȲ:Not enough free space in:mainwindow_src_ui_trǑ (ՈµȲ!Operation was not successful!mainwindow_src_ui_trBǑ (ՈµȲ! L tL๬| < t 8Ɣ: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_trǑ (ՈµȲ.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr:Persepolis Aria2 `  µȲ#Persepolis can not connect to Aria2mainwindow_src_ui_tr$Persepolis 20 HPersepolis is shutting downmainwindow_src_ui_trLPersepolis D ܳX LjµȲ! Ǡܹ 0$8Ɣ!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trLPersepolis D ܳX LjµȲ! Ǡܹ 0$8Ɣ!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trDPersepolis Aria2| 1<\ ՈµȲ)Persepolis reconnected aria2 successfullymainwindow_src_ui_trǠܹ 0$8Ɣ...Please Wait...mainwindow_src_ui_tr"L tL๬| Ǭt 8Ɣ:&Please resume the following category: mainwindow_src_ui_tr(< ƴ\ ՉD t 8Ɣ.$Please stop download progress first.mainwindow_src_ui_tr(< L tL๬| t 8Ɣ:*Please stop the following category first: mainwindow_src_ui_tr"L tL๬| t 8Ɣ:$Please stop the following category: mainwindow_src_ui_tr(< L ƴ\ܹ| t 8Ɣ:*Please stop the following download first: mainwindow_src_ui_tr ܳt 8Ɣ.Please try again.mainwindow_src_ui_tr0t µȲ!Queue Stopped!mainwindow_src_ui_tr0t D̴µȲ!Queue completed!mainwindow_src_ui_trD D...Ready...mainwindow_src_ui_tr$Aria2 X ...Reconnecting Aria2...mainwindow_src_ui_tr$Persepolis ǑX0Restart Persepolismainwindow_src_ui_tr$ \ ƴ\ܹ| L<\ 0Send selected downloads tomainwindow_src_ui_trL<\ 0Send tomainwindow_src_ui_tr0 = \X0Show main Windowmainwindow_src_ui_tr5X \X0 Show optionsmainwindow_src_ui_tr$| mt  JXµȲ!+Some items didn't transferred successfully!mainwindow_src_ui_tr , 0Sort bymainwindow_src_ui_tr$< ƴ\ܹ| X8Ɣ!Stop all downloads first!mainwindow_src_ui_tr&< L ƴ\ܹ| X8Ɣ: #Stop the following download first: mainwindow_src_ui_tr ܳX0 Try againmainwindow_src_ui_tr ܳt 8Ɣ! Try again!mainwindow_src_ui_tr $X ݴ(an error occurredmainwindow_src_ui_trǠܹ 0$8Ɣ! be patient!mainwindow_src_ui_tr&ffmpeg $X JXµȲ!ffmpeg is not installed!mainwindow_src_ui_trD̴µȲ! finished!mainwindow_src_ui_tr 9 $X muxing errormainwindow_src_ui_tr¤\D ȅiȲyour system in 20 secondsmainwindow_src_ui_tr ƴ\ܴ( downloadedmainwindow_ui_trƴ\(&D) &Downloadmainwindow_ui_tr Ӹ(&E)&Editmainwindow_ui_tr |(&F)&Filemainwindow_ui_tr(&H)&Helpmainwindow_ui_tr0(&Q)&Queuemainwindow_ui_tr 0(&V)&Viewmainwindow_ui_tr$<b>$$ | : </b>Audio File Status: mainwindow_ui_tr$<b>$$ | : </b>Audio file status: mainwindow_ui_tr<b>9 : </b>Mixing status: mainwindow_ui_tr<b>9 : </b>Muxing status: mainwindow_ui_tr<b>: </b>Status: mainwindow_ui_tr$<b>D$ | : </b>Video File Status: mainwindow_ui_tr$<b>D$ | : </b>Video file status: mainwindow_ui_tr<html><head/><body><p>t 5X@ ¤\t  ܸ\ X D )iȲ.  ǐ ¤\D ǐ<\ ܸ\ XX ư DƔiȲ. </p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

mainwindow_ui_trAboutmainwindow_ui_tr\1Activemainwindow_ui_tr ƴ\ l ͔X0Add New Download Linkmainwindow_ui_tr" ƴ\ l ͔X0...Add New Download Link...mainwindow_ui_trƴ\ D After downloadmainwindow_ui_trƩX0Applymainwindow_ui_trtL๬Categorymainwindow_ui_trƴ\ ] Dư0Clear Download Listmainwindow_ui_tr$ƴ\ ]X m Dư0 Clear all items in download listmainwindow_ui_trDCompletemainwindow_ui_tr Connectionsmainwindow_ui_tr 0 ̴0...Create New Queue...mainwindow_ui_trBM¤Ҹ |D ̴ H l| \ ) #Ŵ 8Ɣ!5Create a text file and put links in it, line by line!mainwindow_ui_tr ƴ\ 0 ̴0Create new download queuemainwindow_ui_tr \ ƴ\ | X0Delete Selected Download Filesmainwindow_ui_trƴ\Downloadmainwindow_ui_trƴ\ Download Statusmainwindow_ui_tr$] X < ƴ\X0"Download bottom of the list firstmainwindow_ui_trJYoutube, Vimeo  D$ $$| ƴ\X8Ɣ.1Download video or audio from Youtube, Vimeo, etc.mainwindow_ui_tr ƴ\ܴ( Downloadedmainwindow_ui_trӸEditmainwindow_ui_tr ȅ ܬEnd Timemainwindow_ui_tr$XErrormainwindow_ui_tr@  ܬEstimated Time Leftmainwindow_ui_trȅExitmainwindow_ui_tr |Filemainwindow_ui_tr | t File Namemainwindow_ui_tr | l0 File Sizemainwindow_ui_trD$ l >0...Find Video Links...mainwindow_ui_tr̘L ܳ First Try Datemainwindow_ui_trHelpmainwindow_ui_tr 5X (00 Hide Optionsmainwindow_ui_tr&M¤Ҹ | l 8$0...Import Links from Text File...mainwindow_ui_tr¤\ Ǒ !Keep System Awake!mainwindow_ui_tr ܳ  Last Try Datemainwindow_ui_tr \  Limit Speedmainwindow_ui_trlLinkmainwindow_ui_tr¤\ Ҹt\ \TMinimize to System Traymainwindow_ui_tr0 \ ƴ\ |D x T\ tX0.Move Selected Download Files to Another Foldermainwindow_ui_tr6 \ ƴ\ |D x T\ tX0...1Move Selected Download Files to Another Folder...mainwindow_ui_tr \ m D\ tX0Move Selected Items Downmainwindow_ui_tr \ m \ tX0Move Selected Items Upmainwindow_ui_tr.Ǭ \ mD \ Չ D\ tX0-Move currently selected items down by one rowmainwindow_ui_tr,Ǭ ݴ mD \ Չ \ tX0+Move currently selected items up by one rowmainwindow_ui_trD\1 Not Activemainwindow_ui_tr0 ƴ\ T 0Open Default Download Foldermainwindow_ui_trƴ\ T 0Open Download Foldermainwindow_ui_tr | 0... Open File...mainwindow_ui_trƴ\ |Pause Downloadmainwindow_ui_tr|<Ҹ Percentagemainwindow_ui_tr&Persepolis ƴ\ ǐPersepolis Download Managermainwindow_ui_trX$ Preferencesmainwindow_ui_trՉ`Progressmainwindow_ui_tr1 Propertiesmainwindow_ui_tr0Queuemainwindow_ui_tr0 pX0 Remove Queuemainwindow_ui_tr$] \ ƴ\ pX0#Remove Selected Downloads from Listmainwindow_ui_trt 0 pX0Remove this queuemainwindow_ui_tr tˆ Report an Issuemainwindow_ui_tr tˆ Report an issuemainwindow_ui_trƴ\ tŴ0Resume Downloadmainwindow_ui_tr\ | \X0 Show Log Filemainwindow_ui_trTt\ \X0 Show Menubarmainwindow_ui_tr!t ( \X0Show Side Panelmainwindow_ui_tr ¤\ Ҹt DtX \X0Show System Tray Iconmainwindow_ui_tr"¤\ Ҹt DtX \/(@Show/Hide system tray iconmainwindow_ui_tr 0 D0 Shut Downmainwindow_ui_trl0Sizemainwindow_ui_tr , 0Sort bymainwindow_ui_tr ǑX0 Start Mixingmainwindow_ui_tr0 ǑX0 Start Queuemainwindow_ui_tr Ǒ ܬ Start Timemainwindow_ui_trt 0 ǑX0Start this queuemainwindow_ui_trǑ(Startedmainwindow_ui_trStatusmainwindow_ui_tr \1 ƴ\ X0Stop All Active Downloadsmainwindow_ui_trƴ\ X0 Stop Downloadmainwindow_ui_tr0 X0 Stop Queuemainwindow_ui_trt 0 X0Stop this queuemainwindow_ui_trƴ\ /Stop/Cancel Downloadmainwindow_ui_tr   Transfer Ratemainwindow_ui_trD$ >0ĭl(&I) V&ideo Findermainwindow_ui_trD$ >0ĭl Video Findermainwindow_ui_tr0Viewmainwindow_ui_tr$Aria2 QX JXµȲ!Aria2 did not respond!progress_src_ui_tr"Aria2 t JŴLµȲ!Aria2 disconnected!progress_src_ui_trLPersepolis D ܳX LjµȲ! Ǡܹ 0$8Ɣ!,Persepolis is trying to connect! be patient!progress_src_ui_tr ܳt 8Ɣ.Please try again.progress_src_ui_tr ܳt 8Ɣ! Try again!progress_src_ui_trƴ\ D After downloadprogress_ui_trƩX0Applyprogress_ui_trƴ\ Download Informationprogress_ui_trƴ\ 5XDownload Optionsprogress_ui_tr ƴ\ܴ(: Downloaded:progress_ui_tr@  ܬ:Estimated time left:progress_ui_tr \  Limit speedprogress_ui_trl: Link: progress_ui_tr : Number of connections: progress_ui_tr|Pauseprogress_ui_tr&Persepolis ƴ\ ǐPersepolis Download Managerprogress_ui_trtŴ0Resumeprogress_ui_tr 0 D0 Shut Downprogress_ui_tr: Status: progress_ui_trX0Stopprogress_ui_tr : Transfer rate: progress_ui_tr<b><center>Persepolis| Ǒt8Ɣ!</center></b><br><center>Persepolis| ǑXt | mt Ʃ)Ȳ</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>t ͕Ф t Ʃ\ t LjµȲ! x ͕Ф| ƩX8Ɣ!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr$Persepolis ǑX0Restart Persepolis!setting_src_ui_tr<html><head/><body><p> ` JSON-RPC/XML-RPC X Ҹ 8| iȲ. \ : 1024 - 65535 0: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_tr<html><head/><body><p>X: ǘ\ ǘt 8 `  LjµȲ! Xt ՉXp X$D X 8Ɣ!</p></body></html>

Attention: Wrong path may cause problems! Do it carefully or don't change default setting!

 setting_ui_tr`<html><head/><body><p> HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>ƴ\ (\ ư ܳ ֟| iȲ.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>Ǭܳ t 0` ܬ()D iȲ. ƴ\ ǐ HTTP  503 QD XXt ƴ\ܹ| ܳiȲ.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_trv<html><head/><body><p>ܬ|  \ iȲ. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>t 0@ ƴ ̴ ǑX JD  LjµȲ.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>t 5X@ SSL/TLS xptl (| )iȲ. X Ʃ 0x @ Ʃǐ xX EDŽDžȲ!</p></body></html>r

This option avoids SSL/TLS handshake failure. But use it at your own risk!

 setting_ui_tr<html><head/><body><p>t 5X@ ¤\t  ܸ\ X D )iȲ.  ǐ ¤\D ǐ<\ ܸ\ XX ư DƔiȲ. </p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

 setting_ui_tr<html><head/><body><p> D ƩXt ƴ\ Ĺ| |  LjµȲ..</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trǑAction setting_ui_tr ƴ\ l ͔X0Add New Download Link setting_ui_tr D$ l ͔X0Add New Video Link setting_ui_trCancel setting_ui_trtL๬Category setting_ui_trX0Change setting_ui_tr Aria2 0 \ X0Change Aria2 default path setting_ui_tr l1\: Color scheme:  setting_ui_tr Ʃǐ XColumns Customization setting_ui_tr Connections setting_ui_trF0 ƴ\ T LE,  \ X T ̴0BCreate subfolders for Music,Videos, ... in default download folder setting_ui_tr0Defaults setting_ui_trƴ\ m X0Delete Download Items setting_ui_tr0<Ŵ| UxX0 t xɝ| ƩX JL)Don't use certificate to verify the peers setting_ui_trƴ\ 5XDownload Options setting_ui_trƴ\ T: Download folder:  setting_ui_tr ƴ\ܴ( Downloaded setting_ui_trL ƴ \1TEnable Notification Sounds setting_ui_tr¤\ Ҹt DtX \1TEnable system tray icon setting_ui_tr@  ܬEstimated Time Left setting_ui_tr | t File Name setting_ui_tr̘L ܳ First Try Date setting_ui_tr4: Font:  setting_ui_tr00 ҼD tXt 0 =t (ѲȲ.)Hide main window if close button clicked. setting_ui_tr DtX: Icons:  setting_ui_trL |ư t, ¤\ Ҹt Persepolis| ǑiȲ5If browser is opened, start Persepolis in system tray setting_ui_tr M¤Ҹ | l 8$0Import Links from Text File setting_ui_tr¤\ Ǒ !Keep system awake! setting_ui_trŸŴ:  Language:  setting_ui_tr ܳ  Last Try Date setting_ui_trΡ̘` \ l :<br/><small>( |ư \ X  l| X ư)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr¤\ Ҹt\ \TMinimize to System Tray setting_ui_tr \ m D\ tX0Move Selected Items Down setting_ui_tr \ m \ tX0Move Selected Items Up setting_ui_trL : Notification type:  setting_ui_trL Notifications setting_ui_tr : Number of connections:  setting_ui_trܳ ֟: Number of tries:  setting_ui_trUxOK setting_ui_tr|<Ҹ Percentage setting_ui_trX$ Preferences setting_ui_tr Ф t0Press new keys setting_ui_trȅQuit setting_ui_tr"RPC port number: RPC port number:  setting_ui_trƴ\ m pX0Remove Download Items setting_ui_tr(Ǒ Persepolis ՉX0Run Persepolis at startup setting_ui_trx t<\ ǥSave As setting_ui_tr͕ФShortcut setting_ui_tr͕Ф Shortcuts setting_ui_tr8ƴ\ܬ D̴t ƴ\ D Tǐ \X07Show download complete dialog when download is finished setting_ui_trƴ\ Չ` = \X0Show download progress window setting_ui_trTt\ \X0 Show menubar setting_ui_tr!t ( \X0Show side panel setting_ui_trL \:Show these columns: setting_ui_trl0Size setting_ui_trl0: Size:  setting_ui_trStatus setting_ui_tr ¤|: Style:  setting_ui_trܬ  (): Timeout (seconds):  setting_ui_trĭlL DtX l0:Toolbar icons size:  setting_ui_tr   Transfer Rate setting_ui_trD$ >0ĭl 5XVideo Finder Options setting_ui_trƩ: Volume:  setting_ui_tr.0X  ƴ\ tX 0 ܬ: +Wait period between each download in queue: setting_ui_tr"Ǭܳ  0 ܬ (): 'Wait period between retries (seconds):  setting_ui_tr0 ͔X0:Add to queue:  text_ui_trCancel text_ui_trƴ\ T X0Change Download Folder text_ui_tr PX0 Deselect All text_ui_trƴ\ 5XDownload Options text_ui_trƴ\ T: Download folder:  text_ui_trD8 ƴ\: Download password:  text_ui_tr"Ʃǐt  D8 ƴ\Download username and password text_ui_trƩǐt ƴ\: Download username:  text_ui_trIP:IP: text_ui_tr \  Limit speed text_ui_trlLinks text_ui_tr :Number of connections: text_ui_trUxOK text_ui_tr&Persepolis ƴ\ ǐPersepolis Download Manager text_ui_trҸ:Port: text_ui_tr]Proxy text_ui_tr] D8: Proxy password:  text_ui_tr] Ʃǐt: Proxy username:  text_ui_trP X0 Select All text_ui_tr$<b>$$ | : </b>Audio file status: video_finder_progress_ui_tr<b>9 : </b>Muxing status: video_finder_progress_ui_tr$<b>D$ | : </b>Video file status: video_finder_progress_ui_tr 5XAdvanced optionsytaddlink_src_ui_tr$$ : Audio format:ytaddlink_src_ui_trŴ ] 8$0Fetch Media Listytaddlink_src_ui_tr Ŵ  8$ ...Fetching Media Info...ytaddlink_src_ui_tr",x  l| Dž%X8ƔPlease enter a valid video linkytaddlink_src_ui_tr X0Select a formatytaddlink_src_ui_trD$ >0ĭl Video Finderytaddlink_src_ui_trD$ : Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_ko.ts000066400000000000000000002535231464161131600241070ustar00rootroot00000000000000 about_ui_tr About Persepolis Persepolis 정보 Persepolis Download Manager Persepolis 다운로드 관리자 <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers 개발자 Translators 번역자 License 라이선스 OK 확인 Special thanks to: 특별히 감사한 분들: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.2.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: 카테고리에 추가하기: Proxy 프록시 IP: IP: Port: 포트: Change Download Folder 다운로드 폴더 변경하기 Download Folder: 다운로드 폴더: Cancel 취소 OK 확인 Link 링크 More Options 추가 옵션 Advanced Options 고급 옵션 Referrer: 리퍼러: Header: 헤더: Load cookies: 쿠키 불러오기: User agent: 사용자 에이전트: Add Download Link 다운로드 링크 추가하기 Download link: 다운로드 링크: Change file name: 파일 이름 변경하기: Detect System Proxy Settings 시스템 프록시 설정 감지하기 Proxy password: 프록시 비밀번호: Proxy username: 프록시 사용자이름: Download username and password 사용자이름 및 비밀번호 다운로드 Download username: 사용자이름 다운로드: Download password: 비밀번호 다운로드: Remember this path 이 경로 기억하기 Start time 시작 시간 End time 종료 시간 Limit speed 제한 속도 Number of connections: 연결 수: Download Later 나중에 다운로드 HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>파일 이름</b>: <b>Size</b>: <b>크기</b>: after_download_ui_tr Persepolis Download Manager Persepolis 다운로드 관리자 Open File 파일 열기 Open Download Folder 다운로드 폴더 열기 OK 확인 Don't show this message again. 이 메시지를 다시 표시하지 않습니다. <b>Download Completed!</b> <b>다운로드가 완료되었습니다!</b> <b>Save as</b>: <b>다른 이름으로 저장</b>: <b>Link</b>: <b>링크</b>: log_window_ui_tr Persepolis Log Persepolis 로그 Report Issue 이슈 보고 Close 닫기 Copy Selected to Clipboard 선택한 항목을 클립보드에 복사하기 Refresh Log Messages 로그 메시지 새로고침 Clear Log Messages 로그 메시지 비우기 mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! 대기열이 중지되었습니다! Persepolis is shutting down Persepolis가 20초 안에 your system in 20 seconds 시스템을 종료합니다 Queue completed! 대기열이 완료되었습니다! Show main Window 기본 창 표시하기 Please Wait... 잠시만 기다려주세요... Ready... 준비 완료... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2가 응답하지 않았습니다! 잠시만 기다려주세요! Persepolis가 2초 후에 다시 시도합니다! Error... 오류... Persepolis can not connect to Aria2 Persepolis가 Aria2에 연결할 수 없습니다 Check your network & Restart Persepolis 사용자의 네트워크 확인 및 Persepolis 다시 시작하기 Restart Persepolis Persepolis 다시 시작하기 Reconnecting Aria2... Aria2 다시 연결하는 중... Persepolis reconnected aria2 successfully Persepolis가 Aria2를 성공적으로 다시 연결했습니다 Error: 오류: <b>Link</b>: <b>링크</b>: <b>Downloaded</b>: <b>다운로드됨</b>: <b>Transfer rate</b>: <b>전송 속도</b>: <b>Estimated time left</b>: <b>남은 예상 시간</b>: <b>Connections</b>: <b>연결 수</b>: <b>Status</b>: <b>상태</b>: Download Stopped 다운로드가 중지되었습니다 Error - 오류 - Download Complete 다운로드를 완료하였습니다 <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>이 링크는 이전에 추가된 적이 있습니다! 다시 추가하시겠습니까?</center></b> Download Starts 다운로드가 시작됩니다 Download Scheduled 다운로드가 예약되었습니다 Operation was not successful. 작업에 실패했습니다. Please resume the following category: 다음 카테고리를 재개해 주세요: Aria2 disconnected! Aria2 연결이 끊어졌습니다! Persepolis is trying to connect!be patient! Persepolis가 연결을 시도하고 있습니다! 잠시만 기다려주세요! Aria2 did not respond! Aria2가 응답하지 않았습니다! Try again! 다시 시도해 보세요! Aria2 did not respond Aria2가 응답하지 않았습니다 Try again 다시 시도하기 Please stop the following category: 다음 카테고리를 중지해 주세요: Persepolis is trying to connect! be patient! Persepolis가 연결을 시도하고 있습니다! 잠시만 기다려주세요! Please try again. 다시 시도해 주세요. Minimize to system tray 시스템 트레이로 최소화 Not Found 찾을 수 없음 Operation was not successful! 작업에 실패했습니다! Operation was not successful! Please stop the following category first: 작업에 실패했습니다! 다음 카테고리를 먼저 중지해 주세요: Please stop the following download first: 먼저 다음 다운로드를 중지해 주세요: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>이 작업을 수행하면 다운로드한 파일이 하드 디스크에서 영구적으로 <br>삭제됩니다!</center></b> <center>Do you want to continue?</center> <center>계속하시겠습니까?</center> Please stop the following category first: 먼저 다음 카테고리를 중지해 주세요: </b>" already exists! </b>"가 이미 존재합니다! Send selected downloads to 선택한 다운로드를 다음으로 보내기 Send to 다음으로 보내기 Sort by 정렬 기준 <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>이 작업을 수행하면 "모든 다운로드" 목록에서 이 대기열의 모든 <br>다운로드 항목이 제거됩니다!</center></b> <b>Sorry! You can't remove default queue!</b> <b>죄송합니다! 기본 대기열은 제거할 수 없습니다!</b> Some items didn't transferred successfully! 일부 항목이 전송되지 않았습니다! Please stop download progress first. 먼저 다운로드 진행을 중지해 주세요. Hide options 옵션 숨기기 Show options 옵션 표시하기 Stop all downloads first! 먼저 모든 다운로드를 중지하세요! Moving is 이동하기는 finished! 완료되었습니다! Download is in progress by video finder! 비디오 파인더를 통해 다운로드가 진행 중입니다! be patient! 잠시만 기다려주세요! Stop the following download first: 먼저 다음 다운로드를 중지하세요: ffmpeg is not installed! ffmpeg가 설치되지 않았습니다! Not enough free space in: 사용 가능한 공간이 부족합니다: muxing error 먹싱 오류 an error occurred 오류 발생됨 Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File 파일 Edit 편집 View 보기 Download 다운로드 Queue 대기열 Video Finder 비디오 찾기도구 Help 도움말 Sort by 정렬 기준 Persepolis Download Manager Persepolis 다운로드 관리자 Category 카테고리 File Name 파일 이름 Status 상태 Size 크기 Downloaded 다운로드됨 Percentage 퍼센트 Connections 연결 Link 링크 &File 파일(&F) &Edit 편집(&E) &View 보기(&V) &Download 다운로드(&D) &Queue 대기열(&Q) &Help 도움말(&H) Show/Hide system tray icon 시스템 트레이 아이콘 표시/숨김 Add New Download Link 새 다운로드 링크 추가하기 Resume Download 다운로드 이어받기 Pause Download 다운로드 일시정지 Stop Download 다운로드 중지하기 Stop/Cancel Download 다운로드 중지/취소 Properties 속성 Progress 진행률 Exit 종료 Clear all items in download list 다운로드 목록의 모든 항목 비우기 Create new download queue 새 다운로드 대기열 만들기 Remove this queue 이 대기열 제거하기 Start this queue 이 대기열 시작하기 Stop this queue 이 대기열 중지하기 Move currently selected items up by one row 현재 선택된 항목을 한 행 위로 이동하기 Move currently selected items down by one row 현재 선택한 항목을 한 행 아래로 이동하기 Preferences 환경설정 About 정보 Report an issue 이슈 보고 Start Time 시작 시간 End Time 종료 시간 Download bottom of the list first 목록 하단에서 먼저 다운로드하기 Limit Speed 제한 속도 Apply 적용하기 After download 다운로드 완료 후 Shut Down 컴퓨터 끄기 V&ideo Finder 비디오 찾기도구(&I) <b>Video file status: </b> <b>비디오 파일 상태: </b> <b>Audio file status: </b> <b>오디오 파일 상태: </b> <b>Status: </b> <b>상태: </b> <b>Muxing status: </b> <b>먹싱 상태: </b> downloaded 다운로드됨 Active 활성 Not Active 비활성 Started 시작됨 Error 오류 Complete 완료 Transfer Rate 전송 속도 Estimated Time Left 남은 예상 시간 First Try Date 처음 시도 날짜 Last Try Date 마지막 시도 날짜 Find Video Links... 비디오 링크 찾기... Download video or audio from Youtube, Vimeo, etc. Youtube, Vimeo 등에서 비디오나 오디오를 다운로드하세요. Stop All Active Downloads 모든 활성 다운로드 중지하기 File Size 파일 크기 Download Status 다운로드 상태 Show System Tray Icon 시스템 트레이 아이콘 표시하기 Show Menubar 메뉴표시줄 표시하기 Show Side Panel 측면 패널 표시하기 Minimize to System Tray 시스템 트레이로 최소화 Add New Download Link... 새 다운로드 링크 추가하기... Import Links from Text File... 텍스트 파일에서 링크 가져오기... Create a text file and put links in it, line by line! 텍스트 파일을 만들고 그 안에 링크를 한 줄씩 넣어 보세요! Open File... 파일 열기... Open Download Folder 다운로드 폴더 열기 Open Default Download Folder 기본 다운로드 폴더 열기 Clear Download List 다운로드 목록 비우기 Remove Selected Downloads from List 목록에서 선택한 다운로드 제거하기 Delete Selected Download Files 선택한 다운로드 파일 삭제하기 Move Selected Download Files to Another Folder... 선택한 다운로드 파일을 다른 폴더로 이동하기... Move Selected Download Files to Another Folder 선택한 다운로드 파일을 다른 폴더로 이동하기 Create New Queue... 새 대기열 만들기... Remove Queue 대기열 제거하기 Start Queue 대기열 시작하기 Stop Queue 대기열 중지하기 Move Selected Items Up 선택한 항목 위로 이동하기 Move Selected Items Down 선택한 항목 아래로 이동하기 Report an Issue 이슈 보고 Show Log File 로그 파일 표시하기 Hide Options 옵션 숨기기 Keep System Awake! 시스템 작동 상태 유지! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>이 옵션은 시스템이 절전 모드로 전환되는 것을 방지합니다. 전원 관리자가 시스템을 자동으로 절전모드로 전환하는 경우 필요합니다. </p></body></html> Start Mixing 믹싱 시작하기 <b>Video File Status: </b> <b>비디오 파일 상태: </b> <b>Audio File Status: </b> <b>오디오 파일 상태: </b> <b>Mixing status: </b> <b>먹싱 상태: </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! Aria2 연결이 끊어졌습니다! Persepolis is trying to connect! be patient! Persepolis가 연결을 시도하고 있습니다! 잠시만 기다려주세요! Aria2 did not respond! Aria2가 응답하지 않았습니다! Please try again. 다시 시도해 주세요. Try again! 다시 시도해 보세요! progress_ui_tr Persepolis Download Manager Persepolis 다운로드 관리자 Status: 상태: Downloaded: 다운로드됨: Transfer rate: 전송 속도: Estimated time left: 남은 예상 시간: Number of connections: 연결 수: Download Information 다운로드 정보 After download 다운로드 완료 후 Apply 적용하기 Shut Down 컴퓨터 끄기 Download Options 다운로드 옵션 Resume 이어받기 Pause 일시정지 Stop 중지하기 Link: 링크: Limit speed 제한 속도 setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Persepolis를 다시 시작해주세요!</center></b><br><center>Persepolis를 다시 시작하면 일부 변경 사항이 적용됩니다</center> Restart Persepolis! Persepolis 다시 시작하기 <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>이 단축키는 이전에 사용한 적이 있습니다! 다른 단축키를 사용하세요!</center></b> setting_ui_tr Preferences 환경설정 <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>다운로드에 실패한 경우 시도 횟수를 지정합니다.</p></body></html> Number of tries: 시도 횟수: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>재시도 사이에 대기할 시간(초)을 지정합니다. 다운로드 관리자는 HTTP 서버가 503 응답을 반환하면 다운로드를 다시 시도합니다.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>시간초과를 초 단위로 지정합니다. </p></body></html> Timeout (seconds): 시간 초과 (초): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>다중 연결을 사용하면 다운로드 속도를 높일 수 있습니다..</p></body></html> Number of connections: 연결 수: RPC port number: RPC port number: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> 수신할 JSON-RPC/XML-RPC 서버의 포트 번호를 지정합니다. 가능한 값: 1024 - 65535 기본값: 6801 </p></body></html> Change Aria2 default path Aria2 기본 경로 변경하기 Change 변경하기 Download Options 다운로드 옵션 Volume: 용량: Notifications 알림 Style: 스타일: Color scheme: 색 구성표: Icons: 아이콘: Notification type: 알림 유형: Font: 글꼴: Size: 크기: Run Persepolis at startup 시작 시 Persepolis 실행하기 Keep system awake! 시스템 작동 상태 유지! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>형식 HH:MM</p></body></html> File Name 파일 이름 Status 상태 Size 크기 Downloaded 다운로드됨 Percentage 퍼센트 Connections 연결 Category 카테고리 Video Finder Options 비디오 찾기도구 옵션 Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> 캡처할 최대 링크 수:<br/><small>(브라우저가 한 번에 여러 개의 동영상 링크를 전송하는 경우)</small> Defaults 기본값 Cancel 취소 OK 확인 Press new keys 새 키 누르기 Action 동작 Shortcut 단축키 Shortcuts 단축키 Quit 종료 Hide main window if close button clicked. 닫기 버튼을 클릭하면 기본 창이 숨겨집니다. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>이 기능은 운영 체제에서 작동하지 않을 수 있습니다.</p></body></html> Language: 언어: Minimize to System Tray 시스템 트레이로 최소화 Remove Download Items 다운로드 항목 제거하기 Delete Download Items 다운로드 항목 삭제하기 Move Selected Items Up 선택한 항목 위로 이동하기 Move Selected Items Down 선택한 항목 아래로 이동하기 Add New Download Link 새 다운로드 링크 추가하기 Add New Video Link 새 비디오 링크 추가하기 Import Links from Text File 텍스트 파일에서 링크 가져오기 Wait period between retries (seconds): 재시도 간 대기 시간 (초): Wait period between each download in queue: 대기열의 각 다운로드 사이의 대기 시간: Don't use certificate to verify the peers 피어를 확인하기 위해 인증서를 사용하지 않음 <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>이 옵션은 SSL/TLS 핸드셰이크 실패를 방지합니다. 하지만 사용에 따른 위험은 사용자 본인의 책임입니다!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> <html><head/><body><p>주의: 잘경로가 잘못되면 문제가 발생할 수 있습니다! 주의해서 수행하거나 환경설정을 변경하지 마세요!</p></body></html> Download folder: 다운로드 폴더: Create subfolders for Music,Videos, ... in default download folder 기본 다운로드 폴더에 음악, 동영상 등에 대한 하위 폴더 만들기 Save As 다른 이름으로 저장 Enable Notification Sounds 알림 사운드 활성화 Toolbar icons size: 도구모음 아이콘 크기: If browser is opened, start Persepolis in system tray 브라우저가 열리면, 시스템 트레이에서 Persepolis를 시작합니다 Enable system tray icon 시스템 트레이 아이콘 활성화 Show download complete dialog when download is finished 다운로드가 완료되면 다운로드 완료 대화상자 표시하기 Show menubar 메뉴표시줄 표시하기 Show side panel 측면 패널 표시하기 Show download progress window 다운로드 진행률 창 표시하기 <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>이 옵션은 시스템이 절전 모드로 전환되는 것을 방지합니다. 전원 관리자가 시스템을 자동으로 절전모드로 전환하는 경우 필요합니다. </p></body></html> Show these columns: 다음 열 표시: Transfer Rate 전송 속도 Estimated Time Left 남은 예상 시간 First Try Date 처음 시도 날짜 Last Try Date 마지막 시도 날짜 Columns Customization 열 사용자 정의 Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> text_ui_tr Persepolis Download Manager Persepolis 다운로드 관리자 Links 링크 Select All 모두 선택하기 Deselect All 모두삭제하기 Add to queue: 대기열에 추가하기: Proxy 프록시 IP: IP: Port: 포트: Change Download Folder 다운로드 폴더 변경하기 OK 확인 Cancel 취소 Download Options 다운로드 옵션 Proxy password: 프록시 비밀번호: Proxy username: 프록시 사용자이름: Download username and password 사용자이름 및 비밀번호 다운로드 Download username: 사용자이름 다운로드: Download password: 비밀번호 다운로드: Download folder: 다운로드 폴더: Limit speed 제한 속도 Number of connections: 연결 수: video_finder_progress_ui_tr <b>Video file status: </b> <b>비디오 파일 상태: </b> <b>Audio file status: </b> <b>오디오 파일 상태: </b> <b>Muxing status: </b> <b>먹싱 상태: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder 비디오 찾기도구 Fetch Media List 미디어 목록 가져오기 Select a format 형식 선택하기 Please enter a valid video link 올바른 동영상 링크를 입력하세요 Fetching Media Info... 미디어 정보 가져오는 중... Video format: 비디오 형식: Audio format: 오디오 형식: Advanced options 고급 옵션 persepolisdm-persepolis-867ee76/resources/locales/ui_nl_NL.qm000066400000000000000000001333721464161131600244660ustar00rootroot00000000000000­! ; eFxMVb|$liww&p|QJ_c2D% q$R)5V5 S]ccIQu 5P`u 59uPCcQc#*p"g'a A5Au\. ,2 v nw Qo 1^*iF<KFhKF6KF_Ic0[4[4=%#8쑀3` J BANCE%]I3 ^}MeOfn}gz^!zG.Xt#I I,ICC(S_`m^/twI1sXjXjW a>hT?0NjE07T1TN1TGO~O_. 2@_`#c>Bc>i<CUjrOjrtt(vRee5k?>B>X Wby)}9Zk%aW oTdw%I()o)oi)oB-BB-B9ND&9N:^:<=NG(JM?$, [V]1PtyK tA?uxDZ<xDZgK!XC(V` )*i֣[S@21LBsbpyp *_u]`G2QR6`6`S6`9u]sq)~=`o`y +@-P .QN .| > $dC AN. R W] ^[l `a b g mp: |. }R, }Q% ~> t h F0* U*j NY  eU] UZs U O. g8* sL^ e~J ^v s "ZWX$ /lU Ert _{ _Ge _S if9 if` s> `l  Yp bG ( ,!9 >ET >E Fq Uq: `r` gn< n v!C z  {Ǝ6 wHR wh  JN  N5 ( M 7W d 5a (^ 2S 2 P[ Xz b[^o e.`Q e.k stc8 q q" e* N 8v D\ jz K[ [(  Q ,l U c+  C/7 .H  >P \eK qN B Bw BZ Bk0 B\ $@   i">.dZ3>7I 7I _6NxB 5xBHN'XJ'Tnb13+P202f3P r#6$ ?r4?G]>5)]>gRiTNuS"y^Dy^4{(r}p@"V)%[,[.?$q%d$qe?ly.1{Ii, AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia about_ui_tr<a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy-project</a>\Socks to http proxy project about_ui_trr<a href=https://github.com/aria2/aria2>Aria2c-project</a>9Aria2c project about_ui_trv<a href=https://github.com/ffmpeg/ffmpeg>FFmpeg-project</a>;FFmpeg project about_ui_trr<a href=https://github.com/ginuerzh/gost>Gost-project</a>9Gost project about_ui_trv<a href=https://github.com/yt-dlp/yt-dlp>YT-DLP-project</a>;YT-DLP project about_ui_tr<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trOver PersepolisAbout Persepolis about_ui_trErkenningenAcknowledgments about_ui_trErkenningen:Acknowledgments: about_ui_trOntwikkelaars Developers about_ui_trLicentieLicense about_ui_trOkOK about_ui_tr2Persepolis-downloadbeheerPersepolis Download Manager about_ui_tr.Met heel veel dank aan:Special thanks to: about_ui_trVertalers Translators about_ui_tr,Downloadlink toevoegenAdd Download Link addlink_ui_tr2Toevoegen aan categorie: Add to category:  addlink_ui_tr&Geavanceerde optiesAdvanced Options addlink_ui_trAnnulerenCancel addlink_ui_tr2Andere downloadmap kiezenChange Download Folder addlink_ui_tr.Bestandsnaam wijzigen: Change file name:  addlink_ui_trPProxy-instellingen van systeem gebruikenDetect System Proxy Settings addlink_ui_trDownloadmap: Download Folder:  addlink_ui_tr Later downloadenDownload Later addlink_ui_trDownloadlink: Download link:  addlink_ui_tr8Wachtwoord voor downloaden: Download password:  addlink_ui_trXGebruikersnaam en wachtwoord voor downloadenDownload username and password addlink_ui_tr@Gebruikersnaam voor downloaden: Download username:  addlink_ui_trEindtijdEnd time addlink_ui_trHttpHTTP addlink_ui_tr HttpsHTTPS addlink_ui_tr Kop: Header:  addlink_ui_trIp-adres: IP:  addlink_ui_tr"Snelheid inperken Limit speed addlink_ui_trLinkLink addlink_ui_tr&Cookies gebruiken: Load cookies:  addlink_ui_trMeer opties More Options addlink_ui_trDAantal gelijktijdige verbindingen:Number of connections: addlink_ui_trOkOK addlink_ui_tr Poort:Port: addlink_ui_tr ProxyProxy addlink_ui_tr"Proxywachtwoord: Proxy password:  addlink_ui_tr*Proxy-gebruikersnaam:Proxy username:  addlink_ui_trVerwijzing:  Referrer:  addlink_ui_tr"Locatie onthoudenRemember this path addlink_ui_tr Socks5SOCKS5 addlink_ui_trBegintijd Start time addlink_ui_tr"Gebruikersagent:  User agent:  addlink_ui_tr*<b>Bestandsnaam</b>: File name: after_download_src_ui_tr <b>Grootte</b>:  Size: after_download_src_ui_trOk OK after_download_ui_tr$ Bestand openen  Open File after_download_ui_tr2<b>Download afgerond!</b>Download Completed!after_download_ui_tr<b>Link</b>:  Link: after_download_ui_tr(<b>Opslaan als</b>: Save as: after_download_ui_tr.Bericht niet meer tonenDon't show this message again.after_download_ui_tr$Downloadmap openenOpen Download Folderafter_download_ui_tr2Persepolis-downloadbeheerPersepolis Download Managerafter_download_ui_tr&Logberichten wissenClear Log Messageslog_window_ui_trSluitenCloselog_window_ui_tr>Selectie kopiren naar klembordCopy Selected to Clipboardlog_window_ui_trLogboekPersepolis Loglog_window_ui_tr*Logberichten herladenRefresh Log Messageslog_window_ui_trProbleem melden Report Issuelog_window_ui_tr"</b>  bestaat al!" already exists!mainwindow_src_ui_tr<b><center>Je hebt deze link al toegevoegd! Weet je zeker dat je deze opnieuw wilt toevoegen?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Deze handeling verwijdert de gedownloade bestanden<br>PERMANENT van je schijf!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Deze handeling verwijdert alle downloaditems in deze wachtrij<br>van de lijst Alle downloads !</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr8<b>Aantal verbindingen</b>: Connections: mainwindow_src_ui_tr&<b>Gedownload</b>: Downloaded: mainwindow_src_ui_trD<b>Resterende tijd (geschat)</b>: Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trl<b>Je kunt de standaard wachtrij niet verwijderen!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Status</b>: Status: mainwindow_src_ui_tr"<b>Snelheid</b>: Transfer rate: mainwindow_src_ui_trB<center>Wil je doorgaan?</center>)
Do you want to continue?
mainwindow_src_ui_tr&Aria2 reageert nietAria2 did not respondmainwindow_src_ui_tr(Aria2 reageert niet!Aria2 did not respond!mainwindow_src_ui_trAria2 reageert niet; even geduld! Persepolis probeert het over 2 seconden opnieuw!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr>Verbinding met Aria2 verbroken!Aria2 disconnected!mainwindow_src_ui_trnControleer je internetverbinding en herstart Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr"Download afgerondDownload Completemainwindow_src_ui_tr$Download ingeplandDownload Scheduledmainwindow_src_ui_trDownload startDownload Startsmainwindow_src_ui_tr Download gestoptDownload Stoppedmainwindow_src_ui_trNDe download is bezig in de videozoeker!(Download is in progress by video finder!mainwindow_src_ui_trFoutmelding - Error - mainwindow_src_ui_trFoutmelding &Error...mainwindow_src_ui_trFoutmelding:Error: mainwindow_src_ui_tr Opties verbergen Hide optionsmainwindow_src_ui_tr:Minimaliseren naar systeemvakMinimize to system traymainwindow_src_ui_tr$De verplaatsing is Moving ismainwindow_src_ui_trNiet gevonden Not Foundmainwindow_src_ui_tr8Onvoldoende vrije ruimte in:Not enough free space in:mainwindow_src_ui_tr$Handeling mislukt!Operation was not successful!mainwindow_src_ui_tr~De handeling is mislukt! Zet eerst de volgende categorie stop: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr$Handeling mislukt.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr\Persepolis kan geen verbinding maken met Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr&Persepolis sluit jePersepolis is shutting downmainwindow_src_ui_tr\Persepolis probeert te verbinden; even geduld &,Persepolis is trying to connect! be patient!mainwindow_src_ui_trlPersepolis probeert opnieuw te verbinden; even geduld &+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr,Herverbonden met Aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_trEven geduld &Please Wait...mainwindow_src_ui_tr<Hervat de volgende categorie: &Please resume the following category: mainwindow_src_ui_trHZet eerst de downloadvoortgang stop.$Please stop download progress first.mainwindow_src_ui_trLZet eerst de volgende categorie stop: *Please stop the following category first: mainwindow_src_ui_tr@Zet de volgende categorie stop: $Please stop the following category: mainwindow_src_ui_trJZet eerst de volgende download stop: *Please stop the following download first: mainwindow_src_ui_tr(Probeer het opnieuw.Please try again.mainwindow_src_ui_tr(Werk Persepolis bij.Please update Persepolis.mainwindow_src_ui_tr"Wachtrij gestopt!Queue Stopped!mainwindow_src_ui_tr$Wachtrij afgerond!Queue completed!mainwindow_src_ui_tr Klaar &Ready...mainwindow_src_ui_tr.Bezig met herverbinden &Reconnecting Aria2...mainwindow_src_ui_tr*Persepolis herstartenRestart Persepolismainwindow_src_ui_tr.Selectie versturen naarSend selected downloads tomainwindow_src_ui_trVersturen naarSend tomainwindow_src_ui_tr$Hoofdvenster tonenShow main Windowmainwindow_src_ui_trOpties tonen Show optionsmainwindow_src_ui_trRSommige items zijn niet goed overgekomen!+Some items didn't transferred successfully!mainwindow_src_ui_trSorteren opSort bymainwindow_src_ui_tr<Zet eerst alle downloads stop!Stop all downloads first!mainwindow_src_ui_trJBreek eerst de volgende download af: #Stop the following download first: mainwindow_src_ui_trEr is onvoldoende vrije ruimte beschikbaar in de downloadmap. Maak ruimte vrij of kies een andere map.oThere is not enough disk space available at the download folder! Please choose another one or clear some space.mainwindow_src_ui_tr&Probeer het opnieuw Try againmainwindow_src_ui_tr(Probeer het opnieuw! Try again!mainwindow_src_ui_tr2er is een fout opgetredenan error occurredmainwindow_src_ui_treven geduld! be patient!mainwindow_src_ui_tr8ffmpeg is niet genstalleerdffmpeg is not installed!mainwindow_src_ui_tris afgerond! finished!mainwindow_src_ui_trmuxing-fout muxing errormainwindow_src_ui_tr6systeem over 20 seconden afyour system in 20 secondsmainwindow_src_ui_tr8yt-dlp is niet genstalleerdyt-dlp is not installed!mainwindow_src_ui_trgedownload downloadedmainwindow_ui_tr&Download &Downloadmainwindow_ui_trB&ewerken&Editmainwindow_ui_tr&Bestand&Filemainwindow_ui_tr &Hulp&Helpmainwindow_ui_tr&Wachtrij&Queuemainwindow_ui_tr &Beeld&Viewmainwindow_ui_tr@<b>Status van audiobestand: </b>Audio File Status: mainwindow_ui_tr@<b>Status van audiobestand: </b>Audio file status: mainwindow_ui_tr&<b>Mengstatus: </b>Mixing status: mainwindow_ui_tr,<b>Muxing-status: </b>Muxing status: mainwindow_ui_tr<b>Status: </b>Status: mainwindow_ui_tr@<b>Status van videobestand: </b>Video File Status: mainwindow_ui_tr@<b>Status van videobestand: </b>Video file status: mainwindow_ui_trx<html><head/><body><p>Deze optie voorkomt dat het systeem inactief wordt. Dit is nodig als energiebeheer je systeem automatisch in de pauze- of slaapstand zet.</p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

mainwindow_ui_trOverAboutmainwindow_ui_tr ActiefActivemainwindow_ui_tr:Nieuwe downloadlink toevoegenAdd New Download Linkmainwindow_ui_tr<Nieuwe downloadlink toevoegen &Add New Download Link...mainwindow_ui_tr(Actie na downloaden:After downloadmainwindow_ui_trToepassenApplymainwindow_ui_trCategorieCategorymainwindow_ui_tr(Downloadlijst wissenClear Download Listmainwindow_ui_trDAlle items op downloadlijst wissen Clear all items in download listmainwindow_ui_trVoltooidCompletemainwindow_ui_tr&Aantal verbindingen Connectionsmainwindow_ui_tr0Nieuwe wachtrij creren &Create New Queue...mainwindow_ui_tr|Creer een tekstbestand en vul dit regel voor regel met links.5Create a text file and put links in it, line by line!mainwindow_ui_tr>Nieuwe downloadwachtrij crerenCreate new download queuemainwindow_ui_tr(Selectie verwijderenDelete Selected Download Filesmainwindow_ui_trDownloadDownloadmainwindow_ui_trDownloadstatusDownload Statusmainwindow_ui_trBOnderaan beginnen met downloaden"Download bottom of the list firstmainwindow_ui_trdDownload video's of audio van YouTube, Vimeo, etc.1Download video or audio from Youtube, Vimeo, etc.mainwindow_ui_trGedownload Downloadedmainwindow_ui_trBewerkenEditmainwindow_ui_trEindtijdEnd Timemainwindow_ui_trFoutErrormainwindow_ui_tr2Resterende tijd (geschat)Estimated Time Leftmainwindow_ui_trAfsluitenExitmainwindow_ui_trBestandFilemainwindow_ui_trBestandsnaam File Namemainwindow_ui_trBestandsgrootte File Sizemainwindow_ui_tr$Videolinks zoeken &Find Video Links...mainwindow_ui_tr&Datum eerste pogingFirst Try Datemainwindow_ui_trHulpHelpmainwindow_ui_tr Opties verbergen Hide Optionsmainwindow_ui_tr:Links importeren van klembordImport Links From Clipboardmainwindow_ui_tr<Links importeren van klembord &Import Links from Clipboard...mainwindow_ui_trDLinks importeren uit tekstbestand &Import Links from Text File...mainwindow_ui_tr*Systeem actief houdenKeep System Awake!mainwindow_ui_tr(Datum laatste poging Last Try Datemainwindow_ui_tr"Snelheid inperken Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_tr:Minimaliseren naar systeemvakMinimize to System Traymainwindow_ui_trPSelectie verplaatsen naar andere locatie.Move Selected Download Files to Another Foldermainwindow_ui_trRSelectie verplaatsen naar andere locatie &1Move Selected Download Files to Another Folder...mainwindow_ui_tr6Selectie omhoog verplaatsenMove Selected Items Downmainwindow_ui_tr6Selectie omhoog verplaatsenMove Selected Items Upmainwindow_ui_trFSelectie n rij omlaag verplaatsen-Move currently selected items down by one rowmainwindow_ui_trFSelectie n rij omhoog verplaatsen+Move currently selected items up by one rowmainwindow_ui_trInactief Not Activemainwindow_ui_tr8Standaard downloadmap openenOpen Default Download Foldermainwindow_ui_tr$Downloadmap openenOpen Download Foldermainwindow_ui_trBestand openen & Open File...mainwindow_ui_tr"Download pauzerenPause Downloadmainwindow_ui_trPercentage Percentagemainwindow_ui_tr2Persepolis-downloadbeheerPersepolis Download Managermainwindow_ui_trVoorkeuren Preferencesmainwindow_ui_trVoortgangProgressmainwindow_ui_trEigenschappen Propertiesmainwindow_ui_trWachtrijQueuemainwindow_ui_tr(Wachtrij verwijderen Remove Queuemainwindow_ui_tr<Selectie verwijderen van lijst#Remove Selected Downloads from Listmainwindow_ui_tr2Deze wachtrij verwijderenRemove this queuemainwindow_ui_trProbleem meldenReport an Issuemainwindow_ui_trProbleem meldenReport an issuemainwindow_ui_tr$Download hervattenResume Downloadmainwindow_ui_tr Logboek bekijken Show Log Filemainwindow_ui_trMenubalk tonen Show Menubarmainwindow_ui_trZijpaneel tonenShow Side Panelmainwindow_ui_tr2Systeemvakpictogram tonenShow System Tray Iconmainwindow_ui_trFSysteemvakpictogram tonen/verbergenShow/Hide system tray iconmainwindow_ui_trAfsluiten Shut Downmainwindow_ui_trGrootteSizemainwindow_ui_trSorteren opSort bymainwindow_ui_trMengen starten Start Mixingmainwindow_ui_tr Wachtrij starten Start Queuemainwindow_ui_trBegintijd Start Timemainwindow_ui_tr*Deze wachtrij startenStart this queuemainwindow_ui_trGestartStartedmainwindow_ui_tr StatusStatusmainwindow_ui_trBAlle actieve downloads stopzettenStop All Active Downloadsmainwindow_ui_tr&Download stopzetten Stop Downloadmainwindow_ui_tr Wachtrij stoppen Stop Queuemainwindow_ui_tr0Deze wachtrij stopzettenStop this queuemainwindow_ui_tr8Download afbreken/stopzettenStop/Cancel Downloadmainwindow_ui_trSnelheid Transfer Ratemainwindow_ui_trV&ideo's zoeken V&ideo Findermainwindow_ui_trVideo's zoeken Video Findermainwindow_ui_tr BeeldViewmainwindow_ui_tr(Aria2 reageert niet!Aria2 did not respond!progress_src_ui_tr>Verbinding met Aria2 verbroken!Aria2 disconnected!progress_src_ui_tr\Persepolis probeert te verbinden; even geduld &,Persepolis is trying to connect! be patient!progress_src_ui_tr(Probeer het opnieuw.Please try again.progress_src_ui_tr(Probeer het opnieuw! Try again!progress_src_ui_tr&Actie na downloadenAfter downloadprogress_ui_trToepassenApplyprogress_ui_tr$DownloadinformatieDownload Informationprogress_ui_trDownloadoptiesDownload Optionsprogress_ui_trGedownload: Downloaded:progress_ui_tr4Resterende tijd (geschat):Estimated time left:progress_ui_tr"Snelheid inperken Limit speedprogress_ui_tr Link: Link: progress_ui_trDAantal gelijktijdige verbindingen:Number of connections: progress_ui_trPauzerenPauseprogress_ui_tr2Persepolis-downloadbeheerPersepolis Download Managerprogress_ui_trHervattenResumeprogress_ui_trAfsluiten Shut Downprogress_ui_trStatus: Status: progress_ui_trStoppenStopprogress_ui_trSnelheid:Transfer rate: progress_ui_tr<b><center>Herstart Persepolis!</center></b><br><center>Sommige wijzigingen worden pas toegepast na een herstart.</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Deze sneltoets wordt al gebruikt! Kies een andere!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr(Herstart Persepolis!Restart Persepolis!setting_src_ui_trj<html><head/><body><p>Geef een poortnummer op waar de JSON-RPC/XML-RPC-server naar moet luisteren. Mogelijke waarden zijn 1024 - 65535 // De standaardpoort is 6801</p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_tr<html><head/><body><p>Let op: een verkeerde locatie problemen veroorzaken! Bij twijfel niet aanpassen.</p></body></html>

Attention: Wrong path may cause problems! Do it carefully or don't change default setting!

 setting_ui_trj<html><head/><body><p>Opmaak: UU:MM</p></body></html>4

Format HH:MM

 setting_ui_trL<html><head/><body><p>Haal de tijd op uit het externe bestand van de externe http-/ftp-server en pas toe op het lokale bestand (indien beschikbaar).</p></body></html>

Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.

 setting_ui_tr<html><head/><body><p>Stel in hoe vaak opnieuw moet worden geprobeerd na een mislukking</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr4<html><head/><body><p>Stel het aantal seconden in tussen pogingen. Persepolis doet een nieuwe poging als de http-server 503  antwoordt.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Stel de time-out in, in seconden.</p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Het programma zal het klembord automatisch scannen op gekopieerde links. </p></body></html>x

The program will automatically check the clipboard for copied links.

 setting_ui_tr<html><head/><body><p>Deze functie werkt mogelijk niet op je besturingssysteem.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Let op: met deze optie omzeil je de ssl-/tls-overdrachtsfoutmelding. Gebruik is op eigen risico!</p></body></html>r

This option avoids SSL/TLS handshake failure. But use it at your own risk!

 setting_ui_trx<html><head/><body><p>Deze optie voorkomt dat het systeem inactief wordt. Dit is nodig als energiebeheer je systeem automatisch in de pauze- of slaapstand zet.</p></body></html>

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

 setting_ui_tr<html><head/><body><p>Meerdere gelijktijdige verbindingen kunnen het downloaden versnellen.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trl<html><head/><body><p>Als er een downloadverzoek wordt verstuurd vanuit de browserextensie, dan start het downloaden zonder het toevoegvenster te tonen. </p></body></html>

When a download request is sent from the browser extension, the download will start without showing the Add Link window.

 setting_ui_tr ActieAction setting_ui_tr:Nieuwe downloadlink toevoegenAdd New Download Link setting_ui_tr4Nieuwe videolink toevoegenAdd New Video Link setting_ui_trAnnulerenCancel setting_ui_trCategorieCategory setting_ui_trWijzigenChange setting_ui_trFStandaardlocatie van Aria2 wijzigenChange Aria2 default path setting_ui_trXControleer het klembord op gekopieerde links'Check system clipboard for copied links setting_ui_trKleurenschema: Color scheme:  setting_ui_trKolomaanpassingColumns Customization setting_ui_tr&Aantal verbindingen Connections setting_ui_trvSubmappen creren in downloadmap voor muziek, video's, etc.BCreate subfolders for Music,Videos, ... in default download folder setting_ui_tr StandaardwaardenDefaults setting_ui_tr:Gedownloade items verwijderenDelete Download Items setting_ui_trdGeen certificaten gebruiken om peers te verifiren)Don't use certificate to verify the peers setting_ui_trDownloadoptiesDownload Options setting_ui_trDownloadmap: Download folder:  setting_ui_trDownloadverzoeken van de browser worden onmiddellijk uitgevoerd.@Download requests from the browser will be executed immediately. setting_ui_trGedownload Downloaded setting_ui_tr8Meldingsgeluiden inschakelenEnable Notification Sounds setting_ui_tr2Systeemvakpictogram tonenEnable system tray icon setting_ui_tr2Resterende tijd (geschat)Estimated Time Left setting_ui_trBestandsnaam File Name setting_ui_tr&Datum eerste pogingFirst Try Date setting_ui_trLettertype: Font:  setting_ui_trfHoofdvenster minimaliseren na klikken op sluitknop.)Hide main window if close button clicked. setting_ui_trPictogrammen: Icons:  setting_ui_trxPersepolis opstarten in systeemvak indien browser geopend is5If browser is opened, start Persepolis in system tray setting_ui_trBLinks importeren uit tekstbestandImport Links from Text File setting_ui_tr*Systeem actief houdenKeep system awake! setting_ui_tr Taal: Language:  setting_ui_tr(Datum laatste poging Last Try Date setting_ui_trMaximaal aantal op te halen links: <br/><small> (indien de browser meerdere videolinks tegelijk aanbiedt)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr:Minimaliseren naar systeemvakMinimize to System Tray setting_ui_tr6Selectie omhoog verplaatsenMove Selected Items Down setting_ui_tr6Selectie omhoog verplaatsenMove Selected Items Up setting_ui_trSoort melding: Notification type:  setting_ui_trMeldingen Notifications setting_ui_trDAantal gelijktijdige verbindingen:Number of connections:  setting_ui_tr Aantal pogingen:Number of tries:  setting_ui_trOkOK setting_ui_trPercentage Percentage setting_ui_trVoorkeuren Preferences setting_ui_tr6Druk op de gewenste toetsenPress new keys setting_ui_trAfsluitenQuit setting_ui_tr RPC-poortnummer:RPC port number:  setting_ui_trExterne tijd Remote time setting_ui_tr0Gedownloade items wissenRemove Download Items setting_ui_tr*Automatisch opstartenRun Persepolis at startup setting_ui_trOpslaan alsSave As setting_ui_trSneltoetsShortcut setting_ui_trSneltoetsen Shortcuts setting_ui_trpBevestigingsvenster tonen als het downloaden is afgerond7Show download complete dialog when download is finished setting_ui_trFVenster met downloadvoortgang tonenShow download progress window setting_ui_trMenubalk tonen Show menubar setting_ui_trZijpaneel tonenShow side panel setting_ui_tr$Te tonen kolommen:Show these columns: setting_ui_trGrootteSize setting_ui_trGrootte: Size:  setting_ui_tr StatusStatus setting_ui_trStijl: Style:  setting_ui_tr.Time-out (in seconden):Timeout (seconds):  setting_ui_tr<Pictogramgrootte op werkbalk: Toolbar icons size:  setting_ui_trSnelheid Transfer Rate setting_ui_tr Video-zoekoptiesVideo Finder Options setting_ui_trVolume: Volume:  setting_ui_trNWachttijd tussen downloads in wachtrij:+Wait period between each download in queue: setting_ui_trFTijd tussen pogingen (in seconden):'Wait period between retries (seconds):  setting_ui_tr0Toevoegen aan wachtrij: Add to queue:  text_ui_trAnnulerenCancel text_ui_tr2Andere downloadmap kiezenChange Download Folder text_ui_tr.Selectie ongedaan maken Deselect All text_ui_trDownloadoptiesDownload Options text_ui_trDownloadmap: Download folder:  text_ui_tr8Wachtwoord voor downloaden: Download password:  text_ui_trXGebruikersnaam en wachtwoord voor downloadenDownload username and password text_ui_tr@Gebruikersnaam voor downloaden: Download username:  text_ui_trIp-adres:IP: text_ui_tr"Snelheid inperken Limit speed text_ui_tr LinksLinks text_ui_trDAantal gelijktijdige verbindingen:Number of connections: text_ui_trOkOK text_ui_tr2Persepolis-downloadbeheerPersepolis Download Manager text_ui_trPoort: Port: text_ui_tr ProxyProxy text_ui_tr"Proxywachtwoord: Proxy password:  text_ui_tr*Proxy-gebruikersnaam:Proxy username:  text_ui_tr Alles selecteren Select All text_ui_tr@<b>Status van audiobestand: </b>Audio file status: video_finder_progress_ui_tr&<b>Mengstatus: </b>Mixing status: video_finder_progress_ui_tr,<b>Muxing-status: </b>Muxing status: video_finder_progress_ui_tr@<b>Status van videobestand: </b>Video file status: video_finder_progress_ui_tr&Geavanceerde optiesAdvanced optionsytaddlink_src_ui_trAudioformaat: Audio format:ytaddlink_src_ui_tr$Medialijst ophalenFetch Media Listytaddlink_src_ui_trNBezig met ophalen van media-informatie &Fetching Media Info...ytaddlink_src_ui_tr:Voer een geldige videolink inPlease enter a valid video linkytaddlink_src_ui_trIndeling kiezenSelect a formatytaddlink_src_ui_trVideo's zoeken Video Finderytaddlink_src_ui_trVideoformaat: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_nl_NL.ts000066400000000000000000002532601464161131600244760ustar00rootroot00000000000000 about_ui_tr About Persepolis Over Persepolis Persepolis Download Manager Persepolis-downloadbeheer <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Ontwikkelaars Translators Vertalers License Licentie OK Oké Special thanks to: Met heel veel dank aan: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia Acknowledgments: Erkenningen: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/aria2/aria2>Aria2c-project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP-project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg-project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> <a href=https://github.com/ginuerzh/gost>Gost-project</a> Acknowledgments Erkenningen <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy-project</a> Version 4.3.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: Toevoegen aan categorie: Proxy Proxy IP: Ip-adres: Port: Poort: Change Download Folder Andere downloadmap kiezen Download Folder: Downloadmap: Cancel Annuleren OK Oké Link Link More Options Meer opties Advanced Options Geavanceerde opties Referrer: Verwijzing: Header: Kop: Load cookies: Cookies gebruiken: User agent: Gebruikersagent: Add Download Link Downloadlink toevoegen Download link: Downloadlink: Change file name: Bestandsnaam wijzigen: Detect System Proxy Settings Proxy-instellingen van systeem gebruiken Proxy password: Proxywachtwoord: Proxy username: Proxy-gebruikersnaam: Download username and password Gebruikersnaam en wachtwoord voor downloaden Download username: Gebruikersnaam voor downloaden: Download password: Wachtwoord voor downloaden: Remember this path Locatie onthouden Start time Begintijd End time Eindtijd Limit speed Snelheid inperken Number of connections: Aantal gelijktijdige verbindingen: Download Later Later downloaden HTTP Http HTTPS Https SOCKS5 Socks5 after_download_src_ui_tr <b>File name</b>: <b>Bestandsnaam</b>: <b>Size</b>: <b>Grootte</b>: after_download_ui_tr Persepolis Download Manager Persepolis-downloadbeheer Open File Bestand openen Open Download Folder Downloadmap openen OK Oké Don't show this message again. Bericht niet meer tonen <b>Download Completed!</b> <b>Download afgerond!</b> <b>Save as</b>: <b>Opslaan als</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Logboek Report Issue Probleem melden Close Sluiten Copy Selected to Clipboard Selectie kopiëren naar klembord Refresh Log Messages Logberichten herladen Clear Log Messages Logberichten wissen mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Wachtrij gestopt! Persepolis is shutting down Persepolis sluit je your system in 20 seconds systeem over 20 seconden af Queue completed! Wachtrij afgerond! Show main Window Hoofdvenster tonen Please Wait... Even geduld… Ready... Klaar… Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 reageert niet; even geduld! Persepolis probeert het over 2 seconden opnieuw! Error... Foutmelding… Persepolis can not connect to Aria2 Persepolis kan geen verbinding maken met Aria2 Check your network & Restart Persepolis Controleer je internetverbinding en herstart Persepolis Restart Persepolis Persepolis herstarten Reconnecting Aria2... Bezig met herverbinden… Persepolis reconnected aria2 successfully Herverbonden met Aria2 Error: Foutmelding: <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Gedownload</b>: <b>Transfer rate</b>: <b>Snelheid</b>: <b>Estimated time left</b>: <b>Resterende tijd (geschat)</b>: <b>Connections</b>: <b>Aantal verbindingen</b>: <b>Status</b>: <b>Status</b>: Download Stopped Download gestopt Error - Foutmelding - Download Complete Download afgerond <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Je hebt deze link al toegevoegd! Weet je zeker dat je deze opnieuw wilt toevoegen?</center></b> Download Starts Download start Download Scheduled Download ingepland Operation was not successful. Handeling mislukt. Please resume the following category: Hervat de volgende categorie: Aria2 disconnected! Verbinding met Aria2 verbroken! Persepolis is trying to connect!be patient! Persepolis probeert opnieuw te verbinden; even geduld… Aria2 did not respond! Aria2 reageert niet! Try again! Probeer het opnieuw! Aria2 did not respond Aria2 reageert niet Try again Probeer het opnieuw Please stop the following category: Zet de volgende categorie stop: Persepolis is trying to connect! be patient! Persepolis probeert te verbinden; even geduld… Please try again. Probeer het opnieuw. Minimize to system tray Minimaliseren naar systeemvak Not Found Niet gevonden Operation was not successful! Handeling mislukt! Operation was not successful! Please stop the following category first: De handeling is mislukt! Zet eerst de volgende categorie stop: Please stop the following download first: Zet eerst de volgende download stop: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Deze handeling verwijdert de gedownloade bestanden<br>PERMANENT van je schijf!</center></b> <center>Do you want to continue?</center> <center>Wil je doorgaan?</center> Please stop the following category first: Zet eerst de volgende categorie stop: </b>" already exists! </b>” bestaat al! Send selected downloads to Selectie versturen naar Send to Versturen naar Sort by Sorteren op <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Deze handeling verwijdert alle downloaditems in deze wachtrij<br>van de lijst ‘Alle downloads’!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Je kunt de standaard wachtrij niet verwijderen!</b> Some items didn't transferred successfully! Sommige items zijn niet goed overgekomen! Please stop download progress first. Zet eerst de downloadvoortgang stop. Hide options Opties verbergen Show options Opties tonen Stop all downloads first! Zet eerst alle downloads stop! Moving is De verplaatsing is finished! is afgerond! Download is in progress by video finder! De download is bezig in de videozoeker! be patient! even geduld! Stop the following download first: Breek eerst de volgende download af: ffmpeg is not installed! ffmpeg is niet geïnstalleerd Not enough free space in: Onvoldoende vrije ruimte in: muxing error muxing-fout an error occurred er is een fout opgetreden Please update Persepolis. Werk Persepolis bij. There is not enough disk space available at the download folder! Please choose another one or clear some space. Er is onvoldoende vrije ruimte beschikbaar in de downloadmap. Maak ruimte vrij of kies een andere map. yt-dlp is not installed! yt-dlp is niet geïnstalleerd mainwindow_ui_tr File Bestand Edit Bewerken View Beeld Download Download Queue Wachtrij Video Finder Video's zoeken Help Hulp Sort by Sorteren op Persepolis Download Manager Persepolis-downloadbeheer Category Categorie File Name Bestandsnaam Status Status Size Grootte Downloaded Gedownload Percentage Percentage Connections Aantal verbindingen Link Link &File &Bestand &Edit B&ewerken &View &Beeld &Download &Download &Queue &Wachtrij &Help &Hulp Show/Hide system tray icon Systeemvakpictogram tonen/verbergen Add New Download Link Nieuwe downloadlink toevoegen Resume Download Download hervatten Pause Download Download pauzeren Stop Download Download stopzetten Stop/Cancel Download Download afbreken/stopzetten Properties Eigenschappen Progress Voortgang Exit Afsluiten Clear all items in download list Alle items op downloadlijst wissen Create new download queue Nieuwe downloadwachtrij creëren Remove this queue Deze wachtrij verwijderen Start this queue Deze wachtrij starten Stop this queue Deze wachtrij stopzetten Move currently selected items up by one row Selectie één rij omhoog verplaatsen Move currently selected items down by one row Selectie één rij omlaag verplaatsen Preferences Voorkeuren About Over Report an issue Probleem melden Start Time Begintijd End Time Eindtijd Download bottom of the list first Onderaan beginnen met downloaden Limit Speed Snelheid inperken Apply Toepassen After download Actie na downloaden: Shut Down Afsluiten V&ideo Finder V&ideo's zoeken <b>Video file status: </b> <b>Status van videobestand: </b> <b>Audio file status: </b> <b>Status van audiobestand: </b> <b>Status: </b> <b>Status: </b> <b>Muxing status: </b> <b>Muxing-status: </b> downloaded gedownload Active Actief Not Active Inactief Started Gestart Error Fout Complete Voltooid Transfer Rate Snelheid Estimated Time Left Resterende tijd (geschat) First Try Date Datum eerste poging Last Try Date Datum laatste poging Find Video Links... Videolinks zoeken… Download video or audio from Youtube, Vimeo, etc. Download video's of audio van YouTube, Vimeo, etc. Stop All Active Downloads Alle actieve downloads stopzetten File Size Bestandsgrootte Download Status Downloadstatus Show System Tray Icon Systeemvakpictogram tonen Show Menubar Menubalk tonen Show Side Panel Zijpaneel tonen Minimize to System Tray Minimaliseren naar systeemvak Add New Download Link... Nieuwe downloadlink toevoegen… Import Links from Text File... Links importeren uit tekstbestand… Create a text file and put links in it, line by line! Creëer een tekstbestand en vul dit regel voor regel met links. Open File... Bestand openen… Open Download Folder Downloadmap openen Open Default Download Folder Standaard downloadmap openen Clear Download List Downloadlijst wissen Remove Selected Downloads from List Selectie verwijderen van lijst Delete Selected Download Files Selectie verwijderen Move Selected Download Files to Another Folder... Selectie verplaatsen naar andere locatie… Move Selected Download Files to Another Folder Selectie verplaatsen naar andere locatie Create New Queue... Nieuwe wachtrij creëren… Remove Queue Wachtrij verwijderen Start Queue Wachtrij starten Stop Queue Wachtrij stoppen Move Selected Items Up Selectie omhoog verplaatsen Move Selected Items Down Selectie omhoog verplaatsen Report an Issue Probleem melden Show Log File Logboek bekijken Hide Options Opties verbergen Keep System Awake! Systeem actief houden <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>Deze optie voorkomt dat het systeem inactief wordt. Dit is nodig als energiebeheer je systeem automatisch in de pauze- of slaapstand zet.</p></body></html> Start Mixing Mengen starten <b>Video File Status: </b> <b>Status van videobestand: </b> <b>Audio File Status: </b> <b>Status van audiobestand: </b> <b>Mixing status: </b> <b>Mengstatus: </b> Import Links from Clipboard... Links importeren van klembord… Import Links From Clipboard Links importeren van klembord progress_src_ui_tr Aria2 disconnected! Verbinding met Aria2 verbroken! Persepolis is trying to connect! be patient! Persepolis probeert te verbinden; even geduld… Aria2 did not respond! Aria2 reageert niet! Please try again. Probeer het opnieuw. Try again! Probeer het opnieuw! progress_ui_tr Persepolis Download Manager Persepolis-downloadbeheer Status: Status: Downloaded: Gedownload: Transfer rate: Snelheid: Estimated time left: Resterende tijd (geschat): Number of connections: Aantal gelijktijdige verbindingen: Download Information Downloadinformatie After download Actie na downloaden Apply Toepassen Shut Down Afsluiten Download Options Downloadopties Resume Hervatten Pause Pauzeren Stop Stoppen Link: Link: Limit speed Snelheid inperken setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Herstart Persepolis!</center></b><br><center>Sommige wijzigingen worden pas toegepast na een herstart.</center> Restart Persepolis! Herstart Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Deze sneltoets wordt al gebruikt! Kies een andere!</center></b> setting_ui_tr Preferences Voorkeuren <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Stel in hoe vaak opnieuw moet worden geprobeerd na een mislukking</p></body></html> Number of tries: Aantal pogingen: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Stel het aantal seconden in tussen pogingen. Persepolis doet een nieuwe poging als de http-server ‘503’ antwoordt.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Stel de time-out in, in seconden.</p></body></html> Timeout (seconds): Time-out (in seconden): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Meerdere gelijktijdige verbindingen kunnen het downloaden versnellen.</p></body></html> Number of connections: Aantal gelijktijdige verbindingen: RPC port number: RPC-poortnummer: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p>Geef een poortnummer op waar de JSON-RPC/XML-RPC-server naar moet luisteren. Mogelijke waarden zijn 1024 - 65535 // De standaardpoort is 6801</p></body></html> Change Aria2 default path Standaardlocatie van Aria2 wijzigen Change Wijzigen Download Options Downloadopties Volume: Volume: Notifications Meldingen Style: Stijl: Color scheme: Kleurenschema: Icons: Pictogrammen: Notification type: Soort melding: Font: Lettertype: Size: Grootte: Run Persepolis at startup Automatisch opstarten Keep system awake! Systeem actief houden <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Opmaak: UU:MM</p></body></html> File Name Bestandsnaam Status Status Size Grootte Downloaded Gedownload Percentage Percentage Connections Aantal verbindingen Category Categorie Video Finder Options Video-zoekopties Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Maximaal aantal op te halen links: <br/><small> (indien de browser meerdere videolinks tegelijk aanbiedt)</small> Defaults Standaardwaarden Cancel Annuleren OK Oké Press new keys Druk op de gewenste toetsen Action Actie Shortcut Sneltoets Shortcuts Sneltoetsen Quit Afsluiten Hide main window if close button clicked. Hoofdvenster minimaliseren na klikken op sluitknop. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Deze functie werkt mogelijk niet op je besturingssysteem.</p></body></html> Language: Taal: Minimize to System Tray Minimaliseren naar systeemvak Remove Download Items Gedownloade items wissen Delete Download Items Gedownloade items verwijderen Move Selected Items Up Selectie omhoog verplaatsen Move Selected Items Down Selectie omhoog verplaatsen Add New Download Link Nieuwe downloadlink toevoegen Add New Video Link Nieuwe videolink toevoegen Import Links from Text File Links importeren uit tekstbestand Wait period between retries (seconds): Tijd tussen pogingen (in seconden): Wait period between each download in queue: Wachttijd tussen downloads in wachtrij: Don't use certificate to verify the peers Geen certificaten gebruiken om peers te verifiëren <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Let op: met deze optie omzeil je de ssl-/tls-overdrachtsfoutmelding. Gebruik is op eigen risico!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> <html><head/><body><p>Let op: een verkeerde locatie problemen veroorzaken! Bij twijfel niet aanpassen.</p></body></html> Download folder: Downloadmap: Create subfolders for Music,Videos, ... in default download folder Submappen creëren in downloadmap voor muziek, video's, etc. Save As Opslaan als Enable Notification Sounds Meldingsgeluiden inschakelen Toolbar icons size: Pictogramgrootte op werkbalk: If browser is opened, start Persepolis in system tray Persepolis opstarten in systeemvak indien browser geopend is Enable system tray icon Systeemvakpictogram tonen Show download complete dialog when download is finished Bevestigingsvenster tonen als het downloaden is afgerond Show menubar Menubalk tonen Show side panel Zijpaneel tonen Show download progress window Venster met downloadvoortgang tonen <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> <html><head/><body><p>Deze optie voorkomt dat het systeem inactief wordt. Dit is nodig als energiebeheer je systeem automatisch in de pauze- of slaapstand zet.</p></body></html> Show these columns: Te tonen kolommen: Transfer Rate Snelheid Estimated Time Left Resterende tijd (geschat) First Try Date Datum eerste poging Last Try Date Datum laatste poging Columns Customization Kolomaanpassing Remote time Externe tijd <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> <html><head/><body><p>Haal de tijd op uit het externe bestand van de externe http-/ftp-server en pas toe op het lokale bestand (indien beschikbaar).</p></body></html> Check system clipboard for copied links Controleer het klembord op gekopieerde links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> <html><head/><body><p>Het programma zal het klembord automatisch scannen op gekopieerde links. </p></body></html> Download requests from the browser will be executed immediately. Downloadverzoeken van de browser worden onmiddellijk uitgevoerd. <html><head/><body><p>When a download request is sent from the browser extension, the download will start without showing the Add Link window. </p></body></html> <html><head/><body><p>Als er een downloadverzoek wordt verstuurd vanuit de browserextensie, dan start het downloaden zonder het toevoegvenster te tonen. </p></body></html> text_ui_tr Persepolis Download Manager Persepolis-downloadbeheer Links Links Select All Alles selecteren Deselect All Selectie ongedaan maken Add to queue: Toevoegen aan wachtrij: Proxy Proxy IP: Ip-adres: Port: Poort: Change Download Folder Andere downloadmap kiezen OK Oké Cancel Annuleren Download Options Downloadopties Proxy password: Proxywachtwoord: Proxy username: Proxy-gebruikersnaam: Download username and password Gebruikersnaam en wachtwoord voor downloaden Download username: Gebruikersnaam voor downloaden: Download password: Wachtwoord voor downloaden: Download folder: Downloadmap: Limit speed Snelheid inperken Number of connections: Aantal gelijktijdige verbindingen: video_finder_progress_ui_tr <b>Video file status: </b> <b>Status van videobestand: </b> <b>Audio file status: </b> <b>Status van audiobestand: </b> <b>Muxing status: </b> <b>Muxing-status: </b> <b>Mixing status: </b> <b>Mengstatus: </b> ytaddlink_src_ui_tr Video Finder Video's zoeken Fetch Media List Medialijst ophalen Select a format Indeling kiezen Please enter a valid video link Voer een geldige videolink in Fetching Media Info... Bezig met ophalen van media-informatie… Video format: Videoformaat: Audio format: Audioformaat: Advanced options Geavanceerde opties persepolisdm-persepolis-867ee76/resources/locales/ui_pl_PL.qm000066400000000000000000000670551464161131600244760ustar00rootroot00000000000000>0?>b X >v]v9ZcZ o78wd-B/-Ba9N09Nb~<=^G(3M?$B]1xDZ,"xDZBcK C\(Wn)*DP֣:.y14 [*q,w +@ > $?] ANb W;f ^: `= g] mp+B }Q) ~- C^ F0m U U9 UZ O g( ^L L "ZW8i _ _1 if*\ if=H s> `F  Yp\ >6 (] ,!) Fq Uq* `r`YF gn+ nRn v z n {Ǝ' w2X wB aC UG 3 U  77 ? 5= (< 2SQ e.< e.E st> q Y q e N ( D Y :j [ Y  c [ C/(= \e4" q B B  B9 BE' B`m i"-~.d9T7IS7Ib_&xBxB_ZNJH1$n2 |2Ak _6G?r%<]>%]>BiT\{}p / VW9y[,[$q$q@?FxPG."{Tif*<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trO PersepolisAbout Persepolis about_ui_trDeweloperzy Developers about_ui_trLicencjaLicense about_ui_trOKOK about_ui_tr@Persepolis - menad|er pobieraniaPersepolis Download Manager about_ui_tr$Podzikowania dla:Special thanks to: about_ui_trTBumacze Translators about_ui_tr&Dodaj do kategorii:Add to category:  addlink_ui_tr$Opcje zaawansowaneAdvanced Options addlink_ui_tr AnulujCancel addlink_ui_trZmieD folderChange Download Folder addlink_ui_trFolder:Download Folder:  addlink_ui_trHeader:Header:  addlink_ui_trIP:IP:  addlink_ui_trLinkLink addlink_ui_trLoad cookies:Load cookies:  addlink_ui_trWicej opcji More Options addlink_ui_trOKOK addlink_ui_tr Port:Port: addlink_ui_tr ProxyProxy addlink_ui_trReferrer: Referrer:  addlink_ui_trUser agent: User agent:  addlink_ui_tr&<b>Nazwa pliku</b>:File name: after_download_src_ui_tr<b>Rozmiar</b>: Size: after_download_src_ui_trOK OK after_download_ui_trOtwrz plik  Open File after_download_ui_tr:<b>Pobieranie zakoDczone!</b>Download Completed!after_download_ui_tr<b>Link</b>: Link: after_download_ui_tr&<b>Zapisz jako</b>:Save as: after_download_ui_trJNie pokazuj tego komunikatu ponownie.Don't show this message again.after_download_ui_tr0Otwrz folder pobieraniaOpen Download Folderafter_download_ui_tr@Persepolis - menad|er pobieraniaPersepolis Download Managerafter_download_ui_tr&Dziennik PersepolisPersepolis Loglog_window_ui_trZgBo[ problem Report Issuelog_window_ui_tr&</b>" ju| istnieje!" already exists!mainwindow_src_ui_tr<b><center>Ten link zostaB ju| dodany! Czy na pewno chcesz go doda ponownie?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Ta operacja spowoduje <br>NIEODWRACALNE usunicie pobranych plikw z dysku twardego!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Ta czynno[ usunie wszystkie elementy listy z kolejki pobierania! </center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr$<b>PoBczenia</b>:Connections: mainwindow_src_ui_tr<b>Pobrano</b>:Downloaded: mainwindow_src_ui_tr"<b>PozostaBo</b>:Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trl<b>Nie mo|esz usun domy[lnej kolejki pobierania!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Status</b>: Status: mainwindow_src_ui_tr6<b>Szybko[ pobierania</b>:Transfer rate: mainwindow_src_ui_trP<center>Czy chcesz kontynuowa?</center>)
Do you want to continue?
mainwindow_src_ui_tr&Aria2 nie odpowiadaAria2 did not respondmainwindow_src_ui_tr(Aria2 nie odpowiada!Aria2 did not respond!mainwindow_src_ui_trAria2 nie odpowiada! Bdz cierpliwy! Persepolis sprbuje ponownie za 2 sekundy!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr"Aria2 rozBczona!Aria2 disconnected!mainwindow_src_ui_trrSprawdz poBczenie sieciowe i uruchom ponownie Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr(Pobieranie ukoDczoneDownload Completemainwindow_src_ui_tr,Zaplanowane pobieranieDownload Scheduledmainwindow_src_ui_tr"Status pobieraniaDownload Startsmainwindow_src_ui_tr*Pobieranie zatrzymaneDownload Stoppedmainwindow_src_ui_tr@Wyszukiwarka wideo pobiera plik!(Download is in progress by video finder!mainwindow_src_ui_tr BBd -Error - mainwindow_src_ui_trBBd...Error...mainwindow_src_ui_tr BBd:Error: mainwindow_src_ui_trUkryj opcje Hide optionsmainwindow_src_ui_trJZminimalizuj do zasobnika systemowegoMinimize to system traymainwindow_src_ui_trPrzenoszenie Moving ismainwindow_src_ui_trNie znaleziono Not Foundmainwindow_src_ui_trZBrak wystarczajcej ilo[ci wolnego miejsca w:Not enough free space in:mainwindow_src_ui_tr4Operacja nie powiodBa si!Operation was not successful!mainwindow_src_ui_trOperacja nie powiodBa si! Najpierw zatrzymaj nastpujc kategori:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr6DziaBanie nie powiodBo si.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trPPersepolis nie mo|e poBczy si z Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr:Persepolis zostanie zamknityPersepolis is shutting downmainwindow_src_ui_tr`Persepolis prbuje si poBczy! Bdz cierpliwy!,Persepolis is trying to connect! be patient!mainwindow_src_ui_tr`Persepolis prbuje si poBczy! Bdz cierpliwy!+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr^Persepolis ponownie nawizaB poBczenie z Aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr Prosz czeka...Please Wait...mainwindow_src_ui_tr8Wznw nastpujc kategori:&Please resume the following category: mainwindow_src_ui_trJZatrzymaj najpierw proces pobierania.$Please stop download progress first.mainwindow_src_ui_trRNajpierw zatrzymaj nastpujc kategori:*Please stop the following category first: mainwindow_src_ui_tr@Zatrzymaj nastpujc kategori:$Please stop the following category: mainwindow_src_ui_trTNajpierw zatrzymaj nastpujce pobieranie:*Please stop the following download first: mainwindow_src_ui_tr6Prosz sprbowa ponownie. Please try again.mainwindow_src_ui_tr&Kolejka zatrzymana!Queue Stopped!mainwindow_src_ui_tr&Kolejka zakoDczona!Queue completed!mainwindow_src_ui_trGotowy...Ready...mainwindow_src_ui_tr<Ponowne poBczenie z Aria2 ...Reconnecting Aria2...mainwindow_src_ui_tr6Uruchom ponownie PersepolisRestart Persepolismainwindow_src_ui_tr:Wy[lij zaznaczone pobrania doSend selected downloads tomainwindow_src_ui_trWy[lij doSend tomainwindow_src_ui_tr"Poka| gBwne oknoShow main Windowmainwindow_src_ui_trPokarz opcje Show optionsmainwindow_src_ui_trdNiektre elementy nie zostaBy pomy[lnie przesBane!+Some items didn't transferred successfully!mainwindow_src_ui_trSortuj wedBugSort bymainwindow_src_ui_trZNajpierw zatrzymaj wszystkie pobierane pliki!Stop all downloads first!mainwindow_src_ui_trBZatrzymaj w pierwszej kolejno[ci:#Stop the following download first: mainwindow_src_ui_tr Sprbuj ponownie Try againmainwindow_src_ui_tr"Sprbuj ponownie! Try again!mainwindow_src_ui_trbdz cierpliwy! be patient!mainwindow_src_ui_tr,nie znaleziono ffmpeg!ffmpeg is not installed!mainwindow_src_ui_trskoDczyBem! finished!mainwindow_src_ui_trbBd muxing muxing errormainwindow_src_ui_tr0twj system za 20 sekundyour system in 20 secondsmainwindow_src_ui_trpobrane downloadedmainwindow_ui_tr&Pobrane &Downloadmainwindow_ui_tr&Edycja&Editmainwindow_ui_tr &Plik&Filemainwindow_ui_tr &Pomoc&Helpmainwindow_ui_tr&Kolejka&Queuemainwindow_ui_tr &Widok&Viewmainwindow_ui_tr6<b>Status pliku audio: </b>Audio file status: mainwindow_ui_tr,<b>Status muxing: </b>Muxing status: mainwindow_ui_tr<b>Status: </b>Status: mainwindow_ui_tr6<b>Status pliku wideo: </b>Video file status: mainwindow_ui_trO PersepolisAboutmainwindow_ui_trAktywnyActivemainwindow_ui_tr6Dodaj nowy link do pobraniaAdd New Download Linkmainwindow_ui_trPo pobraniuAfter downloadmainwindow_ui_trZastosujApplymainwindow_ui_trKategoriaCategorymainwindow_ui_trFUsuD wszystkie wpisy z listy pobraD Clear all items in download listmainwindow_ui_tr GotoweCompletemainwindow_ui_trPoBczenia Connectionsmainwindow_ui_tr<Stwrz now kolejk pobieraniaCreate new download queuemainwindow_ui_trPobraneDownloadmainwindow_ui_trDDownload bottom of the list first"Download bottom of the list firstmainwindow_ui_trPobrane Downloadedmainwindow_ui_tr EdycjaEditmainwindow_ui_tr&Godzina zakoDczeniaEnd Timemainwindow_ui_trBBdErrormainwindow_ui_trWyj[cieExitmainwindow_ui_trPlikFilemainwindow_ui_trNazwa pliku File Namemainwindow_ui_tr PomocHelpmainwindow_ui_tr,Ograniczenie prdko[ci Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_trRPrzenie[ zaznaczenie o jeden wiersz w dB-Move currently selected items down by one rowmainwindow_ui_trVPrzenie[ zaznaczenie o jeden wiersz do gry+Move currently selected items up by one rowmainwindow_ui_trNie aktywny Not Activemainwindow_ui_tr&Zapauzuj pobieraniePause Downloadmainwindow_ui_trProcent Percentagemainwindow_ui_tr@Persepolis - menad|er pobieraniaPersepolis Download Managermainwindow_ui_trPreferencje Preferencesmainwindow_ui_tr PostpProgressmainwindow_ui_trWBa[ciwo[ci Propertiesmainwindow_ui_trKolejkaQueuemainwindow_ui_trUsuD kolejkRemove this queuemainwindow_ui_trZgBo[ problemReport an issuemainwindow_ui_tr Wznw pobieranieResume Downloadmainwindow_ui_trBPokarz/Ukryj ikon na pasku zadaDShow/Hide system tray iconmainwindow_ui_tr WyBcz Shut Downmainwindow_ui_trRozmiarSizemainwindow_ui_trSortuj wedBugSort bymainwindow_ui_tr&Godzina rozpoczcia Start Timemainwindow_ui_trUruchom kolejkStart this queuemainwindow_ui_trRozpocztyStartedmainwindow_ui_tr StatusStatusmainwindow_ui_tr(Zatrzymaj pobieranie Stop Downloadmainwindow_ui_tr"Zatrzymaj kolejkStop this queuemainwindow_ui_tr6Zatrzymaj/Anuluj pobieranieStop/Cancel Downloadmainwindow_ui_tr$Wyszukiwarka wideo V&ideo Findermainwindow_ui_tr$Wyszukiwarka wideo Video Findermainwindow_ui_tr WidokViewmainwindow_ui_tr(Aria2 nie odpowiada!Aria2 did not respond!progress_src_ui_tr"Aria2 rozBczona!Aria2 disconnected!progress_src_ui_tr`Persepolis prbuje si poBczy! Bdz cierpliwy!,Persepolis is trying to connect! be patient!progress_src_ui_tr6Prosz sprbowa ponownie. Please try again.progress_src_ui_tr"Sprbuj ponownie! Try again!progress_src_ui_trPo pobraniuAfter downloadprogress_ui_trZastosujApplyprogress_ui_tr*Informacje o pobraniuDownload Informationprogress_ui_tr Opcje pobieraniaDownload Optionsprogress_ui_trPobrane: Downloaded:progress_ui_trPozostaBo:Estimated time left:progress_ui_tr Liczba poBczeD:Number of connections: progress_ui_tr PauzaPauseprogress_ui_tr@Persepolis - menad|er pobieraniaPersepolis Download Managerprogress_ui_tr WznwResumeprogress_ui_tr WyBcz Shut Downprogress_ui_trStatus:Status: progress_ui_trStopStopprogress_ui_tr(Szybko[ pobierania:Transfer rate: progress_ui_tr <b><center>Uruchom ponownie Persepolis!</center></b><br><center>Niektre zmiany zostan wprowadzone po ponownym uruchomieniu Persepolis</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Ta kombinacja zostaBa jest ju| zajta. U|yj innej </center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr6Uruchom ponownie PersepolisRestart Persepolis!setting_src_ui_tr@<html><head/><body><p>Podaj numer portu dla serwera JSON-RPC / XML-RPC do nasBuchiwania. Mo|liwe warto[ci: 1024 - 65535 Warto[ domy[lna: 6801</p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trh<html><head/><body><p>Format HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Ustaw liczb prb, je[li pobieranie nie powiodBo si.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr~<html><head/><body><p>Ustaw liczb sekund oczekiwania pomidzy prbami pobrania pliku. Mened|er pobierania ponowi prb pobrania pliku, gdy serwer HTTP zwrci odpowiedz 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Ustaw timeout w sekundach. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Ta funkcja mo|e nie dziaBa w twoim systemie operacyjnym.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_trtKorzystanie z wielu poBczeD mo|e przyspieszy pobieranie.c

Using multiple connections can help speed up your download.

 setting_ui_trDziaBanieAction setting_ui_tr AnulujCancel setting_ui_trKategoriaCategory setting_ui_tr ZmieDChange setting_ui_tr8ZmieD domy[ln [cie|k Aria2Change Aria2 default path setting_ui_tr Schemat kolorw:Color scheme:  setting_ui_trPoBczenia Connections setting_ui_trDomy[lneDefaults setting_ui_tr Opcje pobieraniaDownload Options setting_ui_trPobrane Downloaded setting_ui_trNazwa pliku File Name setting_ui_trCzcionka:Font:  setting_ui_trfSchowaj okno gBwne po klikniciu przycisku zamknij)Hide main window if close button clicked. setting_ui_tr Ikony:Icons:  setting_ui_tr(Nie usypiaj systemu!Keep system awake! setting_ui_trMaksymalna liczba linkw do przechwycenia:<br/><small>(Je[li przegldarka wysyBa jednocze[nie wiele linkw wideo)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr$Typ powiadomienia:Notification type:  setting_ui_trPowiadomienia Notifications setting_ui_tr Liczba poBczeD:Number of connections:  setting_ui_tr*Liczba prb pobrania:Number of tries:  setting_ui_trOKOK setting_ui_trProcent Percentage setting_ui_trPreferencje Preferences setting_ui_tr*Wci[nij nowe klawiszePress new keys setting_ui_trZakoDczQuit setting_ui_trPort RPC:RPC port number:  setting_ui_trNUruchom Persepolis przy starcie systemuRun Persepolis at startup setting_ui_tr SkrtShortcut setting_ui_tr Skrty Shortcuts setting_ui_trRozmiarSize setting_ui_trRozmiar:Size:  setting_ui_tr StatusStatus setting_ui_tr Styl:Style:  setting_ui_tr&Timeout (sekundy): Timeout (seconds):  setting_ui_tr0Opcje wyszukiwarki wideoVideo Finder Options setting_ui_trGBo[no[:Volume:  setting_ui_tr"Dodaj do kolejki:Add to queue:  text_ui_tr AnulujCancel text_ui_trZmieD folderChange Download Folder text_ui_tr Odznacz wszystko Deselect All text_ui_trIP:IP: text_ui_tr LinkiLinks text_ui_trOKOK text_ui_tr@Persepolis - menad|er pobieraniaPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProxyProxy text_ui_tr Zaznacz wszystko Select All text_ui_tr6<b>Status pliku audio: </b>Audio file status: video_finder_progress_ui_tr,<b>Status muxing: </b>Muxing status: video_finder_progress_ui_tr6<b>Status pliku wideo: </b>Video file status: video_finder_progress_ui_tr$Zaawansowane opcjeAdvanced optionsytaddlink_src_ui_trFormat audio: Audio format:ytaddlink_src_ui_tr2Pobierz list multimediwFetch Media Listytaddlink_src_ui_trPPobieranie informacji o multimediach ...Fetching Media Info...ytaddlink_src_ui_trHWklej prawidBowy link do pliku wideoPlease enter a valid video linkytaddlink_src_ui_trWybierz formatSelect a formatytaddlink_src_ui_tr$Wyszukiwarka wideo Video Finderytaddlink_src_ui_trFormat wideo: Video format:ytaddlink_src_ui_tr , persepolisdm-persepolis-867ee76/resources/locales/ui_pl_PL.ts000066400000000000000000002371571464161131600245110ustar00rootroot00000000000000 about_ui_tr About Persepolis O Persepolis Persepolis Download Manager Persepolis - menadżer pobierania <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Deweloperzy Translators Tłumacze License Licencja OK OK Special thanks to: Podziękowania dla: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Dodaj do kategorii: Proxy Proxy IP: IP: Port: Port: Change Download Folder Zmień folder Download Folder: Folder: Cancel Anuluj OK OK Link Link More Options Więcej opcji Advanced Options Opcje zaawansowane Referrer: Referrer: Header: Header: Load cookies: Load cookies: User agent: User agent: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Nazwa pliku</b>: <b>Size</b>: <b>Rozmiar</b>: after_download_ui_tr Persepolis Download Manager Persepolis - menadżer pobierania Open File Otwórz plik Open Download Folder Otwórz folder pobierania OK OK Don't show this message again. Nie pokazuj tego komunikatu ponownie. <b>Download Completed!</b> <b>Pobieranie zakończone!</b> <b>Save as</b>: <b>Zapisz jako</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Dziennik Persepolis Report Issue Zgłoś problem Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Kolejka zatrzymana! Persepolis is shutting down Persepolis zostanie zamknięty your system in 20 seconds twój system za 20 sekund Queue completed! Kolejka zakończona! Show main Window Pokaż główne okno Please Wait... Proszę czekać... Ready... Gotowy... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 nie odpowiada! Bądź cierpliwy! Persepolis spróbuje ponownie za 2 sekundy! Error... Błąd... Persepolis can not connect to Aria2 Persepolis nie może połączyć się z Aria2 Check your network & Restart Persepolis Sprawdź połączenie sieciowe i uruchom ponownie Persepolis Restart Persepolis Uruchom ponownie Persepolis Reconnecting Aria2... Ponowne połączenie z Aria2 ... Persepolis reconnected aria2 successfully Persepolis ponownie nawiązał połączenie z Aria2 Error: Błąd: <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Pobrano</b>: <b>Transfer rate</b>: <b>Szybkość pobierania</b>: <b>Estimated time left</b>: <b>Pozostało</b>: <b>Connections</b>: <b>Połączenia</b>: <b>Status</b>: <b>Status</b>: Download Stopped Pobieranie zatrzymane Error - Błąd - Download Complete Pobieranie ukończone <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Ten link został już dodany! Czy na pewno chcesz go dodać ponownie?</center></b> Download Starts Status pobierania Download Scheduled Zaplanowane pobieranie Operation was not successful. Działanie nie powiodło się. Please resume the following category: Wznów następującą kategorię: Aria2 disconnected! Aria2 rozłączona! Persepolis is trying to connect!be patient! Persepolis próbuje się połączyć! Bądź cierpliwy! Aria2 did not respond! Aria2 nie odpowiada! Try again! Spróbuj ponownie! Aria2 did not respond Aria2 nie odpowiada Try again Spróbuj ponownie Please stop the following category: Zatrzymaj następującą kategorię: Persepolis is trying to connect! be patient! Persepolis próbuje się połączyć! Bądź cierpliwy! Please try again. Proszę spróbować ponownie. Minimize to system tray Zminimalizuj do zasobnika systemowego Not Found Nie znaleziono Operation was not successful! Operacja nie powiodła się! Operation was not successful! Please stop the following category first: Operacja nie powiodła się! Najpierw zatrzymaj następującą kategorię: Please stop the following download first: Najpierw zatrzymaj następujące pobieranie: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Ta operacja spowoduje <br>NIEODWRACALNE usunięcie pobranych plików z dysku twardego!</center></b> <center>Do you want to continue?</center> <center>Czy chcesz kontynuować?</center> Please stop the following category first: Najpierw zatrzymaj następującą kategorię: </b>" already exists! </b>" już istnieje! Send selected downloads to Wyślij zaznaczone pobrania do Send to Wyślij do Sort by Sortuj według <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Ta czynność usunie wszystkie elementy listy z kolejki pobierania! </center></b> <b>Sorry! You can't remove default queue!</b> <b>Nie możesz usunąć domyślnej kolejki pobierania!</b> Some items didn't transferred successfully! Niektóre elementy nie zostały pomyślnie przesłane! Please stop download progress first. Zatrzymaj najpierw proces pobierania. Hide options Ukryj opcje Show options Pokarz opcje Stop all downloads first! Najpierw zatrzymaj wszystkie pobierane pliki! Moving is Przenoszenie finished! skończyłem! Download is in progress by video finder! Wyszukiwarka wideo pobiera plik! be patient! bądź cierpliwy! Stop the following download first: Zatrzymaj w pierwszej kolejności: ffmpeg is not installed! nie znaleziono ffmpeg! Not enough free space in: Brak wystarczającej ilości wolnego miejsca w: muxing error błąd muxing an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Plik Edit Edycja View Widok Download Pobrane Queue Kolejka Video Finder Wyszukiwarka wideo Help Pomoc Sort by Sortuj według Persepolis Download Manager Persepolis - menadżer pobierania Category Kategoria File Name Nazwa pliku Status Status Size Rozmiar Downloaded Pobrane Percentage Procent Connections Połączenia Link Link &File &Plik &Edit &Edycja &View &Widok &Download &Pobrane &Queue &Kolejka &Help &Pomoc Show/Hide system tray icon Pokarz/Ukryj ikonę na pasku zadań Add New Download Link Dodaj nowy link do pobrania Resume Download Wznów pobieranie Pause Download Zapauzuj pobieranie Stop Download Zatrzymaj pobieranie Stop/Cancel Download Zatrzymaj/Anuluj pobieranie Properties Właściwości Progress Postęp Exit Wyjście Clear all items in download list Usuń wszystkie wpisy z listy pobrań Create new download queue Stwórz nową kolejkę pobierania Remove this queue Usuń kolejkę Start this queue Uruchom kolejkę Stop this queue Zatrzymaj kolejkę Move currently selected items up by one row Przenieś zaznaczenie o jeden wiersz do góry Move currently selected items down by one row Przenieś zaznaczenie o jeden wiersz w dół Preferences Preferencje About O Persepolis Report an issue Zgłoś problem Start Time Godzina rozpoczęcia End Time Godzina zakończenia Download bottom of the list first Download bottom of the list first Limit Speed Ograniczenie prędkości Apply Zastosuj After download Po pobraniu Shut Down Wyłącz V&ideo Finder Wyszukiwarka wideo <b>Video file status: </b> <b>Status pliku wideo: </b> <b>Audio file status: </b> <b>Status pliku audio: </b> <b>Status: </b> <b>Status: </b> <b>Muxing status: </b> <b>Status muxing: </b> downloaded pobrane Active Aktywny Not Active Nie aktywny Started Rozpoczęty Error Błąd Complete Gotowe Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 rozłączona! Persepolis is trying to connect! be patient! Persepolis próbuje się połączyć! Bądź cierpliwy! Aria2 did not respond! Aria2 nie odpowiada! Please try again. Proszę spróbować ponownie. Try again! Spróbuj ponownie! progress_ui_tr Persepolis Download Manager Persepolis - menadżer pobierania Status: Status: Downloaded: Pobrane: Transfer rate: Szybkość pobierania: Estimated time left: Pozostało: Number of connections: Liczba połączeń: Download Information Informacje o pobraniu After download Po pobraniu Apply Zastosuj Shut Down Wyłącz Download Options Opcje pobierania Resume Wznów Pause Pauza Stop Stop Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Uruchom ponownie Persepolis!</center></b><br><center>Niektóre zmiany zostaną wprowadzone po ponownym uruchomieniu Persepolis</center> Restart Persepolis! Uruchom ponownie Persepolis <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Ta kombinacja została jest już zajęta. Użyj innej </center></b> setting_ui_tr Preferences Preferencje <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Ustaw liczbę prób, jeśli pobieranie nie powiodło się.</p></body></html> Number of tries: Liczba prób pobrania: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Ustaw liczbę sekund oczekiwania pomiędzy próbami pobrania pliku. Menedżer pobierania ponowi próbę pobrania pliku, gdy serwer HTTP zwróci odpowiedź 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Ustaw timeout w sekundach. </p></body></html> Timeout (seconds): Timeout (sekundy): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> Korzystanie z wielu połączeń może przyspieszyć pobieranie. Number of connections: Liczba połączeń: RPC port number: Port RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p>Podaj numer portu dla serwera JSON-RPC / XML-RPC do nasłuchiwania. Możliwe wartości: 1024 - 65535 Wartość domyślna: 6801</p></body></html> Change Aria2 default path Zmień domyślną ścieżkę Aria2 Change Zmień Download Options Opcje pobierania Volume: Głośność: Notifications Powiadomienia Style: Styl: Color scheme: Schemat kolorów: Icons: Ikony: Notification type: Typ powiadomienia: Font: Czcionka: Size: Rozmiar: Run Persepolis at startup Uruchom Persepolis przy starcie systemu Keep system awake! Nie usypiaj systemu! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Format HH:MM</p></body></html> File Name Nazwa pliku Status Status Size Rozmiar Downloaded Pobrane Percentage Procent Connections Połączenia Category Kategoria Video Finder Options Opcje wyszukiwarki wideo Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Maksymalna liczba linków do przechwycenia:<br/><small>(Jeśli przeglądarka wysyła jednocześnie wiele linków wideo)</small> Defaults Domyślne Cancel Anuluj OK OK Press new keys Wciśnij nowe klawisze Action Działanie Shortcut Skrót Shortcuts Skróty Quit Zakończ Hide main window if close button clicked. Schowaj okno główne po kliknięciu przycisku zamknij <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Ta funkcja może nie działać w twoim systemie operacyjnym.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis - menadżer pobierania Links Linki Select All Zaznacz wszystko Deselect All Odznacz wszystko Add to queue: Dodaj do kolejki: Proxy Proxy IP: IP: Port: Port: Change Download Folder Zmień folder OK OK Cancel Anuluj Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Status pliku wideo: </b> <b>Audio file status: </b> <b>Status pliku audio: </b> <b>Muxing status: </b> <b>Status muxing: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Wyszukiwarka wideo Fetch Media List Pobierz listę multimediów Select a format Wybierz format Please enter a valid video link Wklej prawidłowy link do pliku wideo Fetching Media Info... Pobieranie informacji o multimediach ... Video format: Format wideo: Audio format: Format audio: Advanced options Zaawansowane opcje persepolisdm-persepolis-867ee76/resources/locales/ui_pt.qm000066400000000000000000000640371464161131600241100ustar00rootroot00000000000000([&udn]0T1X!R0U؞(Tg- ~KFW / O xO| +@ > $<6 AN W8s ^7 `: gW }Q ~, @ F0K U U6 UU O? g) ^I HP "ZW5 _ _. if+\ if:s s>4 `Cs YpVf (W ] ,!* Fq Uq+ `r`S f(< gn,& nM vH z ! {Ǝ( w/H w@ [Z P 1% PG  ^ 75 < 5; (9% 2S] e.9 e.C7 st; q @ q e N ) A T # 7s U TY V C/)# \e1e q BK B B6 BB| BZ.d6W7I_'xB\xBYKN?J u6U\I1%T2 2> Y6?r&T]>&]>?C{?}p  [VQ[&[$qk$q=?C$\L."{Oi`<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr$Sobre o PersepolisAbout Persepolis about_ui_trDesenvolvedores Developers about_ui_tr Desenvolvedores: Developers: about_ui_trLicenaLicense about_ui_trOKOK about_ui_trFGerenciador de Downloads PersepolisPersepolis Download Manager about_ui_tr6Agradecimentos especiais a:Special thanks to: about_ui_trTradutores Translators about_ui_tr,Adicionar a categoria:Add to category:  addlink_ui_tr Opes avanadasAdvanced Options addlink_ui_trCancelarCancel addlink_ui_tr6Alterar pasta de downloads:Change Download Folder addlink_ui_tr$Pasta de downloadsDownload Folder:  addlink_ui_trCabealho:Header:  addlink_ui_trIP:IP:  addlink_ui_trLinkLink addlink_ui_tr"Carregar cookies:Load cookies:  addlink_ui_trMais opes More Options addlink_ui_trOKOK addlink_ui_tr Porta:Port: addlink_ui_tr ProxyProxy addlink_ui_trReferenciador: Referrer:  addlink_ui_tr$Agente de usurio: User agent:  addlink_ui_tr.<b>Nome do arquivo</b>:File name: after_download_src_ui_tr<b>Tamanho</b>: Size: after_download_src_ui_tr OK  OK after_download_ui_trAbrir arquivo Open File after_download_ui_tr2<b>Download completo!</b>Download Completed!after_download_ui_tr<b>Link</b>:  Link: after_download_ui_tr(<b>Salvar como</b>: Save as: after_download_ui_trFNo mostre esta mensagem novamente.Don't show this message again.after_download_ui_trAbrir pastaOpen Download Folderafter_download_ui_trFGerenciador de Downloads PersepolisPersepolis Download Managerafter_download_ui_trPersepolis LogPersepolis Loglog_window_ui_tr&Relatar um problema Report Issuelog_window_ui_tr</b>"J existe!" already exists!mainwindow_src_ui_tr<b><center>Este link foi adicionado antes! Tem certeza de que deseja adicion-lo novamente?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Esta operao deletar os arquivos baixados no seu disco rgido<br>PERMANENTEMENTE!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr <b><center>Esta operao ir remover todos os itens nesta fila<br>de "Todas as listas de Downloads"!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr"<b>Conexes</b>: Connections: mainwindow_src_ui_tr <b>Baixado</b>: Downloaded: mainwindow_src_ui_tr@<b>Tempo restante estimado</b>: Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trj<b>Desculpe! Voc no pode remover a fila padro!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr$<b>Progresso</b>: Status: mainwindow_src_ui_tr<<b>Taxa de transferncia</b>: Transfer rate: mainwindow_src_ui_trD<center>Deseja continuar?</center>)
Do you want to continue?
mainwindow_src_ui_tr(Aria2 no respondeu!Aria2 did not respondmainwindow_src_ui_tr(Aria2 no respondeu!Aria2 did not respond!mainwindow_src_ui_trAria2 no responde! seja paciente! Persepolis tentar novamente em 2 segundos!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr&Aria2 desconectado!Aria2 disconnected!mainwindow_src_ui_trTVerifique sua rede & Reinicie o Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr"Download completoDownload Completemainwindow_src_ui_tr"Download agendadoDownload Scheduledmainwindow_src_ui_tr Iniciar downloadDownload Startsmainwindow_src_ui_trDownload paradoDownload Stoppedmainwindow_src_ui_trErro - Error - mainwindow_src_ui_trErro...Error...mainwindow_src_ui_tr Erro:Error: mainwindow_src_ui_trOcultar opes Hide optionsmainwindow_src_ui_trDMinimizar para rea de notificaoMinimize to system traymainwindow_src_ui_trNo encontrado Not Foundmainwindow_src_ui_tr@A operao no foi bem sucedida.Operation was not successful!mainwindow_src_ui_trA operao no foi bem sucedida! Por favor pare a seguinte categoria primeiro:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr@A operao no foi bem sucedida.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trXPersepolis no consegue conectar-se ao Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr(Persepolis desligarPersepolis is shutting downmainwindow_src_ui_trhPerspolis est tentando se conectar! seja paciente!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trhPersepolis est tentando se conectar! seja paciente!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trRPersepolis reconectado ao aria2 com xito)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr&Por favor espere...Please Wait...mainwindow_src_ui_tr`Por favor altere a pasta temporria de downloads+Please change the temporary download foldermainwindow_src_ui_trNPor favor, retome a seguinte categoria:&Please resume the following category: mainwindow_src_ui_trbPor favor, primeiro pare o progresso do download.$Please stop download progress first.mainwindow_src_ui_trZPor favor pare a seguinte categoria primeiro:*Please stop the following category first: mainwindow_src_ui_trJPor favor, pare a seguinte categoria:$Please stop the following category: mainwindow_src_ui_trXPor favor pare o seguinte download primeiro:*Please stop the following download first: mainwindow_src_ui_tr4Por favor tente novamente.Please try again.mainwindow_src_ui_trFila parada!Queue Stopped!mainwindow_src_ui_trFila completa!Queue completed!mainwindow_src_ui_trPronto...Ready...mainwindow_src_ui_tr*Reconectando Aria2...Reconnecting Aria2...mainwindow_src_ui_tr,Reiniciar o PersepolisRestart Persepolismainwindow_src_ui_trBEnvie o download selecionado paraSend selected downloads tomainwindow_src_ui_trEnviar paraSend tomainwindow_src_ui_tr0Mostrar janela principalShow main Windowmainwindow_src_ui_trMostrar opes Show optionsmainwindow_src_ui_tr`Alguns itens no foram transferidos com sucesso!+Some items didn't transferred successfully!mainwindow_src_ui_trOrdenar porSort bymainwindow_src_ui_trBPare primeiro todos os downloads!Stop all downloads first!mainwindow_src_ui_trTente novamente Try againmainwindow_src_ui_tr Tente novamente! Try again!mainwindow_src_ui_tr4seu sistema em 20 segundosyour system in 20 secondsmainwindow_src_ui_tr&Download &Downloadmainwindow_ui_tr&Editar&Editmainwindow_ui_tr&Arquivo&Filemainwindow_ui_tr &Ajuda&Helpmainwindow_ui_tr &Fila&Queuemainwindow_ui_tr&Visualizar&Viewmainwindow_ui_tr SobreAboutmainwindow_ui_tr>Adicionar novo link de downloadAdd New Download Linkmainwindow_ui_tr"Depois o downloadAfter downloadmainwindow_ui_trExecutarApplymainwindow_ui_trCategoriaCategorymainwindow_ui_tr:Verifique se h novas versesCheck for newer releasemainwindow_ui_trTLimpar todos os itens na lista de download Clear all items in download listmainwindow_ui_trConexes Connectionsmainwindow_ui_tr6Criar nova fila de downloadCreate new download queuemainwindow_ui_trDownloadDownloadmainwindow_ui_trPBaixe o ltimo arquivo da lista primeiro"Download bottom of the list firstmainwindow_ui_trBaixado Downloadedmainwindow_ui_tr EditarEditmainwindow_ui_tr Tempo de terminoEnd Timemainwindow_ui_trSairExitmainwindow_ui_trArquivoFilemainwindow_ui_trNome de arquivo File Namemainwindow_ui_tr AjudaHelpmainwindow_ui_tr.Limitador de velocidade Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_trMenuMenumainwindow_ui_trRMover itens selecionados uma linha abaixo-Move currently selected items down by one rowmainwindow_ui_trPMover itens selecionados uma linha acima+Move currently selected items up by one rowmainwindow_ui_trPausar DownloadPause Downloadmainwindow_ui_trPorcentagem Percentagemainwindow_ui_trFGerenciador de Downloads PersepolisPersepolis Download Managermainwindow_ui_trPreferncias Preferencesmainwindow_ui_trProgressoProgressmainwindow_ui_trPropriedades Propertiesmainwindow_ui_trFilaQueuemainwindow_ui_tr"Remover esta filaRemove this queuemainwindow_ui_tr&Relatar um problemaReport an issuemainwindow_ui_tr Resumir DownloadResume Downloadmainwindow_ui_trFMostrar/Ocultar rea de notificaoShow/Hide system tray iconmainwindow_ui_trDesligar Shut Downmainwindow_ui_trTamanhoSizemainwindow_ui_trOrdenar porSort bymainwindow_ui_trTempo de inicio Start Timemainwindow_ui_tr"Iniciar esta filaStart this queuemainwindow_ui_trProgressoStatusmainwindow_ui_trParar Download Stop Downloadmainwindow_ui_trParar esta filaStop this queuemainwindow_ui_tr.Parar/Cancelar DownloadStop/Cancel Downloadmainwindow_ui_tr(Barra de ferramentasToolbarmainwindow_ui_trV&ideo Finder V&ideo Findermainwindow_ui_trVideo Finder Video Findermainwindow_ui_trVisualizarViewmainwindow_ui_tr(Aria2 no respondeu!Aria2 did not respond!progress_src_ui_tr&Aria2 desconectado!Aria2 disconnected!progress_src_ui_trhPerspolis est tentando se conectar! seja paciente!,Persepolis is trying to connect! be patient!progress_src_ui_tr4Por favor tente novamente.Please try again.progress_src_ui_tr Tente novamente! Try again!progress_src_ui_trAps o downloadAfter downloadprogress_ui_trExecutarApplyprogress_ui_tr.Informaes de DownloadDownload Informationprogress_ui_tr$Opes de DownloadDownload Optionsprogress_ui_trBaixado: Downloaded:progress_ui_tr0Tempo restante estimado:Estimated time left:progress_ui_tr&Nmero de conexes:Number of connections: progress_ui_tr PausarPauseprogress_ui_trFGerenciador de Downloads PersepolisPersepolis Download Managerprogress_ui_trResumirResumeprogress_ui_trDesligar Shut Downprogress_ui_trProgresso:Status: progress_ui_tr PararStopprogress_ui_tr,Taxa de transferncia:Transfer rate: progress_ui_tr<b><center>Reinicie o Persepolis por favor!</center></b><br><center>Algumas alteraes s tm efeito aps reiniciar o software</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr.Reiniciar o Persepolis!Restart Persepolis!setting_src_ui_trB<html><head/><body><p> Especifique um nmero de porta para conexo com o servidor JSON-RPC/XML-RPC. Valores possveis: 1024-65535 padro: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trj<html><head/><body><p>Formato HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Definir o nmero de tentativas se o download falhar.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>Defina os segundos para aguardar entre novas tentativas. O gerenciador de downloads tentar novamente os downloads quando o servidor HTTP retornar uma resposta 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Definir intervalo em segundos. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Usar vrias conexes pode ajudar a acelerar o download.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trCancelarCancel setting_ui_trCategoriaCategory setting_ui_trAlterarChange setting_ui_tr>Alterar caminho padro do Aria2Change Aria2 default path setting_ui_tr"Esquema de cores:Color scheme:  setting_ui_trConexes Connections setting_ui_trPadresDefaults setting_ui_tr$Opes de DownloadDownload Options setting_ui_trBaixado Downloaded setting_ui_trNome de arquivo File Name setting_ui_tr Fonte:Font:  setting_ui_trcones:Icons:  setting_ui_trVImpedir sistema de entrar em modo suspenso!Keep system awake! setting_ui_trNmero mximo de links a serem capturados:<br/><small>(se o browser envia vrios links de vdeo de cada vez)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr(Tipo da notificao:Notification type:  setting_ui_trNotificaes Notifications setting_ui_tr$Nmero de conexesNumber of connections:  setting_ui_tr,Nmeros de tentativas:Number of tries:  setting_ui_trOKOK setting_ui_trPorcentagem Percentage setting_ui_trPreferncias Preferences setting_ui_tr(Nmero da porta RPC:RPC port number:  setting_ui_trHExecutar Persepolis na inicializaoRun Persepolis at startup setting_ui_trTamanhoSize setting_ui_trTamanho:Size:  setting_ui_tr StatusStatus setting_ui_trEstilo:Style:  setting_ui_tr,Intervalo (segundos): Timeout (seconds):  setting_ui_tr,Opes do Video FinderVideo Finder Options setting_ui_trVolume: Volume:  setting_ui_tr,Adicionar para a fila:Add to queue:  text_ui_trCancelarCancel text_ui_tr4Alterar pasta de downloadsChange Download Folder text_ui_tr&Desselecionar Todos Deselect All text_ui_trIP:IP: text_ui_tr LinksLinks text_ui_trOKOK text_ui_trDGerenciador de Download PersepolisPersepolis Download Manager text_ui_tr PortaPort: text_ui_tr ProxyProxy text_ui_tr Selecionar Todos Select All text_ui_trZUma nova verso do Persepolis est disponvel'A newer Persepolis release is availableupdate_src_ui_tr@Verifique se h nova atualizaoCheck for new updateupdate_src_ui_trBVerificando a verso mais recenteChecking for newer versionupdate_src_ui_trVerificando... Checking...update_src_ui_trNA verso mais recente est instalada :)Latest version is installed :)update_src_ui_tr@Voc est usando uma verso betaYou are using beta versionupdate_src_ui_tr,Buscar lista de mdiasFetch Media Listytaddlink_src_ui_trJBuscando informaes sobre a mdia...Fetching Media Info...ytaddlink_src_ui_trRPor favor, insira um link de vdeo vlidoPlease enter a valid video linkytaddlink_src_ui_tr(Selecione um formatoSelect a formatytaddlink_src_ui_trVideo Finder Video Finderytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_pt.ts000066400000000000000000002370711464161131600241210ustar00rootroot00000000000000 about_ui_tr About Persepolis Sobre o Persepolis Persepolis Download Manager Gerenciador de Downloads Persepolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers: Desenvolvedores: Developers Desenvolvedores Translators Tradutores License Licença OK OK Special thanks to: Agradecimentos especiais a: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi MohammadAmin Vahedinia Jafar Akhondali H.Rostami Ehsan Titish TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Version 4.0.0 addlink_ui_tr Add to category: Adicionar a categoria: Proxy Proxy IP: IP: Port: Porta: Change Download Folder Alterar pasta de downloads: Download Folder: Pasta de downloads Cancel Cancelar OK OK Link Link More Options Mais opções Advanced Options Opções avançadas Referrer: Referenciador: Header: Cabeçalho: Load cookies: Carregar cookies: User agent: Agente de usuário: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later after_download_src_ui_tr <b>File name</b>: <b>Nome do arquivo</b>: <b>Size</b>: <b>Tamanho</b>: after_download_ui_tr Persepolis Download Manager Gerenciador de Downloads Persepolis Open File Abrir arquivo Open Download Folder Abrir pasta OK OK Don't show this message again. Não mostre esta mensagem novamente. <b>Download Completed!</b> <b>Download completo!</b> <b>Save as</b>: <b>Salvar como</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Persepolis Log Report Issue Relatar um problema Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Fila parada! Persepolis is shutting down Persepolis desligará your system in 20 seconds seu sistema em 20 segundos Queue completed! Fila completa! Show main Window Mostrar janela principal Please Wait... Por favor espere... Ready... Pronto... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 não responde! seja paciente! Persepolis tentará novamente em 2 segundos! Error... Erro... Persepolis can not connect to Aria2 Persepolis não consegue conectar-se ao Aria2 Check your network & Restart Persepolis Verifique sua rede & Reinicie o Persepolis Restart Persepolis Reiniciar o Persepolis Reconnecting Aria2... Reconectando Aria2... Persepolis reconnected aria2 successfully Persepolis reconectado ao aria2 com êxito Error: Erro: Please change the temporary download folder Por favor altere a pasta temporária de downloads <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Baixado</b>: <b>Transfer rate</b>: <b>Taxa de transferência</b>: <b>Estimated time left</b>: <b>Tempo restante estimado</b>: <b>Connections</b>: <b>Conexões</b>: <b>Status</b>: <b>Progresso</b>: Download Stopped Download parado Error - Erro - Download Complete Download completo <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Este link foi adicionado antes! Tem certeza de que deseja adicioná-lo novamente?</center></b> Download Starts Iniciar download Download Scheduled Download agendado Operation was not successful. A operação não foi bem sucedida. Please resume the following category: Por favor, retome a seguinte categoria: Aria2 disconnected! Aria2 desconectado! Persepolis is trying to connect!be patient! Persepolis está tentando se conectar! seja paciente! Aria2 did not respond! Aria2 não respondeu! Try again! Tente novamente! Aria2 did not respond Aria2 não respondeu! Try again Tente novamente Please stop the following category: Por favor, pare a seguinte categoria: Persepolis is trying to connect! be patient! Persépolis está tentando se conectar! seja paciente! Please try again. Por favor tente novamente. Minimize to system tray Minimizar para área de notificação Not Found Não encontrado Operation was not successful! A operação não foi bem sucedida. Operation was not successful! Please stop the following category first: A operação não foi bem sucedida! Por favor pare a seguinte categoria primeiro: Please stop the following download first: Por favor pare o seguinte download primeiro: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Esta operação deletará os arquivos baixados no seu disco rígido<br>PERMANENTEMENTE!</center></b> <center>Do you want to continue?</center> <center>Deseja continuar?</center> Please stop the following category first: Por favor pare a seguinte categoria primeiro: </b>" already exists! </b>"Já existe! Send selected downloads to Envie o download selecionado para Send to Enviar para Sort by Ordenar por <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Esta operação irá remover todos os itens nesta fila<br>de "Todas as listas de Downloads"!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Desculpe! Você não pode remover a fila padrão!</b> Some items didn't transferred successfully! Alguns itens não foram transferidos com sucesso! Please stop download progress first. Por favor, primeiro pare o progresso do download. Hide options Ocultar opções Show options Mostrar opções Stop all downloads first! Pare primeiro todos os downloads! Moving is finished! Download is in progress by video finder! be patient! Stop the following download first: youtube-dl is not installed! ffmpeg is not installed! Not enough free space in: muxing error an error occurred mainwindow_ui_tr File Arquivo Edit Editar View Visualizar Download Download Queue Fila Video Finder Video Finder Help Ajuda Sort by Ordenar por Persepolis Download Manager Gerenciador de Downloads Persepolis Category Categoria File Name Nome de arquivo Status Progresso Size Tamanho Downloaded Baixado Percentage Porcentagem Connections Conexões Link Link &File &Arquivo &Edit &Editar &View &Visualizar &Download &Download &Queue &Fila &Help &Ajuda Menu Menu Toolbar Barra de ferramentas Show/Hide system tray icon Mostrar/Ocultar área de notificação Add New Download Link Adicionar novo link de download Resume Download Resumir Download Pause Download Pausar Download Stop Download Parar Download Stop/Cancel Download Parar/Cancelar Download Properties Propriedades Progress Progresso Exit Sair Clear all items in download list Limpar todos os itens na lista de download Create new download queue Criar nova fila de download Remove this queue Remover esta fila Start this queue Iniciar esta fila Stop this queue Parar esta fila Move currently selected items up by one row Mover itens selecionados uma linha acima Move currently selected items down by one row Mover itens selecionados uma linha abaixo Preferences Preferências About Sobre Report an issue Relatar um problema Check for newer release Verifique se há novas versões Start Time Tempo de inicio End Time Tempo de termino Download bottom of the list first Baixe o último arquivo da lista primeiro Limit Speed Limitador de velocidade Apply Executar After download Depois o download Shut Down Desligar V&ideo Finder V&ideo Finder <b>Video file status: </b> <b>Audio file status: </b> <b>Status: </b> <b>Muxing status: </b> downloaded Active Not Active Started Error Complete Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Check for Newer Version Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 desconectado! Persepolis is trying to connect! be patient! Persépolis está tentando se conectar! seja paciente! Aria2 did not respond! Aria2 não respondeu! Please try again. Por favor tente novamente. Try again! Tente novamente! progress_ui_tr Persepolis Download Manager Gerenciador de Downloads Persepolis Status: Progresso: Downloaded: Baixado: Transfer rate: Taxa de transferência: Estimated time left: Tempo restante estimado: Number of connections: Número de conexões: Download Information Informações de Download After download Após o download Apply Executar Shut Down Desligar Download Options Opções de Download Resume Resumir Pause Pausar Stop Parar Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Reinicie o Persepolis por favor!</center></b><br><center>Algumas alterações só têm efeito após reiniciar o software</center> Restart Persepolis! Reiniciar o Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> setting_ui_tr Preferences Preferências <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Definir o número de tentativas se o download falhar.</p></body></html> Number of tries: Números de tentativas: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Defina os segundos para aguardar entre novas tentativas. O gerenciador de downloads tentará novamente os downloads quando o servidor HTTP retornar uma resposta 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Definir intervalo em segundos. </p></body></html> Timeout (seconds): Intervalo (segundos): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Usar várias conexões pode ajudar a acelerar o download.</p></body></html> Number of connections: Número de conexões RPC port number: Número da porta RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Especifique um número de porta para conexão com o servidor JSON-RPC/XML-RPC. Valores possíveis: 1024-65535 padrão: 6801 </p></body></html> Change Aria2 default path Alterar caminho padrão do Aria2 Change Alterar Download Options Opções de Download Volume: Volume: Notifications Notificações Style: Estilo: Color scheme: Esquema de cores: Icons: Ícones: Notification type: Tipo da notificação: Font: Fonte: Size: Tamanho: Run Persepolis at startup Executar Persepolis na inicialização Keep system awake! Impedir sistema de entrar em modo suspenso! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Formato HH:MM</p></body></html> File Name Nome de arquivo Status Status Size Tamanho Downloaded Baixado Percentage Porcentagem Connections Conexões Category Categoria Video Finder Options Opções do Video Finder Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Número máximo de links a serem capturados:<br/><small>(se o browser envia vários links de vídeo de cada vez)</small> Defaults Padrões Cancel Cancelar OK OK Press new keys Action Shortcut Shortcuts Quit Hide main window if close button clicked. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Temporary download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization text_ui_tr Persepolis Download Manager Gerenciador de Download Persepolis Links Links Select All Selecionar Todos Deselect All Desselecionar Todos Add to queue: Adicionar para a fila: Proxy Proxy IP: IP: Port: Porta Change Download Folder Alterar pasta de downloads OK OK Cancel Cancelar Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: update_src_ui_tr Checking for newer version Verificando a versão mais recente The newest is the best, we recommend to update Persepolis. Check for new update Verifique se há nova atualização Checking... Verificando... A newer Persepolis release is available Uma nova versão do Persepolis está disponível Latest version is installed :) A versão mais recente está instalada :) You are using beta version Você está usando uma versão beta This is Persepolis Download Manager version 4.0.0 An error occurred while checking for updates. video_finder_progress_ui_tr <b>Video file status: </b> <b>Audio file status: </b> <b>Muxing status: </b> ytaddlink_src_ui_tr Video Finder Video Finder Fetch Media List Buscar lista de mídias Select a format Selecione um formato Please enter a valid video link Por favor, insira um link de vídeo válido Fetching Media Info... Buscando informações sobre a mídia... Video format: Audio format: Advanced options persepolisdm-persepolis-867ee76/resources/locales/ui_pt_BR.qm000066400000000000000000000705171464161131600244730ustar00rootroot00000000000000_`HA+H*0K*%0*00+1*G3AHw94oHw9DLb7S#bVFWiz WizcWSWcX<.­Ah6b|iVpSMJh2DS cIQ u 58u 5Xc#wpA( 0 a,$ nO QK 1^ *E<KFE[KFW_I@y"wY.C% #*쑀%]I3]e7z^Uz3u:thHIIVIaVm^!HI#1WXg a.T/0)`1T721TXU_. $8_`_i<2fv@5Gm_>1>dX @`9Zfj o9wg)-B1b-Bdl9N29Ne<=aZG(5M?$]1xDZ-xDZD fK 0C_s(Y)*E֣q- +@ > $@ AN W< ^<. `?( g` mp, }Q ~/[ D F0 U U; U]H O k g*H ^N N "ZW: _ _3 if+ if> s> `G Yp^ ? (`N ,!+D Fq Uq,> `r`[ gn-L nT v) z  {Ǝ( w4" wDq d# W 5 W e 79 A: 5?q (= 2SY e.>q e.G st@= q qO e; N * FS \V ; ] \  cF ^Y C/) \e5 q B B B;` BF BcE i"/.d:7I7If_(\xBxBbNJ J{1&A2!2B bw6?r&]>']>CiT_={}p O 2VY[Z[$q*$qB$?HNRU.#{W:iiT<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr Sobre PerspolisAbout Persepolis about_ui_trDesenvolvedores Developers about_ui_trLicenaLicense about_ui_trAceitarOK about_ui_trFGerenciador de Downloads PerspolisPersepolis Download Manager about_ui_tr6Agradecimentos especiais a:Special thanks to: about_ui_trTradutores Translators about_ui_tr.Adicionar categoria: Add to category:  addlink_ui_tr Opes AvanadasAdvanced Options addlink_ui_trCancelarCancel addlink_ui_trAlterar LocalChange Download Folder addlink_ui_tr Baixar para: Download Folder:  addlink_ui_trCabealho: Header:  addlink_ui_trIP: IP:  addlink_ui_trLinkLink addlink_ui_tr$Carregar cookies: Load cookies:  addlink_ui_trMais Opes More Options addlink_ui_trAceitarOK addlink_ui_tr Porta:Port: addlink_ui_tr ProxyProxy addlink_ui_trReferncia:  Referrer:  addlink_ui_tr&Agente de usurio:  User agent:  addlink_ui_tr0<b>Nome do Arquivo</b>: File name: after_download_src_ui_tr <b>Tamanho</b>:  Size: after_download_src_ui_tr Aceitar  OK after_download_ui_tr" Abrir Arquivo  Open File after_download_ui_tr4<b>Terminou de Baixar!</b>Download Completed!after_download_ui_tr<b>Link</b>:  Link: after_download_ui_tr(<b>Salvar como</b>: Save as: after_download_ui_trFNo exibir essa mensagem novamente.Don't show this message again.after_download_ui_tr.Abrir Pasta de BaixadosOpen Download Folderafter_download_ui_trFGerenciador de Downloads PerspolisPersepolis Download Managerafter_download_ui_tr"Log do PerspolisPersepolis Loglog_window_ui_tr(Informar um Problema Report Issuelog_window_ui_tr"</b>" j existem!" already exists!mainwindow_src_ui_tr<b><center>Esse link j foi adicionado antes! Tem certeza que deseja adicion-lo novamente?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Essa operao excluir os arquivos baixados do seu disco rgido<br>PERMANENTEMENTE!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr <b><center>Essa operao remover todos os itens nessa fila para baixar<br>da lista "Todos Baixados"!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr"<b>Conexes</b>: Connections: mainwindow_src_ui_tr <b>Baixado</b>: Downloaded: mainwindow_src_ui_tr&<b>Termina em</b>: Estimated time left: mainwindow_src_ui_tr<b>Link</b>:  Link: mainwindow_src_ui_trj<b>Desculpe! Voc no pode remover a fila padro!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Estado</b>: Status: mainwindow_src_ui_tr&<b>Baixando a</b>: Transfer rate: mainwindow_src_ui_trL<center>Quer mesmo continuar?</center>)
Do you want to continue?
mainwindow_src_ui_tr4Aria2 no est respondendoAria2 did not respondmainwindow_src_ui_tr&Aria2 no responde!Aria2 did not respond!mainwindow_src_ui_trAria2 no respondeu! seja paciente! Perspolis tentar novamente em 2 segundos!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr&Aria2 desconectado!Aria2 disconnected!mainwindow_src_ui_trVVerifique sua conexo & Reinicie Perspolis'Check your network & Restart Persepolismainwindow_src_ui_tr$Terminou de BaixarDownload Completemainwindow_src_ui_tr(Recebimento AgendadoDownload Scheduledmainwindow_src_ui_tr Comeou a BaixarDownload Startsmainwindow_src_ui_tr$Recebimento ParadoDownload Stoppedmainwindow_src_ui_trRSendo baixado pelo localizador de vdeos!(Download is in progress by video finder!mainwindow_src_ui_trErro - Error - mainwindow_src_ui_trErro...Error...mainwindow_src_ui_tr Erro: Error: mainwindow_src_ui_trOcultar opes Hide optionsmainwindow_src_ui_tr>Minimizar para barra do sistemaMinimize to system traymainwindow_src_ui_trMovendo Moving ismainwindow_src_ui_trNo Encontrado Not Foundmainwindow_src_ui_trDNo h espao livre suficiente em:Not enough free space in:mainwindow_src_ui_tr<A operao no obteve sucesso!Operation was not successful!mainwindow_src_ui_trA operao no obteve sucesso! Por favor, pare a seguinte categoria primeiro: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr<A operao no obteve sucesso.Operation was not successful.mainwindow_src_ui_trPerspolis Persepolismainwindow_src_ui_trJPerspolis no pode conectar ao Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr.Perspolis ir desligarPersepolis is shutting downmainwindow_src_ui_trhPerspolis est tentando se conectar! seja paciente!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trfPerspolis est tentando se conectar!seja paciente!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trTPerspolis reconectou ao Aria2 com sucesso)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr*Por favor, Aguarde...Please Wait...mainwindow_src_ui_trTPor favor, continue a seguinte categoria: &Please resume the following category: mainwindow_src_ui_trhPor favor, pare o progresso de recebimento primeiro.$Please stop download progress first.mainwindow_src_ui_tr^Por favor, pare a seguinte categoria primeiro: *Please stop the following category first: mainwindow_src_ui_trLPor favor, pare a seguinte categoria: $Please stop the following category: mainwindow_src_ui_trnPor favor, pare de baixar o seguinte arquivo primeiro: *Please stop the following download first: mainwindow_src_ui_tr6Por favor, tente novamente.Please try again.mainwindow_src_ui_trLista Parada!Queue Stopped!mainwindow_src_ui_tr Lista concluda!Queue completed!mainwindow_src_ui_trPronto...Ready...mainwindow_src_ui_tr*Reconectando Aria2...Reconnecting Aria2...mainwindow_src_ui_tr(Reiniciar PerspolisRestart Persepolismainwindow_src_ui_trBEnviar baixados selecionados paraSend selected downloads tomainwindow_src_ui_trEnviar paraSend tomainwindow_src_ui_tr.Exibir Janela principalShow main Windowmainwindow_src_ui_trExibir opes Show optionsmainwindow_src_ui_tr`Alguns itens no foram transferidos com sucesso!+Some items didn't transferred successfully!mainwindow_src_ui_trOrdenar porSort bymainwindow_src_ui_tr*Parar todos primeiro!Stop all downloads first!mainwindow_src_ui_trVPare de baixar o seguinte arquivo primeiro:#Stop the following download first: mainwindow_src_ui_tr Tentar novamente Try againmainwindow_src_ui_tr"Tentar novamente! Try again!mainwindow_src_ui_trSeja paciente! be patient!mainwindow_src_ui_tr4ffmpeg no est instalado!ffmpeg is not installed!mainwindow_src_ui_trFinalizado! finished!mainwindow_src_ui_tr&Erro ao multiplexar muxing errormainwindow_src_ui_tr4seu sistema em 20 segundosyour system in 20 secondsmainwindow_src_ui_trbaixado downloadedmainwindow_ui_tr&Baixar &Downloadmainwindow_ui_tr&Editar&Editmainwindow_ui_tr&Arquivo&Filemainwindow_ui_tr A&juda&Helpmainwindow_ui_tr &Lista&Queuemainwindow_ui_trE&xibir&Viewmainwindow_ui_trJ<b>Estado dos arquivos de udio: </b>Audio file status: mainwindow_ui_tr@<b>Estado da multiplexao: </b>Muxing status: mainwindow_ui_tr<b>Estado: </b>Status: mainwindow_ui_trJ<b>Estado dos arquivos de vdeo: </b>Video file status: mainwindow_ui_tr SobreAboutmainwindow_ui_tr AtivoActivemainwindow_ui_tr>Adicionar Novo Link para BaixarAdd New Download Linkmainwindow_ui_trBaixar depoisAfter downloadmainwindow_ui_trAplicarApplymainwindow_ui_trCategoriaCategorymainwindow_ui_trTLimpar todos os itens na lista de baixados Clear all items in download listmainwindow_ui_trCompletoCompletemainwindow_ui_trConexes Connectionsmainwindow_ui_tr6Criar nova fila para baixarCreate new download queuemainwindow_ui_tr BaixarDownloadmainwindow_ui_trBBaixar o final da lista primeiro"Download bottom of the list firstmainwindow_ui_trBaixado Downloadedmainwindow_ui_tr EditarEditmainwindow_ui_trTempo FinalEnd Timemainwindow_ui_trErroErrormainwindow_ui_trSairExitmainwindow_ui_trArquivoFilemainwindow_ui_trNome do Arquivo File Namemainwindow_ui_tr AjudaHelpmainwindow_ui_tr"Velocidade Limite Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_tr<Mover selecionados para a base-Move currently selected items down by one rowmainwindow_ui_tr<Mover selecionados para o topo+Move currently selected items up by one rowmainwindow_ui_trNo Ativo Not Activemainwindow_ui_trPausar Pause Downloadmainwindow_ui_trProgresso Percentagemainwindow_ui_trFGerenciador de Downloads PerspolisPersepolis Download Managermainwindow_ui_trPreferncias Preferencesmainwindow_ui_trProgressoProgressmainwindow_ui_trPropriedades Propertiesmainwindow_ui_tr ListaQueuemainwindow_ui_tr$Remover essa listaRemove this queuemainwindow_ui_tr(Informar um problemaReport an issuemainwindow_ui_trContinuarResume Downloadmainwindow_ui_trNExibir/Ocultar para rea de notificaoShow/Hide system tray iconmainwindow_ui_trDesligar Shut Downmainwindow_ui_trTamanhoSizemainwindow_ui_trOrdenar porSort bymainwindow_ui_trTempo Inicial Start Timemainwindow_ui_tr$Iniciar essa listaStart this queuemainwindow_ui_trIniciadoStartedmainwindow_ui_tr EstadoStatusmainwindow_ui_tr Parar Stop Downloadmainwindow_ui_tr Parar essa listaStop this queuemainwindow_ui_tr4Parar/Cancelar RecebimentoStop/Cancel Downloadmainwindow_ui_tr*Pesqu&isador de Vdeo V&ideo Findermainwindow_ui_tr(Localizador de Vdeo Video Findermainwindow_ui_tr ExibirViewmainwindow_ui_tr6Aria2 no est respondendo!Aria2 did not respond!progress_src_ui_tr&Aria2 desconectado!Aria2 disconnected!progress_src_ui_trhPerspolis est tentando se conectar! seja paciente!,Persepolis is trying to connect! be patient!progress_src_ui_tr6Por favor, tente novamente.Please try again.progress_src_ui_tr Tente novamente! Try again!progress_src_ui_trBaixar depoisAfter downloadprogress_ui_trAplicarApplyprogress_ui_tr2Informao de RecebimentoDownload Informationprogress_ui_tr Opes ao BaixarDownload Optionsprogress_ui_trBaixado: Downloaded:progress_ui_tr0Tempo restante estimado:Estimated time left:progress_ui_tr(Nmero de Conexes: Number of connections: progress_ui_tr PausarPauseprogress_ui_trFGerenciador de Downloads PerspolisPersepolis Download Managerprogress_ui_trContinuarResumeprogress_ui_trDesligar Shut Downprogress_ui_trEstado:Status: progress_ui_tr PararStopprogress_ui_tr.Taxa de transferncia: Transfer rate: progress_ui_tr,<b><center>Por favor, Reinicie o Perspolis!</center></b><br><center>Algumas alteraes s entraro em vigor depois de reiniciar o Perspolis</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Este atalho j est sendo usado! Tente usar outro!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr*Reiniciar Perspolis!Restart Persepolis!setting_src_ui_trB<html><head/><body><p> Especifica um nmero de porta para o servidor JSON-RPC/XML-RPC para ouvir. Valores Possveis: 1024 - 65535 Padro: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trj<html><head/><body><p>Formato HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Define o nmero de tentativas se falhar ao baixar.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>Define os segundos para tempo de espera entre novas tentativas. O gerenciador tenta baixar novamente quando o servidor HTTP retorna uma resposta 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Define o tempo limite em segundos. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Este recurso pode no funcionar no seu sistema operacional.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Utilizar vrias conexes pode ajudar a acelerar o recebimento.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trAoAction setting_ui_trCancelarCancel setting_ui_trCategoriaCategory setting_ui_trAlterarChange setting_ui_trBAlterar o caminho padro do Aria2Change Aria2 default path setting_ui_tr Esquema de cor: Color scheme:  setting_ui_trConexes Connections setting_ui_trPadresDefaults setting_ui_tr$Opes Para BaixarDownload Options setting_ui_trBaixado Downloaded setting_ui_trNome do Arquivo File Name setting_ui_trFonte: Font:  setting_ui_trROcultar janela ao clicar no boto fechar.)Hide main window if close button clicked. setting_ui_trcones: Icons:  setting_ui_tr.Manter o sistema ativo!Keep system awake! setting_ui_trNmero mximo de links para capturar:<br/><small>(Se o navegador enviar mltiplos links de vdeo por vez)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr*Tipo de notificao: Notification type:  setting_ui_trNotificao Notifications setting_ui_tr(Nmero de conexes: Number of connections:  setting_ui_tr,Nmero de tentativas: Number of tries:  setting_ui_trAceitarOK setting_ui_trPorcentagem Percentage setting_ui_trPreferncias Preferences setting_ui_tr,Escolha uma nova teclaPress new keys setting_ui_trSairQuit setting_ui_tr*Nmero da porta RPC: RPC port number:  setting_ui_trLExecutar o Perspolis na inicializaoRun Persepolis at startup setting_ui_tr AtalhoShortcut setting_ui_trAtalhos Shortcuts setting_ui_trTamanhoSize setting_ui_trTamanho: Size:  setting_ui_tr StatusStatus setting_ui_trEstilo: Style:  setting_ui_tr2Tempo limite (segundos): Timeout (seconds):  setting_ui_tr6Opes do Buscador de VdeoVideo Finder Options setting_ui_trVolume: Volume:  setting_ui_tr$Adicionar fila: Add to queue:  text_ui_trCancelarCancel text_ui_tr(Alterar Pasta PadroChange Download Folder text_ui_trDesmarcar Todos Deselect All text_ui_trIP:IP: text_ui_tr LinksLinks text_ui_trAceitarOK text_ui_trFGerenciador de Downloads PerspolisPersepolis Download Manager text_ui_tr Porta:Port: text_ui_tr ProxyProxy text_ui_tr Selecionar Todos Select All text_ui_trF<b>Estado do arquivo de udio: </b>Audio file status: video_finder_progress_ui_tr@<b>Estado da Multiplexao: </b>Muxing status: video_finder_progress_ui_trF<b>Estado do arquivo de vdeo: </b>Video file status: video_finder_progress_ui_tr Opes avanadasAdvanced optionsytaddlink_src_ui_tr"Formato de udio: Audio format:ytaddlink_src_ui_tr0Pesquisar Lista de MdiaFetch Media Listytaddlink_src_ui_trHPesquisando Informaes de Mdia ...Fetching Media Info...ytaddlink_src_ui_trRPor favor, insira um link de vdeo vlidoPlease enter a valid video linkytaddlink_src_ui_tr(Selecione um formatoSelect a formatytaddlink_src_ui_tr"Buscador de Vdeo Video Finderytaddlink_src_ui_tr"Formato de vdeo: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_pt_BR.ts000066400000000000000000002377471464161131600245160ustar00rootroot00000000000000 about_ui_tr About Persepolis Sobre Persépolis Persepolis Download Manager Gerenciador de Downloads Persépolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Desenvolvedores Translators Tradutores License Licença OK Aceitar Special thanks to: Agradecimentos especiais a: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Adicionar à categoria: Proxy Proxy IP: IP: Port: Porta: Change Download Folder Alterar Local Download Folder: Baixar para: Cancel Cancelar OK Aceitar Link Link More Options Mais Opções Advanced Options Opções Avançadas Referrer: Referência: Header: Cabeçalho: Load cookies: Carregar cookies: User agent: Agente de usuário: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Nome do Arquivo</b>: <b>Size</b>: <b>Tamanho</b>: after_download_ui_tr Persepolis Download Manager Gerenciador de Downloads Persépolis Open File Abrir Arquivo Open Download Folder Abrir Pasta de Baixados OK Aceitar Don't show this message again. Não exibir essa mensagem novamente. <b>Download Completed!</b> <b>Terminou de Baixar!</b> <b>Save as</b>: <b>Salvar como</b>: <b>Link</b>: <b>Link</b>: log_window_ui_tr Persepolis Log Log do Persépolis Report Issue Informar um Problema Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persépolis Queue Stopped! Lista Parada! Persepolis is shutting down Persépolis irá desligar your system in 20 seconds seu sistema em 20 segundos Queue completed! Lista concluída! Show main Window Exibir Janela principal Please Wait... Por favor, Aguarde... Ready... Pronto... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 não respondeu! seja paciente! Persépolis tentará novamente em 2 segundos! Error... Erro... Persepolis can not connect to Aria2 Persépolis não pode conectar ao Aria2 Check your network & Restart Persepolis Verifique sua conexão & Reinicie Persépolis Restart Persepolis Reiniciar Persépolis Reconnecting Aria2... Reconectando Aria2... Persepolis reconnected aria2 successfully Persépolis reconectou ao Aria2 com sucesso Error: Erro: <b>Link</b>: <b>Link</b>: <b>Downloaded</b>: <b>Baixado</b>: <b>Transfer rate</b>: <b>Baixando a</b>: <b>Estimated time left</b>: <b>Termina em</b>: <b>Connections</b>: <b>Conexões</b>: <b>Status</b>: <b>Estado</b>: Download Stopped Recebimento Parado Error - Erro - Download Complete Terminou de Baixar <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Esse link já foi adicionado antes! Tem certeza que deseja adicioná-lo novamente?</center></b> Download Starts Começou a Baixar Download Scheduled Recebimento Agendado Operation was not successful. A operação não obteve sucesso. Please resume the following category: Por favor, continue a seguinte categoria: Aria2 disconnected! Aria2 desconectado! Persepolis is trying to connect!be patient! Persépolis está tentando se conectar!seja paciente! Aria2 did not respond! Aria2 não responde! Try again! Tentar novamente! Aria2 did not respond Aria2 não está respondendo Try again Tentar novamente Please stop the following category: Por favor, pare a seguinte categoria: Persepolis is trying to connect! be patient! Persépolis está tentando se conectar! seja paciente! Please try again. Por favor, tente novamente. Minimize to system tray Minimizar para barra do sistema Not Found Não Encontrado Operation was not successful! A operação não obteve sucesso! Operation was not successful! Please stop the following category first: A operação não obteve sucesso! Por favor, pare a seguinte categoria primeiro: Please stop the following download first: Por favor, pare de baixar o seguinte arquivo primeiro: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Essa operação excluirá os arquivos baixados do seu disco rígido<br>PERMANENTEMENTE!</center></b> <center>Do you want to continue?</center> <center>Quer mesmo continuar?</center> Please stop the following category first: Por favor, pare a seguinte categoria primeiro: </b>" already exists! </b>" já existem! Send selected downloads to Enviar baixados selecionados para Send to Enviar para Sort by Ordenar por <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Essa operação removerá todos os itens nessa fila para baixar<br>da lista "Todos Baixados"!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Desculpe! Você não pode remover a fila padrão!</b> Some items didn't transferred successfully! Alguns itens não foram transferidos com sucesso! Please stop download progress first. Por favor, pare o progresso de recebimento primeiro. Hide options Ocultar opções Show options Exibir opções Stop all downloads first! Parar todos primeiro! Moving is Movendo finished! Finalizado! Download is in progress by video finder! Sendo baixado pelo localizador de vídeos! be patient! Seja paciente! Stop the following download first: Pare de baixar o seguinte arquivo primeiro: ffmpeg is not installed! ffmpeg não está instalado! Not enough free space in: Não há espaço livre suficiente em: muxing error Erro ao multiplexar an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Arquivo Edit Editar View Exibir Download Baixar Queue Lista Video Finder Localizador de Vídeo Help Ajuda Sort by Ordenar por Persepolis Download Manager Gerenciador de Downloads Persépolis Category Categoria File Name Nome do Arquivo Status Estado Size Tamanho Downloaded Baixado Percentage Progresso Connections Conexões Link Link &File &Arquivo &Edit &Editar &View E&xibir &Download &Baixar &Queue &Lista &Help A&juda Show/Hide system tray icon Exibir/Ocultar para área de notificação Add New Download Link Adicionar Novo Link para Baixar Resume Download Continuar Pause Download Pausar Stop Download Parar Stop/Cancel Download Parar/Cancelar Recebimento Properties Propriedades Progress Progresso Exit Sair Clear all items in download list Limpar todos os itens na lista de baixados Create new download queue Criar nova fila para baixar Remove this queue Remover essa lista Start this queue Iniciar essa lista Stop this queue Parar essa lista Move currently selected items up by one row Mover selecionados para o topo Move currently selected items down by one row Mover selecionados para a base Preferences Preferências About Sobre Report an issue Informar um problema Start Time Tempo Inicial End Time Tempo Final Download bottom of the list first Baixar o final da lista primeiro Limit Speed Velocidade Limite Apply Aplicar After download Baixar depois Shut Down Desligar V&ideo Finder Pesqu&isador de Vídeo <b>Video file status: </b> <b>Estado dos arquivos de vídeo: </b> <b>Audio file status: </b> <b>Estado dos arquivos de áudio: </b> <b>Status: </b> <b>Estado: </b> <b>Muxing status: </b> <b>Estado da multiplexação: </b> downloaded baixado Active Ativo Not Active Não Ativo Started Iniciado Error Erro Complete Completo Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 desconectado! Persepolis is trying to connect! be patient! Persépolis está tentando se conectar! seja paciente! Aria2 did not respond! Aria2 não está respondendo! Please try again. Por favor, tente novamente. Try again! Tente novamente! progress_ui_tr Persepolis Download Manager Gerenciador de Downloads Persépolis Status: Estado: Downloaded: Baixado: Transfer rate: Taxa de transferência: Estimated time left: Tempo restante estimado: Number of connections: Número de Conexões: Download Information Informação de Recebimento After download Baixar depois Apply Aplicar Shut Down Desligar Download Options Opções ao Baixar Resume Continuar Pause Pausar Stop Parar Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Por favor, Reinicie o Persépolis!</center></b><br><center>Algumas alterações só entrarão em vigor depois de reiniciar o Persépolis</center> Restart Persepolis! Reiniciar Persépolis! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Este atalho já está sendo usado! Tente usar outro!</center></b> setting_ui_tr Preferences Preferências <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Define o número de tentativas se falhar ao baixar.</p></body></html> Number of tries: Número de tentativas: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Define os segundos para tempo de espera entre novas tentativas. O gerenciador tenta baixar novamente quando o servidor HTTP retorna uma resposta 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Define o tempo limite em segundos. </p></body></html> Timeout (seconds): Tempo limite (segundos): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Utilizar várias conexões pode ajudar a acelerar o recebimento.</p></body></html> Number of connections: Número de conexões: RPC port number: Número da porta RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Especifica um número de porta para o servidor JSON-RPC/XML-RPC para ouvir. Valores Possíveis: 1024 - 65535 Padrão: 6801 </p></body></html> Change Aria2 default path Alterar o caminho padrão do Aria2 Change Alterar Download Options Opções Para Baixar Volume: Volume: Notifications Notificação Style: Estilo: Color scheme: Esquema de cor: Icons: Ícones: Notification type: Tipo de notificação: Font: Fonte: Size: Tamanho: Run Persepolis at startup Executar o Persépolis na inicialização Keep system awake! Manter o sistema ativo! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Formato HH:MM</p></body></html> File Name Nome do Arquivo Status Status Size Tamanho Downloaded Baixado Percentage Porcentagem Connections Conexões Category Categoria Video Finder Options Opções do Buscador de Vídeo Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Número máximo de links para capturar:<br/><small>(Se o navegador enviar múltiplos links de vídeo por vez)</small> Defaults Padrões Cancel Cancelar OK Aceitar Press new keys Escolha uma nova tecla Action Ação Shortcut Atalho Shortcuts Atalhos Quit Sair Hide main window if close button clicked. Ocultar janela ao clicar no botão fechar. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p> Este recurso pode não funcionar no seu sistema operacional.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Gerenciador de Downloads Persépolis Links Links Select All Selecionar Todos Deselect All Desmarcar Todos Add to queue: Adicionar à fila: Proxy Proxy IP: IP: Port: Porta: Change Download Folder Alterar Pasta Padrão OK Aceitar Cancel Cancelar Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Estado do arquivo de vídeo: </b> <b>Audio file status: </b> <b>Estado do arquivo de áudio: </b> <b>Muxing status: </b> <b>Estado da Multiplexação: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Buscador de Vídeo Fetch Media List Pesquisar Lista de Mídia Select a format Selecione um formato Please enter a valid video link Por favor, insira um link de vídeo válido Fetching Media Info... Pesquisando Informações de Mídia ... Video format: Formato de vídeo: Audio format: Formato de áudio: Advanced options Opções avançadas persepolisdm-persepolis-867ee76/resources/locales/ui_ru.qm000066400000000000000000000774521464161131600241200ustar00rootroot00000000000000?%?ِ P 0@K0K p0KA'i'Gk`Q#J+Q*7/*%7u*07+82vaG:Hw9;iHw9MJ6MLb?qMS ~S#oVOWiz WizpW WpXD[­OJu|>b| i p[Ju2D ScIQ'u 5@ u 5bbc@c#"pA.P7 m,* nX QT 1^r*N< KFN:KF`KFo'_II(jb4%#1P쑀+w]I3he?&g z^^z:_Btu'ItI^In2_Im^'AI)"Xj FXjoWbt a5T60NO(0/1T>1Ta=_. *7_`Di<9Nt 8ve "5Pok>8>qX Ik9Zsg o@wt%;)o -B8N-Bqk9N99Nr<=mG(<M?$#]1tA6BxDZ4xDZMsKCj}(d`)*N֣DSv61= d*FuE`l6`9uEgq!4f +@$ > $I AN& R Q WE ^DW `H! b V glZ mp3' }R }Qj ~5 M F0! U" UCZ UhN O&^ g0 ^W V "ZWB Ertj _B _: if2Y ifG s> `P [ Ypi H (l% ,!1 Fq Uq2 `r`f gn3 n]B v z {Ǝ/ w; wMZ q, ` = `R N- ^ 7A\ Jc 5Hh (F 2S P[L b[Fs e.Gd e.P stI: q q$ e"X N 0 Oa gh D h g# # c#] iW C/0, .H a{ >P \e=\ q B< Bf BC BO Bp\ $c c i"5_.dC 7I7Is_.xBxBngNeJ Sw1,"2'2K n6?r,]>-Z]>LiTj3{}p xVc [$m[%$q $qK'?Q^[ .){`iv<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr PersepolisAbout Persepolis about_ui_tr;03>40@=>ABL:Acknowledgments: about_ui_tr 07@01>BG8:8 Developers about_ui_tr8F5=78OLicense about_ui_trOKOK about_ui_tr85=5465@ 703@C7>: PersepolisPersepolis Download Manager about_ui_tr*A>10O 1;03>40@=>ABL:Special thanks to: about_ui_tr5@52>4G8:8 Translators about_ui_tr<>1028BL AAK;:C 4;O A:0G820=8OAdd Download Link addlink_ui_tr*>1028BL 2 :0B53>@8N:Add to category:  addlink_ui_tr* 0AH8@5==K5 ?0@0<5B@KAdvanced Options addlink_ui_trB<5=8BLCancel addlink_ui_tr67<5=8BL ?0?:C 4;O 703@C7:8Change Download Folder addlink_ui_tr(7<5=8BL 8<O D09;0: Change file name:  addlink_ui_trL?@545;8BL =0AB@>9:8 A8AB5<=>3> ?@>:A8Detect System Proxy Settings addlink_ui_tr(0?:0 4;O 703@C7:8: Download Folder:  addlink_ui_tr03@C78BL ?>765Download Later addlink_ui_tr.!AK;:0 4;O A:0G820=8O: Download link:  addlink_ui_tr@5<O >:>=G0=8OEnd time addlink_ui_trHTTPHTTP addlink_ui_tr HTTPSHTTPS addlink_ui_tr03>;>2>:: Header:  addlink_ui_trIP: IP:  addlink_ui_tr&3@0=8G8BL A:>@>ABL Limit speed addlink_ui_tr !AK;:0Link addlink_ui_tr$03@C78BL cookies:Load cookies:  addlink_ui_tr">;LH5 ?0@0<5B@>2 More Options addlink_ui_tr.>;8G5AB2> ?>4:;NG5=89:Number of connections: addlink_ui_trOKOK addlink_ui_tr >@B:Port: addlink_ui_tr @>:A8Proxy addlink_ui_tr0@>;L ?@>:A8: Proxy password:  addlink_ui_trReferrer:  Referrer:  addlink_ui_tr&0?><=8BL MB>B ?CBLRemember this path addlink_ui_tr SOCKS5SOCKS5 addlink_ui_tr@5<O =0G0;0 Start time addlink_ui_tr0>;L7>20B5;LA:89 035=B:  User agent:  addlink_ui_tr$<b><O D09;0</b>: File name: after_download_src_ui_tr<b> 07<5@</b>:  Size: after_download_src_ui_tr OK  OK after_download_ui_trB:@KBL D09; Open File after_download_ui_tr4<b>03@C7:0 7025@H5=0!</b>Download Completed!after_download_ui_tr<b>!AK;:0</b>:  Link: after_download_ui_tr,<b>!>E@0=8BL :0:</b>: Save as: after_download_ui_trD5 ?>:07K20BL MB> A>>1I5=85 A=>20.Don't show this message again.after_download_ui_tr,B:@KBL ?0?:C 703@C7:8Open Download Folderafter_download_ui_tr85=5465@ 703@C7>: PersepolisPersepolis Download Managerafter_download_ui_tr4G8AB8BL A>>1I5=8O 6C@=0;0Clear Log Messageslog_window_ui_tr0:@KBLCloselog_window_ui_trJ!:>?8@>20BL 2K45;5==>5 2 1CD5@ >1<5=0Copy Selected to Clipboardlog_window_ui_tr"C@=0; PersepolisPersepolis Loglog_window_ui_tr41=>28BL A>>1I5=8O 6C@=0;0Refresh Log Messageslog_window_ui_tr&!>>1I8BL > ?@>1;5<5 Report Issuelog_window_ui_tr*</b>" C65 ACI5AB2C5B!" already exists!mainwindow_src_ui_tr<b><center>-B0 AAK;:0 1K;0 4>102;5=0 @0=LH5! K C25@5=K, GB> E>B8B5 4>1028BL 5Q 5IQ @07?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>-B0 >?5@0F8O C40;8B 703@C65==K5 D09;K A 20H53> 65AB:>3> 48A:0<br> "!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>-B0 >?5@0F8O C40;8B 2A5 M;5<5=BK 703@C7:8 2 MB>9 >G5@548<br>87 A?8A:0 A5 703@C7:8!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr&<b>!>548=5=8O</b>: Connections: mainwindow_src_ui_tr$<b>03@C65=></b>: Downloaded: mainwindow_src_ui_tr0<b>68405<>5 2@5<O</b>: Estimated time left: mainwindow_src_ui_tr<b>!AK;:0</b>:  Link: mainwindow_src_ui_trv<b>728=8B5! K =5 <>65B5 C40;8BL >G5@54L ?> C<>;G0=8N!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>!B0BCA</b>: Status: mainwindow_src_ui_tr4<b>!:>@>ABL ?5@540G8</b>: Transfer rate: mainwindow_src_ui_trL<center>K E>B8B5 ?@>4>;68BL?</center>)
Do you want to continue?
mainwindow_src_ui_tr Aria2 =5 >B25B8;Aria2 did not respondmainwindow_src_ui_tr"Aria2 =5 >B25B8;!Aria2 did not respond!mainwindow_src_ui_trAria2 =5 >B25B8;! C4LB5 B5@?5;52K! Persepolis A=>20 ?KB05BAO G5@57 2 A5:C=4K!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr.>B5@O=0 A2O7L A Aria2!Aria2 disconnected!mainwindow_src_ui_trj@>25@LB5 20H5 ?>4:;NG5=85 8 ?5@570?CAB8B5 Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr$03@C7:0 7025@H5=0Download Completemainwindow_src_ui_tr,03@C7:0 70?;0=8@>20=0Download Scheduledmainwindow_src_ui_tr"03@C7:0 =0G0;0ALDownload Startsmainwindow_src_ui_tr(03@C7:0 >AB0=>2;5=0Download Stoppedmainwindow_src_ui_trjK?>;=O5BAO 703@C7:0 A ?><>ILN A@54AB20 ?>8A:0 2845>!(Download is in progress by video finder!mainwindow_src_ui_trH81:0 -Error - mainwindow_src_ui_trH81:0...Error...mainwindow_src_ui_trH81:0:Error: mainwindow_src_ui_tr !:@KBL ?0@0<5B@K Hide optionsmainwindow_src_ui_tr2!?@OB0BL 2 A8AB5<=K9 B@59Minimize to system traymainwindow_src_ui_tr5@5<5I5=85 Moving ismainwindow_src_ui_tr5 =0945=> Not Foundmainwindow_src_ui_tr@54>AB0B>G=> A2>1>4=>3> <5AB0 2:Not enough free space in:mainwindow_src_ui_tr4?5@0F8O =5 1K;0 CA?5H=>9!Operation was not successful!mainwindow_src_ui_tr?5@0F8O =5 1K;0 CA?5H=>9! >60;C9AB0, >AB0=>28B5 A;54CNICN :0B53>@8N:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr4?5@0F8O =5 1K;0 CA?5H=>9.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trPPersepolis =5 <>65B ?>4:;NG8BLAO : Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr,Persepolis 2K:;NG05BAOPersepolis is shutting downmainwindow_src_ui_trdPersepolis ?KB05BAO A>548=8BLAO! C4LB5 B5@?5;82K!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trdPersepolis ?KB05BAO A>548=8BLAO! C4LB5 B5@?5;82K!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trdPersepolis CA?5H=> 2>AAB0=>28; ?>4:;NG5=85 : aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr(>60;C9AB0 ?>4>648B5Please Wait...mainwindow_src_ui_trX>60;C9AB0, 2>7>1=>28B5 A;54CNICN :0B53>@8N:&Please resume the following category: mainwindow_src_ui_trL!=0G0;0 >AB0=>28B5 A;54CNICN 703@C7:C.$Please stop download progress first.mainwindow_src_ui_trN!=0G0;0 >AB0=>28B5 A;54CNICN :0B53>@8N:*Please stop the following category first: mainwindow_src_ui_trV>60;C9AB0, >AB0=>28B5 A;54CNICN :0B53>@8N:$Please stop the following category: mainwindow_src_ui_trL!=0G0;0 >AB0=>28B5 A;54CNICN 703@C7:C:*Please stop the following download first: mainwindow_src_ui_tr:>60;C9AB0, ?>?@>1C9B5 A=>20.Please try again.mainwindow_src_ui_tr@>60;C9AB0, >1=>28B5 Persepolis.Please update Persepolis.mainwindow_src_ui_tr(G5@54L >AB0=>2;5=0!Queue Stopped!mainwindow_src_ui_tr$G5@54L 7025@H5=0!Queue completed!mainwindow_src_ui_tr>B>2>...Ready...mainwindow_src_ui_tr45@5?>4:;NG5=85 : Aria2...Reconnecting Aria2...mainwindow_src_ui_tr05@570?CAB8BL PersepolisRestart Persepolismainwindow_src_ui_tr<B?@028BL 2K1@0==K5 703@C7:8 2Send selected downloads tomainwindow_src_ui_trB?@028BLSend tomainwindow_src_ui_tr*>:070BL 3;02=>5 >:=>Show main Windowmainwindow_src_ui_tr$>:070BL ?0@0<5B@K Show optionsmainwindow_src_ui_tr\5:>B>@K5 M;5<5=BK =5 1K;8 CA?5H=> ?5@5=5A5=K!+Some items didn't transferred successfully!mainwindow_src_ui_tr!>@B8@>20BL ?>Sort bymainwindow_src_ui_tr@!=0G0;0 >AB0=>28B5 2A5 703@C7:8!Stop all downloads first!mainwindow_src_ui_trL!=0G0;0 >AB0=>28B5 A;54CNICN 703@C7:C:#Stop the following download first: mainwindow_src_ui_tr >?@>1C9B5 A=>20 Try againmainwindow_src_ui_tr">?@>1C9B5 A=>20! Try again!mainwindow_src_ui_tr?>4>648B5! be patient!mainwindow_src_ui_tr*ffmpeg =5 CAB0=>2;5=!ffmpeg is not installed!mainwindow_src_ui_tr7025@H5=>! finished!mainwindow_src_ui_tr4>H81:0 <C;LB8?;5:A8@>20=8O muxing errormainwindow_src_ui_tr820H0 A8AB5<0 G5@57 20 A5:C=4your system in 20 secondsmainwindow_src_ui_tr*yt-dlp =5 CAB0=>2;5=!yt-dlp is not installed!mainwindow_src_ui_tr703@C65=> downloadedmainwindow_ui_tr&03@C7:0 &Downloadmainwindow_ui_tr& 540:B8@>20BL&Editmainwindow_ui_tr &$09;&Filemainwindow_ui_tr&><>IL&Helpmainwindow_ui_tr&G5@54L&Queuemainwindow_ui_tr&84&Viewmainwindow_ui_tr:<b>!>AB>O=85 0C48>D09;0: </b>Audio file status: mainwindow_ui_trL<b>!>AB>O=85 <C;LB8?;5:A8@>20=8O: </b>Muxing status: mainwindow_ui_tr$<b>!>AB>O=85: </b>Status: mainwindow_ui_tr:<b>!>AB>O=85 2845>D09;0: </b>Video file status: mainwindow_ui_tr ?@>3@0<<5Aboutmainwindow_ui_tr:B82=>Activemainwindow_ui_trH>1028BL =>2CN AAK;:C 4;O A:0G820=8OAdd New Download Linkmainwindow_ui_tr>A;5 703@C7:8After downloadmainwindow_ui_tr@8=OBLApplymainwindow_ui_tr0B53>@88Categorymainwindow_ui_tr0G8AB8BL A?8A>: 703@C7>:Clear Download Listmainwindow_ui_trLG8AB8BL 2A5 M;5<5=BK 2 A?8A:5 70:0G:8 Clear all items in download listmainwindow_ui_tr025@H5=>Completemainwindow_ui_tr!>548=5=89 Connectionsmainwindow_ui_tr:!>740BL =>2CN >G5@54L 70:0G5:Create new download queuemainwindow_ui_tr!:0G0BLDownloadmainwindow_ui_trL!=0G0;0 703@C78B5 =86=NN G0ABL A?8A:0"Download bottom of the list firstmainwindow_ui_tr03@C65=> Downloadedmainwindow_ui_tr 540:B8@>20BLEditmainwindow_ui_tr@5<O >:>=G0=8OEnd Timemainwindow_ui_tr H81:0Errormainwindow_ui_tr KE>4Exitmainwindow_ui_tr$09;Filemainwindow_ui_tr<O D09;0 File Namemainwindow_ui_tr ><>ILHelpmainwindow_ui_tr !:@KBL ?0@0<5B@K Hide Optionsmainwindow_ui_tr&3@0=8G8BL A:>@>ABL Limit Speedmainwindow_ui_tr !AK;:0Linkmainwindow_ui_trd5@5<5AB8BL 2K1@0==K5 M;5<5=BK 2=87 =0 >4=C AB@>:C-Move currently selected items down by one rowmainwindow_ui_trf5@5<5AB8BL 2K1@0==K5 M;5<5=BK 225@E =0 >4=C AB@>:C+Move currently selected items up by one rowmainwindow_ui_tr5 0:B82=> Not Activemainwindow_ui_tr0C70 703@C7:8Pause Downloadmainwindow_ui_tr@>F5=B Percentagemainwindow_ui_tr85=5465@ 703@C7>: PersepolisPersepolis Download Managermainwindow_ui_tr@54?>GB5=8O Preferencesmainwindow_ui_tr@>3@5AAProgressmainwindow_ui_tr!2>9AB20 Propertiesmainwindow_ui_trG5@54LQueuemainwindow_ui_tr&#40;8BL MBC >G5@54LRemove this queuemainwindow_ui_tr&!>>1I8BL > ?@>1;5<5Report an Issuemainwindow_ui_tr"!>>1I8BL > >H81:5Report an issuemainwindow_ui_tr(>7>1=>28BL 703@C7:CResume Downloadmainwindow_ui_tr*>:070BL D09; 6C@=0;0 Show Log Filemainwindow_ui_trV>:070BL / A?@OB0BL 7=0G>: 2 A8AB5<=>< B@55Show/Hide system tray iconmainwindow_ui_trK:;NG8BL Shut Downmainwindow_ui_tr  07<5@Sizemainwindow_ui_tr!>@B8@>20BL ?>Sort bymainwindow_ui_tr@5<O =0G0;0 Start Timemainwindow_ui_tr*0?CAB8BL MBC >G5@54LStart this queuemainwindow_ui_tr0?CI5=>Startedmainwindow_ui_tr !B0BCAStatusmainwindow_ui_tr&AB0=>28BL 703@C7:C Stop Downloadmainwindow_ui_tr,AB0=>28BL MBC >G5@54LStop this queuemainwindow_ui_tr8AB0=>28BL/B<5=8BL 703@C7:CStop/Cancel Downloadmainwindow_ui_trV&ideo Finder V&ideo Findermainwindow_ui_trVideo Finder Video Findermainwindow_ui_tr84Viewmainwindow_ui_tr"Aria2 =5 >B25B8;!Aria2 did not respond!progress_src_ui_trAria2 >B:;NG5=!Aria2 disconnected!progress_src_ui_trfPersepolis ?KB05BAO ?>4:;NG8BLAO! C4LB5 B5@?5;82K!,Persepolis is trying to connect! be patient!progress_src_ui_tr8>60;C9AB0 ?>2B>@8B5 70=>2>.Please try again.progress_src_ui_tr">2B>@8B5 70=>2>! Try again!progress_src_ui_tr>A;5 70:0G:8After downloadprogress_ui_tr@8=OBLApplyprogress_ui_tr(=D>@<0F8O > 70:0G:5Download Informationprogress_ui_tr$0@0<5B@K 703@C7:8Download Optionsprogress_ui_tr0:0G5=>: Downloaded:progress_ui_tr 68405<>5 2@5<O:Estimated time left:progress_ui_tr!AK;:0: Link: progress_ui_tr,>;8G5AB2> A>548=5=89:Number of connections: progress_ui_tr 0C70Pauseprogress_ui_tr85=5465@ 703@C7>: PersepolisPersepolis Download Managerprogress_ui_tr@>4>;68BLResumeprogress_ui_trK:;NG8BL Shut Downprogress_ui_tr!B0BCA:Status: progress_ui_trAB0=>28BLStopprogress_ui_tr$!:>@>ABL ?5@540G8:Transfer rate: progress_ui_tr"<b><center>>60;C9AB0, ?5@570?CAB8B5 Persepolis!</center></b><br><center>5:>B>@K5 87<5=5=8O 2ABC?OB 2 A8;C ?>A;5 ?5@570?CA:0 Persepolis</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>-B> A>G5B0=85 C65 8A?>;L7C5BAO! K15@8B5 4@C3>5!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr25@570?CAB8BL Persepolis!Restart Persepolis!setting_src_ui_tr"<html><head/><body><p> #:068B5 =><5@ ?>@B0 4;O JSON-RPC / XML-RPC-A5@25@0. >7<>6=K5 7=0G5=8O: 1024 - 65535 > C<>;G0=8N: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trh<html><head/><body><p>$>@<0B HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>0409B5 :>;8G5AB2> ?>?KB>:, 5A;8 703@C7:0 =5 C40;0AL.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr`<html><head/><body><p>#AB0=>28B5 :>;8G5AB2> A5:C=4 >6840=8O <564C ?>?KB:0<8. 5=5465@ 70:0G5: 1C45B ?>2B>@OBL 70:0G:8, :>340 HTTP-A5@25@ 2>72@0I05B >B25B 503.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>#AB0=>28B5 B09<-0CB 2 A5:C=40E. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>-B0 DC=:F8O <>65B =5 @01>B0BL 2 20H59 >?5@0F8>==>9 A8AB5<5.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>A?>;L7>20=85 =5A:>;L:8E A>548=5=89 <>65B ?><>GL CA:>@8BL 703@C7:C.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr59AB285Action setting_ui_trB<5=8BLCancel setting_ui_tr0B53>@88Category setting_ui_tr7<5=8BLChange setting_ui_trH7<5=8BL ?CBL ?> C<>;G0=8N 4;O Aria2Change Aria2 default path setting_ui_tr&25B>20O AE5<0:Color scheme:  setting_ui_tr!>548=5=8O Connections setting_ui_tr*=0G5=8O ?> C<>;G0=8NDefaults setting_ui_tr$0@0<5B@K 703@C7:8Download Options setting_ui_tr03@C65=> Downloaded setting_ui_tr4:;NG8BL 72C:8 C254><;5=89Enable Notification Sounds setting_ui_tr>:;NG8BL 7=0G>: =0 ?0=5;8 7040GEnable system tray icon setting_ui_tr<O D09;0 File Name setting_ui_tr (@8DB:Font:  setting_ui_trh!:@K20BL 3;02=>5 >:=>, 5A;8 =060B0 :;028H0 70:@KB8O.)Hide main window if close button clicked. setting_ui_tr:>=:8:Icons:  setting_ui_trrA;8 1@0C75@ >B:@KB, 70?CAB8BL Persepolis =0 ?0=5;8 7040G5If browser is opened, start Persepolis in system tray setting_ui_trX5 ?>72>;OBL A8AB5<5 ?5@59B8 2 64CI89 @568< Keep system awake! setting_ui_tr /7K::  Language:  setting_ui_tr0:A8<0;L=>5 :>;8G5AB2> AAK;>: 4;O 70E20B0:<br/><small>(A;8 1@0C75@ >4=>2@5<5==> >B?@028B =5A:>;L:> AAK;>: =0 2845>)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr "8? C254><;5=89:Notification type:  setting_ui_tr#254><;5=8O Notifications setting_ui_tr,>;8G5AB2> A>548=5=89:Number of connections:  setting_ui_tr&>;8G5AB2> ?>?KB>::Number of tries:  setting_ui_trOKOK setting_ui_tr@>F5=B Percentage setting_ui_tr@54?>GB5=8O Preferences setting_ui_tr*06<8B5 =>2K5 :;028H8Press new keys setting_ui_tr KE>4Quit setting_ui_tr ><5@ ?>@B0 RPC:RPC port number:  setting_ui_trN0?CA:0BL Persepolis ?@8 AB0@B5 A8AB5<KRun Persepolis at startup setting_ui_tr !>G5B0=85 :;028HShortcut setting_ui_tr !>G5B0=8O :;028H Shortcuts setting_ui_trh>:07K20BL 480;>3>2>5 >:=> ?>A;5 7025@H5=8O 703@C7:87Show download complete dialog when download is finished setting_ui_tr  07<5@Size setting_ui_tr 07<5@:Size:  setting_ui_tr !B0BCAStatus setting_ui_tr !B8;L:Style:  setting_ui_tr,"09<-0CB (2 A5:C=40E):Timeout (seconds):  setting_ui_trN 07<5@ 7=0G:>2 =0 ?0=5;8 8=AB@C<5=B>2: Toolbar icons size:  setting_ui_tr,0@0<5B@K Video FinderVideo Finder Options setting_ui_tr@><:>ABL:Volume:  setting_ui_tr&>1028BL 2 >G5@54L:Add to queue:  text_ui_trB<5=8BLCancel text_ui_tr67<5=8BL ?0?:C 4;O 703@C7:8Change Download Folder text_ui_tr*B<5=8BL 2K45;8BL 2A5 Deselect All text_ui_tr$0@0<5B@K 703@C7:8Download Options text_ui_trIP: IP: text_ui_tr !AK;:8Links text_ui_tr.>;8G5AB2> ?>4:;NG5=89:Number of connections: text_ui_trOKOK text_ui_tr85=5465@ 703@C7>: PersepolisPersepolis Download Manager text_ui_tr >@B:Port: text_ui_tr @>:A8Proxy text_ui_trK1@0BL 2A5 Select All text_ui_tr:<b>!>AB>O=85 0C48>D09;0: </b>Audio file status: video_finder_progress_ui_trL<b>!>AB>O=85 <C;LB8?;5:A8@>20=8O: </b>Muxing status: video_finder_progress_ui_tr:<b>!>AB>O=85 2845>D09;0: </b>Video file status: video_finder_progress_ui_tr* 0AH8@5==K5 ?0@0<5B@KAdvanced optionsytaddlink_src_ui_tr$>@<0B 0C48>: Audio format:ytaddlink_src_ui_tr$K1>@ <5480-A?8A:0Fetch Media Listytaddlink_src_ui_trJ>;CG5=85 8=D>@<0F88 > <C;LB8<5480...Fetching Media Info...ytaddlink_src_ui_trF2548B5 :>@@5:B=CN AAK;:C 4;O 2845>Please enter a valid video linkytaddlink_src_ui_trK15@8B5 D>@<0BSelect a formatytaddlink_src_ui_trVideo Finder Video Finderytaddlink_src_ui_tr$>@<0B 2845>: Video format:ytaddlink_src_ui_tr ) , persepolisdm-persepolis-867ee76/resources/locales/ui_ru.ts000066400000000000000000002546501464161131600241260ustar00rootroot00000000000000 about_ui_tr About Persepolis О Persepolis Persepolis Download Manager Менеджер загрузок Persepolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Разработчики Translators Переводчики License Лицензия OK OK Special thanks to: Особая благодарность: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: Благодарность: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.2.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: Добавить в категорию: Proxy Прокси IP: IP: Port: Порт: Change Download Folder Изменить папку для загрузки Download Folder: Папка для загрузки: Cancel Отменить OK OK Link Ссылка More Options Больше параметров Advanced Options Расширенные параметры Referrer: Referrer: Header: Заголовок: Load cookies: Загрузить cookies: User agent: Пользовательский агент: Add Download Link Добавить ссылку для скачивания Download link: Ссылка для скачивания: Change file name: Изменить имя файла: Detect System Proxy Settings Определить настройки системного прокси Proxy password: Пароль прокси: Proxy username: Download username and password Download username: Download password: Remember this path Запомнить этот путь Start time Время начала End time Время окончания Limit speed Ограничить скорость Number of connections: Количество подключений: Download Later Загрузить позже HTTP HTTP HTTPS HTTPS SOCKS5 SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Имя файла</b>: <b>Size</b>: <b>Размер</b>: after_download_ui_tr Persepolis Download Manager Менеджер загрузок Persepolis Open File Открыть файл Open Download Folder Открыть папку загрузки OK OK Don't show this message again. Не показывать это сообщение снова. <b>Download Completed!</b> <b>Загрузка завершена!</b> <b>Save as</b>: <b>Сохранить как</b>: <b>Link</b>: <b>Ссылка</b>: log_window_ui_tr Persepolis Log Журнал Persepolis Report Issue Сообщить о проблеме Close Закрыть Copy Selected to Clipboard Скопировать выделенное в буфер обмена Refresh Log Messages Обновить сообщения журнала Clear Log Messages Очистить сообщения журнала mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Очередь остановлена! Persepolis is shutting down Persepolis выключается your system in 20 seconds ваша система через 20 секунд Queue completed! Очередь завершена! Show main Window Показать главное окно Please Wait... Пожалуйста подождите Ready... Готово... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 не ответил! Будьте терпелевы! Persepolis снова пытается через 2 секунды! Error... Ошибка... Persepolis can not connect to Aria2 Persepolis не может подключиться к Aria2 Check your network & Restart Persepolis Проверьте ваше подключение и перезапустите Persepolis Restart Persepolis Перезапустить Persepolis Reconnecting Aria2... Переподключение к Aria2... Persepolis reconnected aria2 successfully Persepolis успешно восстановил подключение к aria2 Error: Ошибка: <b>Link</b>: <b>Ссылка</b>: <b>Downloaded</b>: <b>Загружено</b>: <b>Transfer rate</b>: <b>Скорость передачи</b>: <b>Estimated time left</b>: <b>Ожидаемое время</b>: <b>Connections</b>: <b>Соединения</b>: <b>Status</b>: <b>Статус</b>: Download Stopped Загрузка остановлена Error - Ошибка - Download Complete Загрузка завершена <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Эта ссылка была добавлена раньше! Вы уверены, что хотите добавить её ещё раз?</center></b> Download Starts Загрузка началась Download Scheduled Загрузка запланирована Operation was not successful. Операция не была успешной. Please resume the following category: Пожалуйста, возобновите следующую категорию: Aria2 disconnected! Потеряна связь с Aria2! Persepolis is trying to connect!be patient! Persepolis пытается соединиться! Будьте терпеливы! Aria2 did not respond! Aria2 не ответил! Try again! Попробуйте снова! Aria2 did not respond Aria2 не ответил Try again Попробуйте снова Please stop the following category: Пожалуйста, остановите следующую категорию: Persepolis is trying to connect! be patient! Persepolis пытается соединиться! Будьте терпеливы! Please try again. Пожалуйста, попробуйте снова. Minimize to system tray Спрятать в системный трей Not Found Не найдено Operation was not successful! Операция не была успешной! Operation was not successful! Please stop the following category first: Операция не была успешной! Пожалуйста, остановите следующую категорию: Please stop the following download first: Сначала остановите следующую загрузку: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Эта операция удалит загруженные файлы с вашего жесткого диска<br>БЕЗВОЗВРАТНО!</center></b> <center>Do you want to continue?</center> <center>Вы хотите продолжить?</center> Please stop the following category first: Сначала остановите следующую категорию: </b>" already exists! </b>" уже существует! Send selected downloads to Отправить выбранные загрузки в Send to Отправить Sort by Сортировать по <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Эта операция удалит все элементы загрузки в этой очереди<br>из списка «Все загрузки»!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Извините! Вы не можете удалить очередь по умолчанию!</b> Some items didn't transferred successfully! Некоторые элементы не были успешно перенесены! Please stop download progress first. Сначала остановите следующую загрузку. Hide options Скрыть параметры Show options Показать параметры Stop all downloads first! Сначала остановите все загрузки! Moving is Перемещение finished! завершено! Download is in progress by video finder! Выполняется загрузка с помощью средства поиска видео! be patient! подождите! Stop the following download first: Сначала остановите следующую загрузку: ffmpeg is not installed! ffmpeg не установлен! Not enough free space in: Недостаточно свободного места в: muxing error ошибка мультиплексирования an error occurred Please update Persepolis. Пожалуйста, обновите Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! yt-dlp не установлен! mainwindow_ui_tr File Файл Edit Редактировать View Вид Download Скачать Queue Очередь Video Finder Video Finder Help Помощь Sort by Сортировать по Persepolis Download Manager Менеджер загрузок Persepolis Category Категории File Name Имя файла Status Статус Size Размер Downloaded Загружено Percentage Процент Connections Соединений Link Ссылка &File &Файл &Edit &Редактировать &View &Вид &Download &Загрузка &Queue &Очередь &Help &Помощь Show/Hide system tray icon Показать / спрятать значок в системном трее Add New Download Link Добавить новую ссылку для скачивания Resume Download Возобновить загрузку Pause Download Пауза загрузки Stop Download Остановить загрузку Stop/Cancel Download Остановить/Отменить загрузку Properties Свойства Progress Прогресс Exit Выход Clear all items in download list Очистить все элементы в списке закачки Create new download queue Создать новую очередь закачек Remove this queue Удалить эту очередь Start this queue Запустить эту очередь Stop this queue Остановить эту очередь Move currently selected items up by one row Переместить выбранные элементы вверх на одну строку Move currently selected items down by one row Переместить выбранные элементы вниз на одну строку Preferences Предпочтения About О программе Report an issue Сообщить о ошибке Start Time Время начала End Time Время окончания Download bottom of the list first Сначала загрузите нижнюю часть списка Limit Speed Ограничить скорость Apply Принять After download После загрузки Shut Down Выключить V&ideo Finder V&ideo Finder <b>Video file status: </b> <b>Состояние видеофайла: </b> <b>Audio file status: </b> <b>Состояние аудиофайла: </b> <b>Status: </b> <b>Состояние: </b> <b>Muxing status: </b> <b>Состояние мультиплексирования: </b> downloaded загружено Active Активно Not Active Не активно Started Запущено Error Ошибка Complete Завершено Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Очистить список загрузок Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Сообщить о проблеме Show Log File Показать файл журнала Hide Options Скрыть параметры Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! Aria2 отключен! Persepolis is trying to connect! be patient! Persepolis пытается подключиться! Будьте терпеливы! Aria2 did not respond! Aria2 не ответил! Please try again. Пожалуйста повторите заново. Try again! Повторите заново! progress_ui_tr Persepolis Download Manager Менеджер загрузок Persepolis Status: Статус: Downloaded: Закачено: Transfer rate: Скорость передачи: Estimated time left: Ожидаемое время: Number of connections: Количество соединений: Download Information Информация о закачке After download После закачки Apply Принять Shut Down Выключить Download Options Параметры загрузки Resume Продолжить Pause Пауза Stop Остановить Link: Ссылка: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Пожалуйста, перезапустите Persepolis!</center></b><br><center>Некоторые изменения вступят в силу после перезапуска Persepolis</center> Restart Persepolis! Перезапустить Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Это сочетание уже используется! Выберите другое!</center></b> setting_ui_tr Preferences Предпочтения <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Задайте количество попыток, если загрузка не удалась.</p></body></html> Number of tries: Количество попыток: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Установите количество секунд ожидания между попытками. Менеджер закачек будет повторять закачки, когда HTTP-сервер возвращает ответ 503.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Установите тайм-аут в секундах. </p></body></html> Timeout (seconds): Тайм-аут (в секундах): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Использование нескольких соединений может помочь ускорить загрузку.</p></body></html> Number of connections: Количество соединений: RPC port number: Номер порта RPC: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Укажите номер порта для JSON-RPC / XML-RPC-сервера. Возможные значения: 1024 - 65535 По умолчанию: 6801 </p></body></html> Change Aria2 default path Изменить путь по умолчанию для Aria2 Change Изменить Download Options Параметры загрузки Volume: Громкость: Notifications Уведомления Style: Стиль: Color scheme: Цветовая схема: Icons: Иконки: Notification type: Тип уведомлений: Font: Шрифт: Size: Размер: Run Persepolis at startup Запускать Persepolis при старте системы Keep system awake! Не позволять системе перейти в ждущий режим <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Формат HH:MM</p></body></html> File Name Имя файла Status Статус Size Размер Downloaded Загружено Percentage Процент Connections Соединения Category Категории Video Finder Options Параметры Video Finder Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Максимальное количество ссылок для захвата:<br/><small>(Если браузер одновременно отправит несколько ссылок на видео)</small> Defaults Значения по умолчанию Cancel Отменить OK OK Press new keys Нажмите новые клавиши Action Действие Shortcut Сочетание клавиш Shortcuts Сочетания клавиш Quit Выход Hide main window if close button clicked. Скрывать главное окно, если нажата клавиша закрытия. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Эта функция может не работать в вашей операционной системе.</p></body></html> Language: Язык: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Включить звуки уведомлений Toolbar icons size: Размер значков на панели инструментов: If browser is opened, start Persepolis in system tray Если браузер открыт, запустить Persepolis на панели задач Enable system tray icon Включить значок на панели задач Show download complete dialog when download is finished Показывать диалоговое окно после завершения загрузки Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> text_ui_tr Persepolis Download Manager Менеджер загрузок Persepolis Links Ссылки Select All Выбрать все Deselect All Отменить выделить все Add to queue: Добавить в очередь: Proxy Прокси IP: IP: Port: Порт: Change Download Folder Изменить папку для загрузки OK OK Cancel Отменить Download Options Параметры загрузки Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: Количество подключений: video_finder_progress_ui_tr <b>Video file status: </b> <b>Состояние видеофайла: </b> <b>Audio file status: </b> <b>Состояние аудиофайла: </b> <b>Muxing status: </b> <b>Состояние мультиплексирования: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Video Finder Fetch Media List Выбор медиа-списка Select a format Выберите формат Please enter a valid video link Введите корректную ссылку для видео Fetching Media Info... Получение информации о мультимедиа... Video format: Формат видео: Audio format: Формат аудио: Advanced options Расширенные параметры persepolisdm-persepolis-867ee76/resources/locales/ui_sv.qm000066400000000000000000000472561464161131600241210ustar00rootroot00000000000000c#YpA"=+6 B,7 Q< 1^ y*:`,<KF:KF>+_I57(U% N#%쑀tGII=IC+=nm^$IW? a(0#1T.1T>_. _`M5;B X 5mBAwGk<=BM?$h]1xDZ'xDZ9+K ֣2A*L1.*3u36` $6R AN W2 ^2 mp& }Qw ~)S F0 U U1 U@ OE g$p ) _ U _+ if& if4 s> `<3 YpAd (Bu Fm ,!%f Uq&Z `r`?q f(6 gn'x v z  {Ǝ" w,7 w9t D . =  F 7 55 (3f 2SS e.4W e.; st5 q qI e! N $ : @  1 A# ?  c" C/# \e.J q B+ B o B1> B;: BD  i").d07I_"xB0NJ #6UE91 228& C\6?r!$]>!]>8}p  V?:D[V[$q$q7$E.{=iH&<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trOm PersepolisAbout Persepolis about_ui_trUtvecklare Developers about_ui_trUtvecklare: Developers: about_ui_tr LicensLicense about_ui_trOKOK about_ui_trBNerladdningshanteraren PersepolisPersepolis Download Manager about_ui_tr(Speciellt tack till:Special thanks to: about_ui_trversttare Translators about_ui_tr*Lgg till i kategori:Add to category:  addlink_ui_tr*Avancerade alternativAdvanced Options addlink_ui_tr AvbrytCancel addlink_ui_tr,ndra nerladdningsmappChange Download Folder addlink_ui_tr"Nerladdningsmapp:Download Folder:  addlink_ui_tr Huvud:Header:  addlink_ui_trIP:IP:  addlink_ui_trLnkLink addlink_ui_trLadda kakor:Load cookies:  addlink_ui_trFler alternativ More Options addlink_ui_trOKOK addlink_ui_tr Port:Port: addlink_ui_tr ProxyProxy addlink_ui_trRefererare: Referrer:  addlink_ui_trAnvndaragent: User agent:  addlink_ui_tr<b>Filnamn</b>:File name: after_download_src_ui_tr<b>Storlek</b>: Size: after_download_src_ui_trOK OK after_download_ui_trppna fil Open File after_download_ui_tr8<b>Nerladdning slutfrd!</b>Download Completed!after_download_ui_tr<b>Lnk</b>: Link: after_download_ui_tr"<b>Spara som</b>:Save as: after_download_ui_trFVisa inte det hr meddelandet igen.Don't show this message again.after_download_ui_tr,ppna nerladdningsmappOpen Download Folderafter_download_ui_trBNerladdningshanteraren PersepolisPersepolis Download Managerafter_download_ui_tr&Logg fr PersepolisPersepolis Loglog_window_ui_trRapportera fel Report Issuelog_window_ui_tr$</b>" finns redan!" already exists!mainwindow_src_ui_tr(<b>Anslutningar</b>:Connections: mainwindow_src_ui_tr$<b>Nerladdade</b>:Downloaded: mainwindow_src_ui_trB<b>Berknad tid som terstr</b>:Estimated time left: mainwindow_src_ui_tr<b>Lnk</b>: Link: mainwindow_src_ui_tr`<b>Ledsen! Du kan inte ta bort standard-kn!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Status</b>:Status: mainwindow_src_ui_tr8<b>verfringshastighet</b>:Transfer rate: mainwindow_src_ui_trF<center>Vill du fortstta?</center>)
Do you want to continue?
mainwindow_src_ui_tr$Aria2 svarade inteAria2 did not respondmainwindow_src_ui_tr&Aria2 svarade inte!Aria2 did not respond!mainwindow_src_ui_trAria2 svarade inte! var lugn! Persepolis frsker igen om 2 sekunder!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr(Aria2 kopplades ner!Aria2 disconnected!mainwindow_src_ui_tr^Kontrollera ditt ntverk & starta om Persepolis'Check your network & Restart Persepolismainwindow_src_ui_tr(Nerladdningen frdigDownload Completemainwindow_src_ui_tr(Nerladdning pbrjasDownload Startsmainwindow_src_ui_tr,Nerladdningen stannadeDownload Stoppedmainwindow_src_ui_tr Fel -Error - mainwindow_src_ui_tr Fel...Error...mainwindow_src_ui_trFel:Error: mainwindow_src_ui_trGm alternativ Hide optionsmainwindow_src_ui_tr8Minimera till aktivitetsfltMinimize to system traymainwindow_src_ui_trFlytten r Moving ismainwindow_src_ui_trHittades inte Not Foundmainwindow_src_ui_tr`Det finns inte tillrckligt med fritt utrymme i:Not enough free space in:mainwindow_src_ui_tr.tgrden lyckades inte!Operation was not successful!mainwindow_src_ui_trOperationen lyckades inte! Vnligen stoppa den fljande kategorin frst:HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr4Operationen lyckades inte.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_trLPersepolis kan inte ansluta till Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr*Persepolis stngs nerPersepolis is shutting downmainwindow_src_ui_trPPersepolis frsker ansluta! ha tlamod!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trVPersepolis frsker att ansluta!ha tlamod!+Persepolis is trying to connect!be patient!mainwindow_src_ui_trRPersepolis lyckades teransluta med aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr"Vnligen vnta...Please Wait...mainwindow_src_ui_trbVnligen ndra den tillflliga nerladdningsmappen+Please change the temporary download foldermainwindow_src_ui_trTVnligen teruppta den fljande kategorin:&Please resume the following category: mainwindow_src_ui_trXVnligen stoppa nerladdningsprocessen frst.$Please stop download progress first.mainwindow_src_ui_trZVnligen stoppa den fljande kategorin frst:*Please stop the following category first: mainwindow_src_ui_trNVnligen stoppa den fljande kategorin:$Please stop the following category: mainwindow_src_ui_trbVnligen stoppa den fljande nerladdningen frst:*Please stop the following download first: mainwindow_src_ui_tr*Vnligen frsk igen.Please try again.mainwindow_src_ui_trKn stannade!Queue Stopped!mainwindow_src_ui_trKn slutfrdes!Queue completed!mainwindow_src_ui_trKlar...Ready...mainwindow_src_ui_tr*teransluter Aria2...Reconnecting Aria2...mainwindow_src_ui_tr(Starta om PersepolisRestart Persepolismainwindow_src_ui_tr>Skicka valda nerladdningar tillSend selected downloads tomainwindow_src_ui_trSkicka tillSend tomainwindow_src_ui_tr$Visa huvudfnstretShow main Windowmainwindow_src_ui_trVisa alternativ Show optionsmainwindow_src_ui_trVverfringen av ngra objekt lyckades inte!+Some items didn't transferred successfully!mainwindow_src_ui_trSortera efterSort bymainwindow_src_ui_tr@Stoppa alla nerladdningar frst!Stop all downloads first!mainwindow_src_ui_trPStoppa den fljande nerladdningen frst:#Stop the following download first: mainwindow_src_ui_trFrsk igen Try againmainwindow_src_ui_trFrsk igen! Try again!mainwindow_src_ui_trha tlamod! be patient!mainwindow_src_ui_tr6ffmpeg r inte installerad!ffmpeg is not installed!mainwindow_src_ui_tr klar! finished!mainwindow_src_ui_trmuxningsfel muxing errormainwindow_src_ui_tr4ditt system p 20 sekunderyour system in 20 secondsmainwindow_src_ui_tr>youtube-dl r inte installerad!youtube-dl is not installed!mainwindow_src_ui_tr&Ladda ner &Downloadmainwindow_ui_tr&Redigera&Editmainwindow_ui_tr &Arkiv&Filemainwindow_ui_tr &Hjlp&Helpmainwindow_ui_tr&K&Queuemainwindow_ui_tr &Visa&Viewmainwindow_ui_trOmAboutmainwindow_ui_tr4Lgg till nerladdningslnkAdd New Download Linkmainwindow_ui_tr"Efter nerladdningAfter downloadmainwindow_ui_trVerkstllApplymainwindow_ui_trKategoriCategorymainwindow_ui_tr2Sk efter en nyare utgvaCheck for newer releasemainwindow_ui_trJRensa alla objekt i nerladdninslistan Clear all items in download listmainwindow_ui_trAnslutningar Connectionsmainwindow_ui_tr.Skapa ny nerladdningskCreate new download queuemainwindow_ui_trLadda nerDownloadmainwindow_ui_trNerladdade Downloadedmainwindow_ui_trRedigeraEditmainwindow_ui_trAvslutaExitmainwindow_ui_tr ArkivFilemainwindow_ui_trFilnamn File Namemainwindow_ui_tr HjlpHelpmainwindow_ui_trLnkLinkmainwindow_ui_trMenyMenumainwindow_ui_tr"Pausa nerladdningPause Downloadmainwindow_ui_trProcent Percentagemainwindow_ui_trBNerladdningshanteraren PersepolisPersepolis Download Managermainwindow_ui_trEgenskaper Preferencesmainwindow_ui_trFramgngProgressmainwindow_ui_trEgenskaper Propertiesmainwindow_ui_trKQueuemainwindow_ui_tr&Ta bort den hr knRemove this queuemainwindow_ui_tr$Rapportera ett felReport an issuemainwindow_ui_tr*teruppta nerladdningResume Downloadmainwindow_ui_trTVisa/Gm ikonen i systemets aktivitetsfltShow/Hide system tray iconmainwindow_ui_trStng ner Shut Downmainwindow_ui_trStorlekSizemainwindow_ui_trSortera efterSort bymainwindow_ui_tr$Starta den hr knStart this queuemainwindow_ui_tr StatusStatusmainwindow_ui_tr$Stoppa nerladdning Stop Downloadmainwindow_ui_tr$Stoppa den hr knStop this queuemainwindow_ui_tr2Stoppa/Avbryt nerladdningStop/Cancel Downloadmainwindow_ui_trVerktygsfltToolbarmainwindow_ui_trV&ideoskare V&ideo Findermainwindow_ui_trVideoskare Video Findermainwindow_ui_trVisaViewmainwindow_ui_tr&Aria2 svarade inte!Aria2 did not respond!progress_src_ui_trPPersepolis frsker ansluta! ha tlamod!,Persepolis is trying to connect! be patient!progress_src_ui_tr*Vnligen frsk igen.Please try again.progress_src_ui_trFrsk igen! Try again!progress_src_ui_tr"Efter nerladdningAfter downloadprogress_ui_trVerkstllApplyprogress_ui_tr,NerladdningsalternativDownload Optionsprogress_ui_trNerladdade: Downloaded:progress_ui_tr*Antalet anslutningar:Number of connections: progress_ui_tr PausaPauseprogress_ui_trBNerladdningshanteraren PersepolisPersepolis Download Managerprogress_ui_trterupptaResumeprogress_ui_trStng ner Shut Downprogress_ui_trStatus:Status: progress_ui_tr StoppStopprogress_ui_tr*Starta om Persepolis!Restart Persepolis!setting_src_ui_tr AvbrytCancel setting_ui_trKategoriCategory setting_ui_tr ndraChange setting_ui_trFrgschema:Color scheme:  setting_ui_trAnslutningar Connections setting_ui_tr,NerladdningsalternativDownload Options setting_ui_trNerladdat Downloaded setting_ui_trFilnamn File Name setting_ui_trTypsnitt:Font:  setting_ui_trIkoner:Icons:  setting_ui_tr"Typ av avisering:Notification type:  setting_ui_trAviseringar Notifications setting_ui_tr*Antalet anslutningar:Number of connections:  setting_ui_trAntalet frsk:Number of tries:  setting_ui_trOKOK setting_ui_trProcent Percentage setting_ui_trEgenskaper Preferences setting_ui_tr6Kr Persepolis vid uppstartRun Persepolis at startup setting_ui_trStorlekSize setting_ui_trStorlek:Size:  setting_ui_tr StatusStatus setting_ui_tr Stil:Style:  setting_ui_tr Volym:Volume:  setting_ui_tr Lgg till i kn:Add to queue:  text_ui_tr AvbrytCancel text_ui_trAvmarkera alla Deselect All text_ui_trIP:IP: text_ui_tr LnkarLinks text_ui_trOKOK text_ui_trBNerladdningshanteraren PersepolisPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProxyProxy text_ui_trMarkera alla Select All text_ui_tr6Sk efter en ny uppdateringCheck for new updateupdate_src_ui_tr8Sker efter en nyare versionChecking for newer versionupdate_src_ui_trKontrollerar... Checking...update_src_ui_trFSenaste versionen r installerad :)Latest version is installed :)update_src_ui_tr6Du anvnder en beta-versionYou are using beta versionupdate_src_ui_tr(Hmtar media-info...Fetching Media Info...ytaddlink_src_ui_trVlj ett formatSelect a formatytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_sv.ts000066400000000000000000002326031464161131600241220ustar00rootroot00000000000000 about_ui_tr About Persepolis Om Persepolis Persepolis Download Manager Nerladdningshanteraren Persepolis <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers: Utvecklare: Developers Utvecklare Translators Översättare License Licens OK OK Special thanks to: Speciellt tack till: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi MohammadAmin Vahedinia Jafar Akhondali H.Rostami Ehsan Titish TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Version 4.0.0 addlink_ui_tr Add to category: Lägg till i kategori: Proxy Proxy IP: IP: Port: Port: Change Download Folder Ändra nerladdningsmapp Download Folder: Nerladdningsmapp: Cancel Avbryt OK OK Link Länk More Options Fler alternativ Advanced Options Avancerade alternativ Referrer: Refererare: Header: Huvud: Load cookies: Ladda kakor: User agent: Användaragent: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later after_download_src_ui_tr <b>File name</b>: <b>Filnamn</b>: <b>Size</b>: <b>Storlek</b>: after_download_ui_tr Persepolis Download Manager Nerladdningshanteraren Persepolis Open File Öppna fil Open Download Folder Öppna nerladdningsmapp OK OK Don't show this message again. Visa inte det här meddelandet igen. <b>Download Completed!</b> <b>Nerladdning slutförd!</b> <b>Save as</b>: <b>Spara som</b>: <b>Link</b>: <b>Länk</b>: log_window_ui_tr Persepolis Log Logg för Persepolis Report Issue Rapportera fel Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Kön stannade! Persepolis is shutting down Persepolis stängs ner your system in 20 seconds ditt system på 20 sekunder Queue completed! Kön slutfördes! Show main Window Visa huvudfönstret Please Wait... Vänligen vänta... Ready... Klar... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 svarade inte! var lugn! Persepolis försöker igen om 2 sekunder! Error... Fel... Persepolis can not connect to Aria2 Persepolis kan inte ansluta till Aria2 Check your network & Restart Persepolis Kontrollera ditt nätverk & starta om Persepolis Restart Persepolis Starta om Persepolis Reconnecting Aria2... Återansluter Aria2... Persepolis reconnected aria2 successfully Persepolis lyckades återansluta med aria2 Error: Fel: Please change the temporary download folder Vänligen ändra den tillfälliga nerladdningsmappen <b>Link</b>: <b>Länk</b>: <b>Downloaded</b>: <b>Nerladdade</b>: <b>Transfer rate</b>: <b>Överföringshastighet</b>: <b>Estimated time left</b>: <b>Beräknad tid som återstår</b>: <b>Connections</b>: <b>Anslutningar</b>: <b>Status</b>: <b>Status</b>: Download Stopped Nerladdningen stannade Error - Fel - Download Complete Nerladdningen färdig <b><center>This link has been added before! Are you sure you want to add it again?</center></b> Download Starts Nerladdning påbörjas Download Scheduled Operation was not successful. Operationen lyckades inte. Please resume the following category: Vänligen återuppta den följande kategorin: Aria2 disconnected! Aria2 kopplades ner! Persepolis is trying to connect!be patient! Persepolis försöker att ansluta!ha tålamod! Aria2 did not respond! Aria2 svarade inte! Try again! Försök igen! Aria2 did not respond Aria2 svarade inte Try again Försök igen Please stop the following category: Vänligen stoppa den följande kategorin: Persepolis is trying to connect! be patient! Persepolis försöker ansluta! ha tålamod! Please try again. Vänligen försök igen. Minimize to system tray Minimera till aktivitetsfält Not Found Hittades inte Operation was not successful! Åtgärden lyckades inte! Operation was not successful! Please stop the following category first: Operationen lyckades inte! Vänligen stoppa den följande kategorin först: Please stop the following download first: Vänligen stoppa den följande nerladdningen först: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <center>Do you want to continue?</center> <center>Vill du fortsätta?</center> Please stop the following category first: Vänligen stoppa den följande kategorin först: </b>" already exists! </b>" finns redan! Send selected downloads to Skicka valda nerladdningar till Send to Skicka till Sort by Sortera efter <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Ledsen! Du kan inte ta bort standard-kön!</b> Some items didn't transferred successfully! Överföringen av några objekt lyckades inte! Please stop download progress first. Vänligen stoppa nerladdningsprocessen först. Hide options Göm alternativ Show options Visa alternativ Stop all downloads first! Stoppa alla nerladdningar först! Moving is Flytten är finished! klar! Download is in progress by video finder! be patient! ha tålamod! Stop the following download first: Stoppa den följande nerladdningen först: youtube-dl is not installed! youtube-dl är inte installerad! ffmpeg is not installed! ffmpeg är inte installerad! Not enough free space in: Det finns inte tillräckligt med fritt utrymme i: muxing error muxningsfel an error occurred mainwindow_ui_tr File Arkiv Edit Redigera View Visa Download Ladda ner Queue Video Finder Videosökare Help Hjälp Sort by Sortera efter Persepolis Download Manager Nerladdningshanteraren Persepolis Category Kategori File Name Filnamn Status Status Size Storlek Downloaded Nerladdade Percentage Procent Connections Anslutningar Link Länk &File &Arkiv &Edit &Redigera &View &Visa &Download &Ladda ner &Queue &Kö &Help &Hjälp Menu Meny Toolbar Verktygsfält Show/Hide system tray icon Visa/Göm ikonen i systemets aktivitetsfält Add New Download Link Lägg till nerladdningslänk Resume Download Återuppta nerladdning Pause Download Pausa nerladdning Stop Download Stoppa nerladdning Stop/Cancel Download Stoppa/Avbryt nerladdning Properties Egenskaper Progress Framgång Exit Avsluta Clear all items in download list Rensa alla objekt i nerladdninslistan Create new download queue Skapa ny nerladdningskö Remove this queue Ta bort den här kön Start this queue Starta den här kön Stop this queue Stoppa den här kön Move currently selected items up by one row Move currently selected items down by one row Preferences Egenskaper About Om Report an issue Rapportera ett fel Check for newer release Sök efter en nyare utgåva Start Time End Time Download bottom of the list first Limit Speed Apply Verkställ After download Efter nerladdning Shut Down Stäng ner V&ideo Finder V&ideosökare <b>Video file status: </b> <b>Audio file status: </b> <b>Status: </b> <b>Muxing status: </b> downloaded Active Not Active Started Error Complete Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Check for Newer Version Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Persepolis is trying to connect! be patient! Persepolis försöker ansluta! ha tålamod! Aria2 did not respond! Aria2 svarade inte! Please try again. Vänligen försök igen. Try again! Försök igen! progress_ui_tr Persepolis Download Manager Nerladdningshanteraren Persepolis Status: Status: Downloaded: Nerladdade: Transfer rate: Estimated time left: Number of connections: Antalet anslutningar: Download Information After download Efter nerladdning Apply Verkställ Shut Down Stäng ner Download Options Nerladdningsalternativ Resume Återuppta Pause Pausa Stop Stopp Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> Restart Persepolis! Starta om Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> setting_ui_tr Preferences Egenskaper <html><head/><body><p>Set number of tries if download failed.</p></body></html> Number of tries: Antalet försök: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> Timeout (seconds): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> Number of connections: Antalet anslutningar: RPC port number: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> Change Aria2 default path Change Ändra Download Options Nerladdningsalternativ Volume: Volym: Notifications Aviseringar Style: Stil: Color scheme: Färgschema: Icons: Ikoner: Notification type: Typ av avisering: Font: Typsnitt: Size: Storlek: Run Persepolis at startup Kör Persepolis vid uppstart Keep system awake! <html><head/><body><p>Format HH:MM</p></body></html> File Name Filnamn Status Status Size Storlek Downloaded Nerladdat Percentage Procent Connections Anslutningar Category Kategori Video Finder Options Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Defaults Cancel Avbryt OK OK Press new keys Action Shortcut Shortcuts Quit Hide main window if close button clicked. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Temporary download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization text_ui_tr Persepolis Download Manager Nerladdningshanteraren Persepolis Links Länkar Select All Markera alla Deselect All Avmarkera alla Add to queue: Lägg till i kön: Proxy Proxy IP: IP: Port: Port: Change Download Folder OK OK Cancel Avbryt Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: update_src_ui_tr Checking for newer version Söker efter en nyare version The newest is the best, we recommend to update Persepolis. Check for new update Sök efter en ny uppdatering Checking... Kontrollerar... A newer Persepolis release is available Latest version is installed :) Senaste versionen är installerad :) You are using beta version Du använder en beta-version This is Persepolis Download Manager version 4.0.0 An error occurred while checking for updates. video_finder_progress_ui_tr <b>Video file status: </b> <b>Audio file status: </b> <b>Muxing status: </b> ytaddlink_src_ui_tr Video Finder Fetch Media List Select a format Välj ett format Please enter a valid video link Fetching Media Info... Hämtar media-info... Video format: Audio format: Advanced options persepolisdm-persepolis-867ee76/resources/locales/ui_tr.qm000066400000000000000000000674671464161131600241240ustar00rootroot00000000000000`F@+G,*/7*%/q*0/+0G1Hw93+Hw9ChLb6S#a\VEOWiz.Wizb5W_WbcX; ­4@hf5ib|i\pQJf2DS cIQ u 57Au 5W;c#_pA''/ ` ,$S nN QJH 1^ *DJ<KFCKFV_I?[!W-Y% W#*'쑀$]I3\We6dz^Tz219otfZIITI`SU!m^ I"WWxe a-T.0(1T51TV_. #_`#i<1.v5E^n>0>cPX >^9Zd o7weQ-B0R-Bb9N1~9Nc<=_G(43M?$b]1xDZ,xDZBdK "C](X)*D֣;?.152 *<u<6`kq- +@ > $? AN L W; ^; `= g_ mp+ }Q[ ~.O C F0 U U: U[ O  g) ^M L "ZW8 _ p _2f if+ if= s> `Fn Yp]H > (^ ,!* Fq Uq+^ `r`Zl gn,l nS v z  {Ǝ' w2 wC b Va 4v V 9 783 @ 5>C (&]>BdiT]{}p ?g VX[[&[$q$q@?FP.#Y{UigF<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr&Persepolis Hakk1ndaAbout Persepolis about_ui_trGeli_tiriciler Developers about_ui_tr LisansLicense about_ui_tr TamamOK about_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Manager about_ui_tr4zel Te_ekkr hakedenler:Special thanks to: about_ui_trevirmenler Translators about_ui_tr"Kategoriye ekle: Add to category:  addlink_ui_tr&Geli_mi_ SeeneklerAdvanced Options addlink_ui_tr VazgeCancel addlink_ui_tr20ndirme Dizinini Dei_tirChange Download Folder addlink_ui_tr 0ndirme Dizini: Download Folder:  addlink_ui_trBa_l1k: Header:  addlink_ui_trIP: IP:  addlink_ui_trBalant1Link addlink_ui_tr"erezleri ykle: Load cookies:  addlink_ui_tr$Daha Fazla Seenek More Options addlink_ui_tr TamamOK addlink_ui_tr Port:Port: addlink_ui_tr ProksiProxy addlink_ui_trneren:  Referrer:  addlink_ui_tr&Kullan1c1 arac1s1:  User agent:  addlink_ui_tr$<b>Dosya ad1</b>: File name: after_download_src_ui_tr<b>Boyut</b>:  Size: after_download_src_ui_tr Tamam  OK after_download_ui_tr Dosya A  Open File after_download_ui_tr4<b>0ndirme Tamamland1!</b>Download Completed!after_download_ui_tr"<b>Balant1</b>:  Link: after_download_ui_tr,<b>Farkl1 kaydet</b>: Save as: after_download_ui_tr4Bu mesaj1 tekrar gsterme.Don't show this message again.after_download_ui_tr&0ndirme Dizinini AOpen Download Folderafter_download_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managerafter_download_ui_tr$Persepolis GnlPersepolis Loglog_window_ui_trSorun Raporla Report Issuelog_window_ui_tr </b>" zaten var!" already exists!mainwindow_src_ui_tr<b><center>Bu balant1 daha nce eklenmi_tir! Tekrar eklemek istediinizden emin misiniz?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Bu i_lem indirilen dosyalar1 sabit diskinizden siler<br>KALICI OLARAK!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Bu i_lem bu kuyruktaki tm indirme elerini kald1racak<br>"Tm 0ndirmeler" listesinden!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr(<b>Balant1lar</b>: Connections: mainwindow_src_ui_tr$<b>0ndirildi</b>: Downloaded: mainwindow_src_ui_tr6<b>Tahmini kalan sre</b>: Estimated time left: mainwindow_src_ui_tr"<b>Balant1</b>:  Link: mainwindow_src_ui_trf<b>zgnm! Varsay1lan kuyruu kald1ramazs1n1z!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Durum</b>: Status: mainwindow_src_ui_tr.<b>Transfer oran1</b>: Transfer rate: mainwindow_src_ui_trZ<center>Devam etmek istiyor musunuz?</center>)
Do you want to continue?
mainwindow_src_ui_tr&Aria2 cevap vermediAria2 did not respondmainwindow_src_ui_tr(Aria2 yan1t vermedi!Aria2 did not respond!mainwindow_src_ui_trAria2 cevap vermedi! sab1rl1 olun! Persepolis 2 saniyede tekrar dener!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr2Aria2 balant1s1 kesildi!Aria2 disconnected!mainwindow_src_ui_trjA1n1z1 kontrol edin ve Persepolis'i yeniden ba_lat1n'Check your network & Restart Persepolismainwindow_src_ui_tr$0ndirme Tamamland1Download Completemainwindow_src_ui_tr"0ndirme Planland1Download Scheduledmainwindow_src_ui_tr0ndirme Ba_lad1Download Startsmainwindow_src_ui_tr$0ndrime DurdurulduDownload Stoppedmainwindow_src_ui_trhVideo bulucu taraf1ndan indirme i_lemi devam ediyor!(Download is in progress by video finder!mainwindow_src_ui_trHata - Error - mainwindow_src_ui_trHata...Error...mainwindow_src_ui_tr Hata: Error: mainwindow_src_ui_tr"Seenekleri gizle Hide optionsmainwindow_src_ui_tr.Sistem tepsisine kltMinimize to system traymainwindow_src_ui_tr Ta_1ma Moving ismainwindow_src_ui_trBulunamad1 Not Foundmainwindow_src_ui_tr<0inde yeterince bo_ alan yok:Not enough free space in:mainwindow_src_ui_tr.0_lem ba_ar1l1 deildi!Operation was not successful!mainwindow_src_ui_tr0_lem ba_ar1l1 deildi! Ltfen nce a_a1daki kategoriyi durdurun: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr.0_lem ba_ar1l1 deildi.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr@Persepolis Aria2'ye balanam1yor#Persepolis can not connect to Aria2mainwindow_src_ui_tr6Persepolis 20 saniye iindePersepolis is shutting downmainwindow_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr\Persepolis ba_ar1yla aria2 'yi yeniden balad1)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr$Ltfen Bekleyin...Please Wait...mainwindow_src_ui_trPLtfen a_a1daki kategoriye devam edin: &Please resume the following category: mainwindow_src_ui_trLLtfen nce indirme i_lemini durdurun.$Please stop download progress first.mainwindow_src_ui_trVLtfen nce a_a1daki kategoriyi durdurun: *Please stop the following category first: mainwindow_src_ui_trLLtfen a_a1daki kategoriyi durdurun: $Please stop the following category: mainwindow_src_ui_tr@Ltfen nce indirmeyi durdurun: *Please stop the following download first: mainwindow_src_ui_tr,Ltfen tekrar deneyin.Please try again.mainwindow_src_ui_tr$Kuyruk Durduruldu!Queue Stopped!mainwindow_src_ui_tr$Kuyruk tamamland1!Queue completed!mainwindow_src_ui_trHaz1r...Ready...mainwindow_src_ui_tr8Aria2'yi yeniden balama ...Reconnecting Aria2...mainwindow_src_ui_tr6Persepolis'i Yeniden ba_latRestart Persepolismainwindow_src_ui_tr8Seilen indirilenleri gnderSend selected downloads tomainwindow_src_ui_trGnderildiSend tomainwindow_src_ui_tr(Ana Pencereyi gsterShow main Windowmainwindow_src_ui_tr$Seenekleri gster Show optionsmainwindow_src_ui_trDBaz1 eler ba_ar1yla aktar1lmad1!+Some items didn't transferred successfully!mainwindow_src_ui_trGre s1ralaSort bymainwindow_src_ui_tr<nce tm indirmeleri durdurun!Stop all downloads first!mainwindow_src_ui_trDnce a_a1daki indirmeyi durdurun:#Stop the following download first: mainwindow_src_ui_trTekrar deneyin Try againmainwindow_src_ui_trTekrar deneyin! Try again!mainwindow_src_ui_trsab1rl1 olun! be patient!mainwindow_src_ui_tr(ffmpeg kurulu deil!ffmpeg is not installed!mainwindow_src_ui_tr bitti! finished!mainwindow_src_ui_trmuxing hatas1 muxing errormainwindow_src_ui_tr*sisteminizi kapat1yoryour system in 20 secondsmainwindow_src_ui_trindirildi downloadedmainwindow_ui_tr &0ndir &Downloadmainwindow_ui_tr&Dzenle&Editmainwindow_ui_tr &Dosya&Filemainwindow_ui_tr&Yard1m&Helpmainwindow_ui_tr&Kuyruk&Queuemainwindow_ui_tr&Grnm&Viewmainwindow_ui_tr6<b>Ses dosyas1 durumu: </b>Audio file status: mainwindow_ui_tr,<b>Muxing durumu: </b>Muxing status: mainwindow_ui_tr<b>Durum: </b>Status: mainwindow_ui_tr:<b>Video dosyas1 durumu: </b>Video file status: mainwindow_ui_trHakk1ndaAboutmainwindow_ui_tr EtkinActivemainwindow_ui_tr8Yeni 0ndirme Balant1s1 EkleAdd New Download Linkmainwindow_ui_tr 0ndirmeden sonraAfter downloadmainwindow_ui_tr UygulaApplymainwindow_ui_trKategoriCategorymainwindow_ui_trP0ndirme listesindeki tm eleri temizle Clear all items in download listmainwindow_ui_trTamamlanm1_Completemainwindow_ui_trBalant1lar Connectionsmainwindow_ui_tr8Yeni indirme kuyruu olu_turCreate new download queuemainwindow_ui_tr 0ndirDownloadmainwindow_ui_tr<0lk nce listenin alt1n1 indir"Download bottom of the list firstmainwindow_ui_tr0ndirildi Downloadedmainwindow_ui_trDzenleEditmainwindow_ui_trBiti_ Zaman1End Timemainwindow_ui_trHataErrormainwindow_ui_tr 1k1_Exitmainwindow_ui_tr DosyaFilemainwindow_ui_trDosya Ad1 File Namemainwindow_ui_tr Yard1mHelpmainwindow_ui_trH1z S1n1r1 Limit Speedmainwindow_ui_trBalant1Linkmainwindow_ui_trLSeilen eleri bir sat1r a_a1 kayd1r-Move currently selected items down by one rowmainwindow_ui_trNSeilen eleri bir sat1r yukar1 kayd1r+Move currently selected items up by one rowmainwindow_ui_trEtkin Deil Not Activemainwindow_ui_tr&0ndirmeyi DDuraklatPause Downloadmainwindow_ui_tr Yzde Percentagemainwindow_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managermainwindow_ui_trTercihler Preferencesmainwindow_ui_tr0lerlemeProgressmainwindow_ui_trzellikler Propertiesmainwindow_ui_tr KuyrukQueuemainwindow_ui_tr"Bu kuyruu kald1rRemove this queuemainwindow_ui_tr&Bir sorunu bildirinReport an issuemainwindow_ui_tr$0ndirmeye Devam etResume Downloadmainwindow_ui_trJSistem tepsisi simgesini Gster/GizleShow/Hide system tray iconmainwindow_ui_tr Kapat Shut Downmainwindow_ui_tr BoyutSizemainwindow_ui_trGre s1ralaSort bymainwindow_ui_trBa_lama Zaman1 Start Timemainwindow_ui_tr"Bu kuyruu ba_latStart this queuemainwindow_ui_trBa_lad1Startedmainwindow_ui_tr DurumStatusmainwindow_ui_tr 0ndirmeyi Durdur Stop Downloadmainwindow_ui_tr"Bu kuyruu durdurStop this queuemainwindow_ui_tr20ndirmeyi Durdur/0ptal etStop/Cancel Downloadmainwindow_ui_trV&ideo Bulucu V&ideo Findermainwindow_ui_trVideo Bulucu Video Findermainwindow_ui_trGrnmViewmainwindow_ui_tr(Aria2 yan1t vermedi!Aria2 did not respond!progress_src_ui_tr2Aria2 balant1s1 kesildi!Aria2 disconnected!progress_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!,Persepolis is trying to connect! be patient!progress_src_ui_tr,Ltfen tekrar deneyin.Please try again.progress_src_ui_trTekrar deneyin! Try again!progress_src_ui_tr 0ndirmeden sonraAfter downloadprogress_ui_tr UygulaApplyprogress_ui_tr0ndirme BilgisiDownload Informationprogress_ui_tr&0ndirme SeenekleriDownload Optionsprogress_ui_tr0ndirildi: Downloaded:progress_ui_tr&Tahmini kalan sre:Estimated time left:progress_ui_tr,Balant1lar1n Say1s1: Number of connections: progress_ui_trDuraklatPauseprogress_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managerprogress_ui_trDevam etResumeprogress_ui_tr Kapat Shut Downprogress_ui_trDurum: Status: progress_ui_tr DurdurStopprogress_ui_tr Transfer oran1: Transfer rate: progress_ui_tr,<b><center>Ltfen Persepolis'i Yeniden Ba_lat!</center></b><br><center>Baz1 dei_iklikler Persepolis'i yeniden ba_latt1ktan sonra etkili olur</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Bu k1sayol daha nce kullan1lm1_! Ba_ka bir tane kullan1n!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr8Persepolis'i Yeniden ba_lat!Restart Persepolis!setting_src_ui_tr\<html><head/><body><p> Dinlemek iin JSON-RPC/XML-RPC sunucusu iin bir balant1 noktas1 numaras1 belirtin. Muhtemel Deerler: 1024 - 65535 Varsay1lan: 6801</p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trf<html><head/><body><p>Biim SS:DD</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>0ndirme ba_ar1s1z olursa denemelerin say1s1n1 ayarla.</p></body></html>O

Set number of tries if download failed.

 setting_ui_trn<html><head/><body><p>Yeniden denemeler aras1nda beklemek iin saniye ayarlay1n. 0ndirme yneticisi, HTTP sunucusu bir 503 yan1t1 verdiinde indirmeyi yeniden dener.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Zaman a_1m1n1 saniye cinsinden ayarla. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Bu zellik i_letim sisteminizde al1_mayabilir.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Birden fazla balant1 kullanarak indirme i_leminizi h1zland1rabilirsiniz.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr EylemAction setting_ui_tr VazgeCancel setting_ui_trKategoriCategory setting_ui_trDei_tirChange setting_ui_tr@Aria2 varsay1lan yolunu dei_tirChange Aria2 default path setting_ui_trRenk _emas1: Color scheme:  setting_ui_trBalant1lar Connections setting_ui_trVarsay1lanlarDefaults setting_ui_tr&0ndirme SeenekleriDownload Options setting_ui_tr0ndirildi Downloaded setting_ui_trDosya Ad1 File Name setting_ui_trYaz1 tipi: Font:  setting_ui_trZKapat dmesi t1klan1rsa ana pencereyi gizle.)Hide main window if close button clicked. setting_ui_trSimgeler: Icons:  setting_ui_tr&Sistemi uyan1k tut!Keep system awake! setting_ui_trYakalanacak en fazla balant1 say1s1:<br/><small>(Taray1c1 bir seferde birden fazla video balant1s1 gnderirse)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_trBildirim tr: Notification type:  setting_ui_trBildirim Notifications setting_ui_tr,Balant1lar1n Say1s1: Number of connections:  setting_ui_trDeneme say1s1: Number of tries:  setting_ui_tr TamamOK setting_ui_tr Yzde Percentage setting_ui_trTercihler Preferences setting_ui_tr$Yeni tu_lara bas1nPress new keys setting_ui_tr1kQuit setting_ui_tr>RPC balant1 noktas1 numaras1: RPC port number:  setting_ui_trBBa_lang1ta Persepolis'i al1_t1rRun Persepolis at startup setting_ui_trK1asayolShortcut setting_ui_trK1sayollar Shortcuts setting_ui_tr BoyutSize setting_ui_trBoyut: Size:  setting_ui_tr DurumStatus setting_ui_tr Tarz: Style:  setting_ui_tr,Zaman a_1m1 (saniye): Timeout (seconds):  setting_ui_tr0Video Bulucu SeenekleriVideo Finder Options setting_ui_trHacim: Volume:  setting_ui_trKuyrua ekle: Add to queue:  text_ui_tr VazgeCancel text_ui_tr20ndirme Dizinini Dei_tirChange Download Folder text_ui_trHibirini Seme Deselect All text_ui_trIP:IP: text_ui_trBalant1larLinks text_ui_tr TamamOK text_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProksiProxy text_ui_trTmn Se Select All text_ui_tr6<b>Ses dosyas1 durumu: </b>Audio file status: video_finder_progress_ui_tr,<b>Muxing durumu: </b>Muxing status: video_finder_progress_ui_tr:<b>Video dosyas1 durumu: </b>Video file status: video_finder_progress_ui_tr&Geli_mi_ seeneklerAdvanced optionsytaddlink_src_ui_trSes biimi: Audio format:ytaddlink_src_ui_tr*Medya Listesini GetirFetch Media Listytaddlink_src_ui_tr2Medya Bilgisi Al1n1yor...Fetching Media Info...ytaddlink_src_ui_trRLtfen geerli bir video balant1s1 girinPlease enter a valid video linkytaddlink_src_ui_trBir biim seSelect a formatytaddlink_src_ui_trVideo Bulucu Video Finderytaddlink_src_ui_trVideo biimi: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_tr.ts000066400000000000000000002400471464161131600241200ustar00rootroot00000000000000 about_ui_tr About Persepolis Persepolis Hakkında Persepolis Download Manager Persepolis İndirme Yöneticisi <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Geliştiriciler Translators Çevirmenler License Lisans OK Tamam Special thanks to: Özel Teşekkürü hakedenler: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Kategoriye ekle: Proxy Proksi IP: IP: Port: Port: Change Download Folder İndirme Dizinini Değiştir Download Folder: İndirme Dizini: Cancel Vazgeç OK Tamam Link Bağlantı More Options Daha Fazla Seçenek Advanced Options Gelişmiş Seçenekler Referrer: Öneren: Header: Başlık: Load cookies: Çerezleri yükle: User agent: Kullanıcı aracısı: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Dosya adı</b>: <b>Size</b>: <b>Boyut</b>: after_download_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Open File Dosya Aç Open Download Folder İndirme Dizinini Aç OK Tamam Don't show this message again. Bu mesajı tekrar gösterme. <b>Download Completed!</b> <b>İndirme Tamamlandı!</b> <b>Save as</b>: <b>Farklı kaydet</b>: <b>Link</b>: <b>Bağlantı</b>: log_window_ui_tr Persepolis Log Persepolis Günlüğü Report Issue Sorun Raporla Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Kuyruk Durduruldu! Persepolis is shutting down Persepolis 20 saniye içinde your system in 20 seconds sisteminizi kapatıyor Queue completed! Kuyruk tamamlandı! Show main Window Ana Pencereyi göster Please Wait... Lütfen Bekleyin... Ready... Hazır... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 cevap vermedi! sabırlı olun! Persepolis 2 saniyede tekrar dener! Error... Hata... Persepolis can not connect to Aria2 Persepolis Aria2'ye bağlanamıyor Check your network & Restart Persepolis Ağınızı kontrol edin ve Persepolis'i yeniden başlatın Restart Persepolis Persepolis'i Yeniden başlat Reconnecting Aria2... Aria2'yi yeniden bağlama ... Persepolis reconnected aria2 successfully Persepolis başarıyla aria2 'yi yeniden bağladı Error: Hata: <b>Link</b>: <b>Bağlantı</b>: <b>Downloaded</b>: <b>İndirildi</b>: <b>Transfer rate</b>: <b>Transfer oranı</b>: <b>Estimated time left</b>: <b>Tahmini kalan süre</b>: <b>Connections</b>: <b>Bağlantılar</b>: <b>Status</b>: <b>Durum</b>: Download Stopped İndrime Durduruldu Error - Hata - Download Complete İndirme Tamamlandı <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Bu bağlantı daha önce eklenmiştir! Tekrar eklemek istediğinizden emin misiniz?</center></b> Download Starts İndirme Başladı Download Scheduled İndirme Planlandı Operation was not successful. İşlem başarılı değildi. Please resume the following category: Lütfen aşağıdaki kategoriye devam edin: Aria2 disconnected! Aria2 bağlantısı kesildi! Persepolis is trying to connect!be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Aria2 did not respond! Aria2 yanıt vermedi! Try again! Tekrar deneyin! Aria2 did not respond Aria2 cevap vermedi Try again Tekrar deneyin Please stop the following category: Lütfen aşağıdaki kategoriyi durdurun: Persepolis is trying to connect! be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Please try again. Lütfen tekrar deneyin. Minimize to system tray Sistem tepsisine küçült Not Found Bulunamadı Operation was not successful! İşlem başarılı değildi! Operation was not successful! Please stop the following category first: İşlem başarılı değildi! Lütfen önce aşağıdaki kategoriyi durdurun: Please stop the following download first: Lütfen önce indirmeyi durdurun: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Bu işlem indirilen dosyaları sabit diskinizden siler<br>KALICI OLARAK!</center></b> <center>Do you want to continue?</center> <center>Devam etmek istiyor musunuz?</center> Please stop the following category first: Lütfen önce aşağıdaki kategoriyi durdurun: </b>" already exists! </b>" zaten var! Send selected downloads to Seçilen indirilenleri gönder Send to Gönderildi Sort by Göre sırala <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Bu işlem bu kuyruktaki tüm indirme öğelerini kaldıracak<br>"Tüm İndirmeler" listesinden!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Üzgünüm! Varsayılan kuyruğu kaldıramazsınız!</b> Some items didn't transferred successfully! Bazı öğeler başarıyla aktarılmadı! Please stop download progress first. Lütfen önce indirme işlemini durdurun. Hide options Seçenekleri gizle Show options Seçenekleri göster Stop all downloads first! Önce tüm indirmeleri durdurun! Moving is Taşıma finished! bitti! Download is in progress by video finder! Video bulucu tarafından indirme işlemi devam ediyor! be patient! sabırlı olun! Stop the following download first: Önce aşağıdaki indirmeyi durdurun: ffmpeg is not installed! ffmpeg kurulu değil! Not enough free space in: İçinde yeterince boş alan yok: muxing error muxing hatası an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Dosya Edit Düzenle View Görünüm Download İndir Queue Kuyruk Video Finder Video Bulucu Help Yardım Sort by Göre sırala Persepolis Download Manager Persepolis İndirme Yöneticisi Category Kategori File Name Dosya Adı Status Durum Size Boyut Downloaded İndirildi Percentage Yüzde Connections Bağlantılar Link Bağlantı &File &Dosya &Edit &Düzenle &View &Görünüm &Download &İndir &Queue &Kuyruk &Help &Yardım Show/Hide system tray icon Sistem tepsisi simgesini Göster/Gizle Add New Download Link Yeni İndirme Bağlantısı Ekle Resume Download İndirmeye Devam et Pause Download İndirmeyi DDuraklat Stop Download İndirmeyi Durdur Stop/Cancel Download İndirmeyi Durdur/İptal et Properties Özellikler Progress İlerleme Exit Çıkış Clear all items in download list İndirme listesindeki tüm öğeleri temizle Create new download queue Yeni indirme kuyruğu oluştur Remove this queue Bu kuyruğu kaldır Start this queue Bu kuyruğu başlat Stop this queue Bu kuyruğu durdur Move currently selected items up by one row Seçilen öğeleri bir satır yukarı kaydır Move currently selected items down by one row Seçilen öğeleri bir satır aşağı kaydır Preferences Tercihler About Hakkında Report an issue Bir sorunu bildirin Start Time Başlama Zamanı End Time Bitiş Zamanı Download bottom of the list first İlk önce listenin altını indir Limit Speed Hız Sınırı Apply Uygula After download İndirmeden sonra Shut Down Kapat V&ideo Finder V&ideo Bulucu <b>Video file status: </b> <b>Video dosyası durumu: </b> <b>Audio file status: </b> <b>Ses dosyası durumu: </b> <b>Status: </b> <b>Durum: </b> <b>Muxing status: </b> <b>Muxing durumu: </b> downloaded indirildi Active Etkin Not Active Etkin Değil Started Başladı Error Hata Complete Tamamlanmış Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 bağlantısı kesildi! Persepolis is trying to connect! be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Aria2 did not respond! Aria2 yanıt vermedi! Please try again. Lütfen tekrar deneyin. Try again! Tekrar deneyin! progress_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Status: Durum: Downloaded: İndirildi: Transfer rate: Transfer oranı: Estimated time left: Tahmini kalan süre: Number of connections: Bağlantıların Sayısı: Download Information İndirme Bilgisi After download İndirmeden sonra Apply Uygula Shut Down Kapat Download Options İndirme Seçenekleri Resume Devam et Pause Duraklat Stop Durdur Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Lütfen Persepolis'i Yeniden Başlat!</center></b><br><center>Bazı değişiklikler Persepolis'i yeniden başlattıktan sonra etkili olur</center> Restart Persepolis! Persepolis'i Yeniden başlat! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Bu kısayol daha önce kullanılmış! Başka bir tane kullanın!</center></b> setting_ui_tr Preferences Tercihler <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>İndirme başarısız olursa denemelerin sayısını ayarla.</p></body></html> Number of tries: Deneme sayısı: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Yeniden denemeler arasında beklemek için saniye ayarlayın. İndirme yöneticisi, HTTP sunucusu bir 503 yanıtı verdiğinde indirmeyi yeniden dener.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Zaman aşımını saniye cinsinden ayarla. </p></body></html> Timeout (seconds): Zaman aşımı (saniye): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Birden fazla bağlantı kullanarak indirme işleminizi hızlandırabilirsiniz.</p></body></html> Number of connections: Bağlantıların Sayısı: RPC port number: RPC bağlantı noktası numarası: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Dinlemek için JSON-RPC/XML-RPC sunucusu için bir bağlantı noktası numarası belirtin. Muhtemel Değerler: 1024 - 65535 Varsayılan: 6801</p></body></html> Change Aria2 default path Aria2 varsayılan yolunu değiştir Change Değiştir Download Options İndirme Seçenekleri Volume: Hacim: Notifications Bildirim Style: Tarz: Color scheme: Renk şeması: Icons: Simgeler: Notification type: Bildirim türü: Font: Yazı tipi: Size: Boyut: Run Persepolis at startup Başlangıçta Persepolis'i çalıştır Keep system awake! Sistemi uyanık tut! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Biçim SS:DD</p></body></html> File Name Dosya Adı Status Durum Size Boyut Downloaded İndirildi Percentage Yüzde Connections Bağlantılar Category Kategori Video Finder Options Video Bulucu Seçenekleri Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Yakalanacak en fazla bağlantı sayısı:<br/><small>(Tarayıcı bir seferde birden fazla video bağlantısı gönderirse)</small> Defaults Varsayılanlar Cancel Vazgeç OK Tamam Press new keys Yeni tuşlara basın Action Eylem Shortcut Kıasayol Shortcuts Kısayollar Quit Çık Hide main window if close button clicked. Kapat düğmesi tıklanırsa ana pencereyi gizle. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Bu özellik işletim sisteminizde çalışmayabilir.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Links Bağlantılar Select All Tümünü Seç Deselect All Hiçbirini Seçme Add to queue: Kuyruğa ekle: Proxy Proksi IP: IP: Port: Port: Change Download Folder İndirme Dizinini Değiştir OK Tamam Cancel Vazgeç Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Video dosyası durumu: </b> <b>Audio file status: </b> <b>Ses dosyası durumu: </b> <b>Muxing status: </b> <b>Muxing durumu: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Video Bulucu Fetch Media List Medya Listesini Getir Select a format Bir biçim seç Please enter a valid video link Lütfen geçerli bir video bağlantısı girin Fetching Media Info... Medya Bilgisi Alınıyor... Video format: Video biçimi: Audio format: Ses biçimi: Advanced options Gelişmiş seçenekler persepolisdm-persepolis-867ee76/resources/locales/ui_tr_TR.qm000066400000000000000000000676601464161131600245240ustar00rootroot000000000000000>cX >^9Zd o7we-B0-Bc9N1H9Nd <=_G(3M?$(]1xDZ,nxDZBeGK JC^#(X)*D֣;+.14 *<u;6`iq, +@P > $? AN  W; ^: `= g_/ mp+ }Q/ ~. C F0g U U9 U[ O g)> ^M~ L "ZW8 _ _20 if* if= s> `F Yp]n > (^ ,!*4 Fq Uq+ `r`Zr gn, nS v z  {Ǝ' w2 wC b VY 4B V  78 @ 5>C (

&]>BdiT]{}p gA *VXYm[[I$q$q@?FP.#{Uig<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr&Persepolis Hakk1ndaAbout Persepolis about_ui_trGeli_tiriciler Developers about_ui_tr LisansLicense about_ui_tr TamamOK about_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Manager about_ui_tr4zel Te_ekkr hakedenler:Special thanks to: about_ui_trevirmenler Translators about_ui_tr"Kategoriye ekle: Add to category:  addlink_ui_tr&Geli_mi_ SeeneklerAdvanced Options addlink_ui_tr 0ptalCancel addlink_ui_tr20ndirme Dizinini Dei_tirChange Download Folder addlink_ui_tr 0ndirme Dizini: Download Folder:  addlink_ui_trBa_l1k: Header:  addlink_ui_trIP: IP:  addlink_ui_trBalant1Link addlink_ui_tr"erezleri ykle: Load cookies:  addlink_ui_tr$Daha Fazla Seenek More Options addlink_ui_tr TamamOK addlink_ui_tr"Balant1 noktas1:Port: addlink_ui_trArac1 sunucuProxy addlink_ui_trneren:  Referrer:  addlink_ui_tr,Kullan1c1 temsilcisi:  User agent:  addlink_ui_tr$<b>Dosya ad1</b>: File name: after_download_src_ui_tr<b>Boyut</b>:  Size: after_download_src_ui_tr Tamam  OK after_download_ui_tr Dosya A  Open File after_download_ui_tr4<b>0ndirme Tamamland1!</b>Download Completed!after_download_ui_tr"<b>Balant1</b>:  Link: after_download_ui_tr,<b>Farkl1 kaydet</b>: Save as: after_download_ui_tr6Bu iletiyi tekrar gsterme.Don't show this message again.after_download_ui_tr&0ndirme Dizinini AOpen Download Folderafter_download_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managerafter_download_ui_tr$Persepolis GnlPersepolis Loglog_window_ui_trSorun Bildir Report Issuelog_window_ui_tr </b>" zaten var!" already exists!mainwindow_src_ui_tr<b><center>Bu balant1 daha nce eklenmi_tir! Tekrar eklemek istediinizden emin misiniz?</center></b>r

This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>Bu i_lem, indirilen dosyalar1 sabit diskinizden siler<br>KALICI OLARAK!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b><center>Bu i_lem, bu kuyruktaki tm indirme elerini kald1racak<br>"Tm 0ndirmeler" listesinden!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr(<b>Balant1lar</b>: Connections: mainwindow_src_ui_tr$<b>0ndirildi</b>: Downloaded: mainwindow_src_ui_tr6<b>Tahmini kalan sre</b>: Estimated time left: mainwindow_src_ui_tr"<b>Balant1</b>:  Link: mainwindow_src_ui_trf<b>zgnm! Varsay1lan kuyruu kald1ramazs1n1z!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>Durum</b>: Status: mainwindow_src_ui_tr*<b>Aktar1m h1z1</b>: Transfer rate: mainwindow_src_ui_trX<center>Devam etmesini ister misin?</center>)
Do you want to continue?
mainwindow_src_ui_tr&Aria2 yan1t vermediAria2 did not respondmainwindow_src_ui_tr(Aria2 yan1t vermedi!Aria2 did not respond!mainwindow_src_ui_trAria2 yan1t vermedi! sab1rl1 olun! Persepolis 2 saniye iinde tekrar dener!FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_tr2Aria2 balant1s1 kesildi!Aria2 disconnected!mainwindow_src_ui_trfA1n1z1 denetleyin ve Persepolis'i yeniden ba_lat1n'Check your network & Restart Persepolismainwindow_src_ui_tr$0ndirme Tamamland1Download Completemainwindow_src_ui_tr&Zamanlanm1_ 0ndirmeDownload Scheduledmainwindow_src_ui_tr0ndirme Ba_lad1Download Startsmainwindow_src_ui_tr$0ndrime DurdurulduDownload Stoppedmainwindow_src_ui_trLVideo bulucu ile indirme devam ediyor!(Download is in progress by video finder!mainwindow_src_ui_trHata - Error - mainwindow_src_ui_trHata...Error...mainwindow_src_ui_tr Hata: Error: mainwindow_src_ui_tr"Seenekleri gizle Hide optionsmainwindow_src_ui_tr*Grev ubuuna kltMinimize to system traymainwindow_src_ui_trTa_1nmakta Moving ismainwindow_src_ui_trBulunamad1 Not Foundmainwindow_src_ui_tr(Yeterli bo_ alan yokNot enough free space in:mainwindow_src_ui_tr20_leyi_ ba_ar1l1 deildi!Operation was not successful!mainwindow_src_ui_tr0_leyi_ ba_ar1l1 deildi! Ltfen nce s1radaki kategoriyi durdurun: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr20_leyi_ ba_ar1l1 deildi.Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr@Persepolis Aria2'ye balanam1yor#Persepolis can not connect to Aria2mainwindow_src_ui_tr(Persepolis kapan1yorPersepolis is shutting downmainwindow_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!,Persepolis is trying to connect! be patient!mainwindow_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr\Persepolis aria2 'yi ba_ar1yla yeniden balad1)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr(Ltfen Bekleyiniz...Please Wait...mainwindow_src_ui_trTLtfen s1radaki kategoriyi devam ettirin: &Please resume the following category: mainwindow_src_ui_trTLtfen nce indirme ilerleyi_ini durdurun.$Please stop download progress first.mainwindow_src_ui_trTLtfen nce s1radaki kategoriyi durdurun: *Please stop the following category first: mainwindow_src_ui_trJLtfen s1radaki kategoriyi durdurun: $Please stop the following category: mainwindow_src_ui_trRLtfen nce s1radaki indirmeyi durdurun: *Please stop the following download first: mainwindow_src_ui_tr,Ltfen tekrar deneyin.Please try again.mainwindow_src_ui_trKuyruk Durdu!Queue Stopped!mainwindow_src_ui_tr$Kuyruk tamamland1!Queue completed!mainwindow_src_ui_trHaz1r...Ready...mainwindow_src_ui_tr6Aria2 yeniden balan1yor...Reconnecting Aria2...mainwindow_src_ui_tr6Persepolis'i Yeniden ba_latRestart Persepolismainwindow_src_ui_tr4Seilen indirmeleri gnderSend selected downloads tomainwindow_src_ui_tr GnderSend tomainwindow_src_ui_tr(Ana Pencereyi gsterShow main Windowmainwindow_src_ui_tr$Seenekleri gster Show optionsmainwindow_src_ui_trFBaz1 eler ba_ar1yla aktar1lamad1!+Some items didn't transferred successfully!mainwindow_src_ui_trGre s1ralaSort bymainwindow_src_ui_tr<nce tm indirmeleri durdurun!Stop all downloads first!mainwindow_src_ui_trBnce s1radaki indirmeyi durdurun:#Stop the following download first: mainwindow_src_ui_trTekrar deneyin Try againmainwindow_src_ui_trTekrar deneyin! Try again!mainwindow_src_ui_trsab1rl1 olun! be patient!mainwindow_src_ui_tr&ffmpeg ykl deil!ffmpeg is not installed!mainwindow_src_ui_tr bitti! finished!mainwindow_src_ui_tr oullama hatas1 muxing errormainwindow_src_ui_tr6sisteminiz 20 saniye iindeyour system in 20 secondsmainwindow_src_ui_trindirildi downloadedmainwindow_ui_tr &0ndir &Downloadmainwindow_ui_tr&Dzenle&Editmainwindow_ui_tr &Dosya&Filemainwindow_ui_tr&Yard1m&Helpmainwindow_ui_tr&Kuyruk&Queuemainwindow_ui_tr&Grnm&Viewmainwindow_ui_tr6<b>Ses dosyas1 durumu: </b>Audio file status: mainwindow_ui_tr2<b>oullama durumu: </b>Muxing status: mainwindow_ui_tr<b>Durum: </b>Status: mainwindow_ui_tr:<b>Video dosyas1 durumu: </b>Video file status: mainwindow_ui_trHakk1ndaAboutmainwindow_ui_tr EtkinActivemainwindow_ui_tr8Yeni 0ndirme Balant1s1 EkleAdd New Download Linkmainwindow_ui_tr"0ndirdikten sonraAfter downloadmainwindow_ui_tr UygulaApplymainwindow_ui_trKategoriCategorymainwindow_ui_trP0ndirme listesindeki tm eleri temizle Clear all items in download listmainwindow_ui_trTamamlanm1_Completemainwindow_ui_trBalant1lar Connectionsmainwindow_ui_tr8Yeni indirme kuyruu olu_turCreate new download queuemainwindow_ui_tr 0ndirDownloadmainwindow_ui_trF0lk nce listenin alt1ndakini indir"Download bottom of the list firstmainwindow_ui_tr0ndirildi Downloadedmainwindow_ui_trDzenleEditmainwindow_ui_trBiti_ Zaman1End Timemainwindow_ui_trHataErrormainwindow_ui_tr 1k1_Exitmainwindow_ui_tr DosyaFilemainwindow_ui_trDosya Ad1 File Namemainwindow_ui_tr Yard1mHelpmainwindow_ui_trH1z S1n1r1 Limit Speedmainwindow_ui_trBalant1Linkmainwindow_ui_trV^u an seili eleri bir sat1r a_a1 kayd1r-Move currently selected items down by one rowmainwindow_ui_trX^u an seili eleri bir sat1r yukar1 kayd1r+Move currently selected items up by one rowmainwindow_ui_trEtkin Deil Not Activemainwindow_ui_tr"0ndirmeye Ara VerPause Downloadmainwindow_ui_trYzdesi Percentagemainwindow_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managermainwindow_ui_trTercihler Preferencesmainwindow_ui_tr0lerleyi_Progressmainwindow_ui_trzellikler Propertiesmainwindow_ui_tr KuyrukQueuemainwindow_ui_tr"Bu kuyruu kald1rRemove this queuemainwindow_ui_tr Bir sorun bildirReport an issuemainwindow_ui_trB0ndirmeye Kald11 Yerden Devam EtResume Downloadmainwindow_ui_trFGrev ubuu simgesini Gster/GizleShow/Hide system tray iconmainwindow_ui_tr Kapat Shut Downmainwindow_ui_tr BoyutSizemainwindow_ui_trGre s1ralaSort bymainwindow_ui_trBa_lama Zaman1 Start Timemainwindow_ui_tr"Bu kuyruu ba_latStart this queuemainwindow_ui_trBa_lad1Startedmainwindow_ui_tr DurumStatusmainwindow_ui_tr 0ndirmeyi Durdur Stop Downloadmainwindow_ui_tr"Bu kuyruu durdurStop this queuemainwindow_ui_tr20ndirmeyi Durdur/0ptal etStop/Cancel Downloadmainwindow_ui_trV&ideo Bulucu V&ideo Findermainwindow_ui_trVideo Bulucu Video Findermainwindow_ui_trGrnmViewmainwindow_ui_tr(Aria2 yan1t vermedi!Aria2 did not respond!progress_src_ui_tr2Aria2 balant1s1 kesildi!Aria2 disconnected!progress_src_ui_trXPersepolis balanmay1 deniyor! sab1rl1 olun!,Persepolis is trying to connect! be patient!progress_src_ui_tr,Ltfen tekrar deneyin.Please try again.progress_src_ui_trTekrar deneyin! Try again!progress_src_ui_tr"0ndirdikten sonraAfter downloadprogress_ui_tr UygulaApplyprogress_ui_tr0ndirme BilgisiDownload Informationprogress_ui_tr&0ndirme SeenekleriDownload Optionsprogress_ui_tr0ndirildi: Downloaded:progress_ui_tr&Tahmini kalan sre:Estimated time left:progress_ui_tr,Balant1lar1n Say1s1: Number of connections: progress_ui_trAra verPauseprogress_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Managerprogress_ui_tr.Kald11 Yerden Devam EtResumeprogress_ui_tr Kapat Shut Downprogress_ui_trDurum: Status: progress_ui_tr DurdurStopprogress_ui_trAktar1m h1z1: Transfer rate: progress_ui_tr.<b><center>Ltfen Persepolis'i Yeniden Ba_lat!</center></b><br><center>Baz1 dei_iklikler Persepolis'i yeniden ba_latt1ktan sonra geerli olur</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>Bu k1sayol daha nce kullan1lm1_t1r! Dier birini kullan1n!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr8Persepolis'i Yeniden ba_lat!Restart Persepolis!setting_src_ui_trT<html><head/><body><p>JSON-RPC/XML-RPC sunucusunu takip etmek iin bir balant1 noktas1 numaras1 belirtin. Olas1 Deerler: 1024 - 65535 Varsay1lan: 6801</p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trf<html><head/><body><p>Biim SS:DD</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>0ndirme ba_ar1s1z olursa deneme say1s1n1 ayarla.</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr|<html><head/><body><p>Yeniden denemeler aras1nda beklemek iin saniyeler ayarlay1n. HTTP sunucusu bir 503 yan1t1 dndrdnde indirme yneticisi indirmeleri yeniden dener.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Zaman a_1m1n1 saniye olarak ayarla. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>Bu zellik i_letim sisteminizde al1_mayabilir.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Birden fazla balant1 kullanmak, indirmenizi h1zland1rmaya yard1mc1 olabilir</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr EylemAction setting_ui_tr 0ptalCancel setting_ui_trKategoriCategory setting_ui_trDei_tirChange setting_ui_tr@Aria2 varsay1lan yolunu dei_tirChange Aria2 default path setting_ui_trRenk _emas1: Color scheme:  setting_ui_trBalant1lar Connections setting_ui_trVarsay1lanlarDefaults setting_ui_tr&0ndirme SeenekleriDownload Options setting_ui_tr0ndirildi Downloaded setting_ui_trDosya Ad1 File Name setting_ui_trYaz1 tipi: Font:  setting_ui_tr`Kapat dmesi t1kland11nda ana pencereyi gizle.)Hide main window if close button clicked. setting_ui_trSimgeler: Icons:  setting_ui_tr&Sistemi uyan1k tut!Keep system awake! setting_ui_trYakalama balant1lar1n1n en fazla say1s1:<br/><small>(Taray1c1 bir seferde birden fazla video balant1s1 gnderirse)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_trBildirim tr: Notification type:  setting_ui_trBildirimler Notifications setting_ui_tr,Balant1lar1n Say1s1: Number of connections:  setting_ui_trDeneme say1s1: Number of tries:  setting_ui_tr TamamOK setting_ui_trYzdesi Percentage setting_ui_trTercihler Preferences setting_ui_tr$Yeni tu_lara bas1nPress new keys setting_ui_trProgramdan 1kQuit setting_ui_tr>RPC balant1 noktas1 numaras1: RPC port number:  setting_ui_trBBa_lang1ta Persepolis'i al1_t1rRun Persepolis at startup setting_ui_trK1sayolShortcut setting_ui_trK1sayollar Shortcuts setting_ui_tr BoyutSize setting_ui_trBoyut: Size:  setting_ui_tr DurumStatus setting_ui_tr Tarz: Style:  setting_ui_tr,Zaman a_1m1 (saniye): Timeout (seconds):  setting_ui_tr0Video Bulucu SeenekleriVideo Finder Options setting_ui_trHacim: Volume:  setting_ui_trKuyrua ekle: Add to queue:  text_ui_tr 0ptalCancel text_ui_tr20ndirme Dizinini Dei_tirChange Download Folder text_ui_trHibirini Seme Deselect All text_ui_trIP:IP: text_ui_trBalant1larLinks text_ui_tr TamamOK text_ui_tr:Persepolis 0ndirme YneticisiPersepolis Download Manager text_ui_tr"Balant1 noktas1:Port: text_ui_trAra sunucuProxy text_ui_trTmn Se Select All text_ui_tr6<b>Ses dosyas1 durumu: </b>Audio file status: video_finder_progress_ui_tr2<b>oullama durumu: </b>Muxing status: video_finder_progress_ui_tr:<b>Video dosyas1 durumu: </b>Video file status: video_finder_progress_ui_tr&Geli_mi_ seeneklerAdvanced optionsytaddlink_src_ui_tr&Ses dosyas1 biimi: Audio format:ytaddlink_src_ui_tr*Medya Listesini GetirFetch Media Listytaddlink_src_ui_tr2Medya Bilgisi Al1n1yor...Fetching Media Info...ytaddlink_src_ui_trRLtfen geerli bir video balant1s1 girinPlease enter a valid video linkytaddlink_src_ui_tr(Bir dosya biimi seSelect a formatytaddlink_src_ui_trVideo Bulucu Video Finderytaddlink_src_ui_tr*Video dosyas1 biimi: Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_tr_TR.ts000066400000000000000000002402051464161131600245210ustar00rootroot00000000000000 about_ui_tr About Persepolis Persepolis Hakkında Persepolis Download Manager Persepolis İndirme Yöneticisi <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers Geliştiriciler Translators Çevirmenler License Lisans OK Tamam Special thanks to: Özel Teşekkürü hakedenler: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: Kategoriye ekle: Proxy Aracı sunucu IP: IP: Port: Bağlantı noktası: Change Download Folder İndirme Dizinini Değiştir Download Folder: İndirme Dizini: Cancel İptal OK Tamam Link Bağlantı More Options Daha Fazla Seçenek Advanced Options Gelişmiş Seçenekler Referrer: Öneren: Header: Başlık: Load cookies: Çerezleri yükle: User agent: Kullanıcı temsilcisi: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>Dosya adı</b>: <b>Size</b>: <b>Boyut</b>: after_download_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Open File Dosya Aç Open Download Folder İndirme Dizinini Aç OK Tamam Don't show this message again. Bu iletiyi tekrar gösterme. <b>Download Completed!</b> <b>İndirme Tamamlandı!</b> <b>Save as</b>: <b>Farklı kaydet</b>: <b>Link</b>: <b>Bağlantı</b>: log_window_ui_tr Persepolis Log Persepolis Günlüğü Report Issue Sorun Bildir Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! Kuyruk Durdu! Persepolis is shutting down Persepolis kapanıyor your system in 20 seconds sisteminiz 20 saniye içinde Queue completed! Kuyruk tamamlandı! Show main Window Ana Pencereyi göster Please Wait... Lütfen Bekleyiniz... Ready... Hazır... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 yanıt vermedi! sabırlı olun! Persepolis 2 saniye içinde tekrar dener! Error... Hata... Persepolis can not connect to Aria2 Persepolis Aria2'ye bağlanamıyor Check your network & Restart Persepolis Ağınızı denetleyin ve Persepolis'i yeniden başlatın Restart Persepolis Persepolis'i Yeniden başlat Reconnecting Aria2... Aria2 yeniden bağlanıyor... Persepolis reconnected aria2 successfully Persepolis aria2 'yi başarıyla yeniden bağladı Error: Hata: <b>Link</b>: <b>Bağlantı</b>: <b>Downloaded</b>: <b>İndirildi</b>: <b>Transfer rate</b>: <b>Aktarım hızı</b>: <b>Estimated time left</b>: <b>Tahmini kalan süre</b>: <b>Connections</b>: <b>Bağlantılar</b>: <b>Status</b>: <b>Durum</b>: Download Stopped İndrime Durduruldu Error - Hata - Download Complete İndirme Tamamlandı <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>Bu bağlantı daha önce eklenmiştir! Tekrar eklemek istediğinizden emin misiniz?</center></b> Download Starts İndirme Başladı Download Scheduled Zamanlanmış İndirme Operation was not successful. İşleyiş başarılı değildi. Please resume the following category: Lütfen sıradaki kategoriyi devam ettirin: Aria2 disconnected! Aria2 bağlantısı kesildi! Persepolis is trying to connect!be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Aria2 did not respond! Aria2 yanıt vermedi! Try again! Tekrar deneyin! Aria2 did not respond Aria2 yanıt vermedi Try again Tekrar deneyin Please stop the following category: Lütfen sıradaki kategoriyi durdurun: Persepolis is trying to connect! be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Please try again. Lütfen tekrar deneyin. Minimize to system tray Görev çubuğuna küçült Not Found Bulunamadı Operation was not successful! İşleyiş başarılı değildi! Operation was not successful! Please stop the following category first: İşleyiş başarılı değildi! Lütfen önce sıradaki kategoriyi durdurun: Please stop the following download first: Lütfen önce sıradaki indirmeyi durdurun: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>Bu işlem, indirilen dosyaları sabit diskinizden siler<br>KALICI OLARAK!</center></b> <center>Do you want to continue?</center> <center>Devam etmesini ister misin?</center> Please stop the following category first: Lütfen önce sıradaki kategoriyi durdurun: </b>" already exists! </b>" zaten var! Send selected downloads to Seçilen indirmeleri gönder Send to Gönder Sort by Göre sırala <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>Bu işlem, bu kuyruktaki tüm indirme öğelerini kaldıracak<br>"Tüm İndirmeler" listesinden!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Üzgünüm! Varsayılan kuyruğu kaldıramazsınız!</b> Some items didn't transferred successfully! Bazı öğeler başarıyla aktarılamadı! Please stop download progress first. Lütfen önce indirme ilerleyişini durdurun. Hide options Seçenekleri gizle Show options Seçenekleri göster Stop all downloads first! Önce tüm indirmeleri durdurun! Moving is Taşınmakta finished! bitti! Download is in progress by video finder! Video bulucu ile indirme devam ediyor! be patient! sabırlı olun! Stop the following download first: Önce sıradaki indirmeyi durdurun: ffmpeg is not installed! ffmpeg yüklü değil! Not enough free space in: Yeterli boş alan yok muxing error Çoğullama hatası an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File Dosya Edit Düzenle View Görünüm Download İndir Queue Kuyruk Video Finder Video Bulucu Help Yardım Sort by Göre sırala Persepolis Download Manager Persepolis İndirme Yöneticisi Category Kategori File Name Dosya Adı Status Durum Size Boyut Downloaded İndirildi Percentage Yüzdesi Connections Bağlantılar Link Bağlantı &File &Dosya &Edit &Düzenle &View &Görünüm &Download &İndir &Queue &Kuyruk &Help &Yardım Show/Hide system tray icon Görev çubuğu simgesini Göster/Gizle Add New Download Link Yeni İndirme Bağlantısı Ekle Resume Download İndirmeye Kaldığı Yerden Devam Et Pause Download İndirmeye Ara Ver Stop Download İndirmeyi Durdur Stop/Cancel Download İndirmeyi Durdur/İptal et Properties Özellikler Progress İlerleyiş Exit Çıkış Clear all items in download list İndirme listesindeki tüm öğeleri temizle Create new download queue Yeni indirme kuyruğu oluştur Remove this queue Bu kuyruğu kaldır Start this queue Bu kuyruğu başlat Stop this queue Bu kuyruğu durdur Move currently selected items up by one row Şu an seçili öğeleri bir satır yukarı kaydır Move currently selected items down by one row Şu an seçili öğeleri bir satır aşağı kaydır Preferences Tercihler About Hakkında Report an issue Bir sorun bildir Start Time Başlama Zamanı End Time Bitiş Zamanı Download bottom of the list first İlk önce listenin altındakini indir Limit Speed Hız Sınırı Apply Uygula After download İndirdikten sonra Shut Down Kapat V&ideo Finder V&ideo Bulucu <b>Video file status: </b> <b>Video dosyası durumu: </b> <b>Audio file status: </b> <b>Ses dosyası durumu: </b> <b>Status: </b> <b>Durum: </b> <b>Muxing status: </b> <b>Çoğullama durumu: </b> downloaded indirildi Active Etkin Not Active Etkin Değil Started Başladı Error Hata Complete Tamamlanmış Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 bağlantısı kesildi! Persepolis is trying to connect! be patient! Persepolis bağlanmayı deniyor! sabırlı olun! Aria2 did not respond! Aria2 yanıt vermedi! Please try again. Lütfen tekrar deneyin. Try again! Tekrar deneyin! progress_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Status: Durum: Downloaded: İndirildi: Transfer rate: Aktarım hızı: Estimated time left: Tahmini kalan süre: Number of connections: Bağlantıların Sayısı: Download Information İndirme Bilgisi After download İndirdikten sonra Apply Uygula Shut Down Kapat Download Options İndirme Seçenekleri Resume Kaldığı Yerden Devam Et Pause Ara ver Stop Durdur Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Lütfen Persepolis'i Yeniden Başlat!</center></b><br><center>Bazı değişiklikler Persepolis'i yeniden başlattıktan sonra geçerli olur</center> Restart Persepolis! Persepolis'i Yeniden başlat! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>Bu kısayol daha önce kullanılmıştır! Diğer birini kullanın!</center></b> setting_ui_tr Preferences Tercihler <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>İndirme başarısız olursa deneme sayısını ayarla.</p></body></html> Number of tries: Deneme sayısı: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Yeniden denemeler arasında beklemek için saniyeler ayarlayın. HTTP sunucusu bir 503 yanıtı döndürdüğünde indirme yöneticisi indirmeleri yeniden dener.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Zaman aşımını saniye olarak ayarla. </p></body></html> Timeout (seconds): Zaman aşımı (saniye): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Birden fazla bağlantı kullanmak, indirmenizi hızlandırmaya yardımcı olabilir</p></body></html> Number of connections: Bağlantıların Sayısı: RPC port number: RPC bağlantı noktası numarası: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p>JSON-RPC/XML-RPC sunucusunu takip etmek için bir bağlantı noktası numarası belirtin. Olası Değerler: 1024 - 65535 Varsayılan: 6801</p></body></html> Change Aria2 default path Aria2 varsayılan yolunu değiştir Change Değiştir Download Options İndirme Seçenekleri Volume: Hacim: Notifications Bildirimler Style: Tarz: Color scheme: Renk şeması: Icons: Simgeler: Notification type: Bildirim türü: Font: Yazı tipi: Size: Boyut: Run Persepolis at startup Başlangıçta Persepolis'i çalıştır Keep system awake! Sistemi uyanık tut! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Biçim SS:DD</p></body></html> File Name Dosya Adı Status Durum Size Boyut Downloaded İndirildi Percentage Yüzdesi Connections Bağlantılar Category Kategori Video Finder Options Video Bulucu Seçenekleri Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Yakalama bağlantılarının en fazla sayısı:<br/><small>(Tarayıcı bir seferde birden fazla video bağlantısı gönderirse)</small> Defaults Varsayılanlar Cancel İptal OK Tamam Press new keys Yeni tuşlara basın Action Eylem Shortcut Kısayol Shortcuts Kısayollar Quit Programdan çık Hide main window if close button clicked. Kapat düğmesi tıklandığında ana pencereyi gizle. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>Bu özellik işletim sisteminizde çalışmayabilir.</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis İndirme Yöneticisi Links Bağlantılar Select All Tümünü Seç Deselect All Hiçbirini Seçme Add to queue: Kuyruğa ekle: Proxy Ara sunucu IP: IP: Port: Bağlantı noktası: Change Download Folder İndirme Dizinini Değiştir OK Tamam Cancel İptal Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>Video dosyası durumu: </b> <b>Audio file status: </b> <b>Ses dosyası durumu: </b> <b>Muxing status: </b> <b>Çoğullama durumu: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Video Bulucu Fetch Media List Medya Listesini Getir Select a format Bir dosya biçimi seç Please enter a valid video link Lütfen geçerli bir video bağlantısı girin Fetching Media Info... Medya Bilgisi Alınıyor... Video format: Video dosyası biçimi: Audio format: Ses dosyası biçimi: Advanced options Gelişmiş seçenekler persepolisdm-persepolis-867ee76/resources/locales/ui_zh_CN.qm000066400000000000000000001015141464161131600244560ustar00rootroot00000000000000THam^#I%;Xj 3XjrWdw;`k a/T0}0NQC0*1T; 1TcSO {Oq_. &_`Mi<3'jr;jrd$t tsvz5RZme>2>u XJkm9Zv:%I_ o>wv%74)o Z)oQ)orQ-B2M-Bt9N39Nu|:G:l<=o<G(7M?$ d[@]1xDZ.TxDZNvyKIBCl8(e`)*P֣ES019BsJppqb *H_uF`n_6`c6`q&6`:9uF~q.` /`t +@! .=T > $K AN#4 WF& ^D `I b gn mp-~ }R }Qg ~0) tk O F0 U NCN  e? UC Uj O" g+T s92 e~b ^Y_ X "ZWA _ _5 _`( if, ifI% s>S `R Ypkb J1 (m ,!," >E> Fq Uq- `r`h gn. n^ vK z {Ǝ) w6t wO= tO b 8: bE  9 7A Ld 5I (G 2S5 P[ b[G^ e.H e.R stJ q qS e+ N m + DE Qr iR D jP i Ue c k C/* .H c >P \e8 q B B BD BQ Bs $ i"/.dC7I7Iu_)xBfxBpKNvfOJ e?NgU1'2$2M3=  p6?r(l?6%]>)]>NiTku=y^4G{2}p,GVeu[!["$q$qM*?S7\.%{aix, AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia about_ui_tr<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_trQsN PersepolisAbout Persepolis about_ui_tr_SNTX Developers about_ui_trSSOLicense about_ui_trOKOK about_ui_tr Persepolis N }{tVhPersepolis Download Manager about_ui_tr ryR+#"Special thanks to: about_ui_trр Translators about_ui_tr mRN }cAdd Download Link addlink_ui_tr mRR0|{R+Add to category:  addlink_ui_tr~ yAdvanced Options addlink_ui_trSmCancel addlink_ui_trfe9N }eNY9Change Download Folder addlink_ui_tr fe9eNT Change file name:  addlink_ui_trhmK|~NtnDetect System Proxy Settings addlink_ui_tr N }eNY9Download Folder:  addlink_ui_trz TN }Download Later addlink_ui_tr N }cDownload link:  addlink_ui_tr N }[xDownload password:  addlink_ui_trN }u(b7T T[xDownload username and password addlink_ui_tr N }u(b7T Download username:  addlink_ui_tr~g_eEnd time addlink_ui_trHeader: Header:  addlink_ui_tr IP W0W@IP:  addlink_ui_trP Limit speed addlink_ui_trcLink addlink_ui_trR} cookies: Load cookies:  addlink_ui_trfY y More Options addlink_ui_trcepNumber of connections: addlink_ui_trOKOK addlink_ui_trzSPort: addlink_ui_trNtProxy addlink_ui_tr Nt[xProxy password:  addlink_ui_tr Ntu(b7T Proxy username:  addlink_ui_trReferrer:  Referrer:  addlink_ui_tr OOkd_Remember this path addlink_ui_tr_Ye Start time addlink_ui_trUser agent:  User agent:  addlink_ui_tr<b>eNT </b>File name: after_download_src_ui_tr<b>Y'\</b> Size: after_download_src_ui_tr OK  OK after_download_ui_trbS_eN Open File after_download_ui_tr<b>N }[b</b>Download Completed!after_download_ui_tr<b>c</b> Link: after_download_ui_tr<b>S[XN:</b>Save as: after_download_ui_trN Qf>y:gaO`o0Don't show this message again.after_download_ui_trbS_N }eNY9Open Download Folderafter_download_ui_tr Persepolis N }{tVhPersepolis Download Managerafter_download_ui_tr nde_O`oClear Log Messageslog_window_ui_trQsCloselog_window_ui_trY R6] Q[R0Rj4gCopy Selected to Clipboardlog_window_ui_trPersepolis e_Persepolis Loglog_window_ui_tr R7ee_O`oRefresh Log Messageslog_window_ui_trN b Report Issuelog_window_ui_tr*</b>" already exists!" already exists!mainwindow_src_ui_tr<b><center>This link has been added before! Are you sure you want to add it again?</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_tr<b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b>
This operation will remove all download items in this queue
from "All Downloads" list!
mainwindow_src_ui_tr<b>cep</b>: Connections: mainwindow_src_ui_tr<b>]N }</b>Downloaded: mainwindow_src_ui_tr<b>RiOYe</b>Estimated time left: mainwindow_src_ui_tr<b>c</b> Link: mainwindow_src_ui_trZ<b>Sorry! You can't remove default queue!</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>r`</b>Status: mainwindow_src_ui_tr<b>O ^</b>Transfer rate: mainwindow_src_ui_trR<center>Do you want to continue?</center>)
Do you want to continue?
mainwindow_src_ui_tr*Aria2 did not respondAria2 did not respondmainwindow_src_ui_tr,Aria2 did not respond!Aria2 did not respond!mainwindow_src_ui_trPAria2 lg T^_{I_Persepolis \W( 2 yTQk!\FAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_trAria2 g*cAria2 disconnected!mainwindow_src_ui_tr*hgO`vQ~^vT/ Persepolis'Check your network & Restart Persepolismainwindow_src_ui_trN }[bDownload Completemainwindow_src_ui_tr$Download ScheduledDownload Scheduledmainwindow_src_ui_trN }r`Download Startsmainwindow_src_ui_tr N }]P\kbDownload Stoppedmainwindow_src_ui_trPDownload is in progress by video finder!(Download is in progress by video finder!mainwindow_src_ui_tr  - Error - mainwindow_src_ui_tr ...Error...mainwindow_src_ui_tr ...Error: mainwindow_src_ui_trHide options Hide optionsmainwindow_src_ui_tr.Minimize to system trayMinimize to system traymainwindow_src_ui_trMoving is Moving ismainwindow_src_ui_trNot Found Not Foundmainwindow_src_ui_tr2Not enough free space in:Not enough free space in:mainwindow_src_ui_tr:Operation was not successful!Operation was not successful!mainwindow_src_ui_trOperation was not successful! Please stop the following category first: HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr dO\Y1%0Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr,Persepolis elՏcR0 Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_trPersepolis kcW(QsPersepolis is shutting downmainwindow_src_ui_trXPersepolis is trying to connect! be patient!,Persepolis is trying to connect! be patient!mainwindow_src_ui_tr,Persepolis kcW(\Տcz {I+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr0Persepolis ]bRec aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr z {I...Please Wait...mainwindow_src_ui_trLPlease resume the following category: &Please resume the following category: mainwindow_src_ui_trHPlease stop download progress first.$Please stop download progress first.mainwindow_src_ui_trTPlease stop the following category first: *Please stop the following category first: mainwindow_src_ui_trHPlease stop the following category: $Please stop the following category: mainwindow_src_ui_trTPlease stop the following download first: *Please stop the following download first: mainwindow_src_ui_tr"Please try again.Please try again.mainwindow_src_ui_tr R]P\kbQueue Stopped!mainwindow_src_ui_tr R[bQueue completed!mainwindow_src_ui_tr QY...Ready...mainwindow_src_ui_trec aria2...Reconnecting Aria2...mainwindow_src_ui_trT/ PersepolisRestart Persepolismainwindow_src_ui_tr4Send selected downloads toSend selected downloads tomainwindow_src_ui_trSend toSend tomainwindow_src_ui_tr f>y:N;zSShow main Windowmainwindow_src_ui_trShow options Show optionsmainwindow_src_ui_trVSome items didn't transferred successfully!+Some items didn't transferred successfully!mainwindow_src_ui_trSort bySort bymainwindow_src_ui_tr2Stop all downloads first!Stop all downloads first!mainwindow_src_ui_trFStop the following download first: #Stop the following download first: mainwindow_src_ui_trTry again Try againmainwindow_src_ui_trTry again! Try again!mainwindow_src_ui_trSuan error occurredmainwindow_src_ui_trbe patient! be patient!mainwindow_src_ui_tr0ffmpeg is not installed!ffmpeg is not installed!mainwindow_src_ui_trfinished! finished!mainwindow_src_ui_trmuxing error muxing errormainwindow_src_ui_trO`v|~W(20yQyour system in 20 secondsmainwindow_src_ui_tr downloaded downloadedmainwindow_ui_tr&N } &Downloadmainwindow_ui_tr&&Editmainwindow_ui_tr&eN&Filemainwindow_ui_tr&^.R&Helpmainwindow_ui_tr &Queue&Queuemainwindow_ui_tr &View&Viewmainwindow_ui_tr<b>eNr`</b>Audio File Status: mainwindow_ui_tr4<b>Audio file status: </b>Audio file status: mainwindow_ui_tr,<b>Muxing status: </b>Muxing status: mainwindow_ui_tr<b>Status: </b>Status: mainwindow_ui_tr<b>ƘeNr`</b>Video File Status: mainwindow_ui_tr4<b>Video file status: </b>Video file status: mainwindow_ui_trNkd y\;kb|~ߏQewaw r`0 Yg`vu5n{tVhRfP\|~ bS_kd y0

This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically.

mainwindow_ui_tr AboutAboutmainwindow_ui_tr ActiveActivemainwindow_ui_tr e^N }cAdd New Download Linkmainwindow_ui_tre^N }c...Add New Download Link...mainwindow_ui_trAfter downloadAfter downloadmainwindow_ui_tr ApplyApplymainwindow_ui_trCategoryCategorymainwindow_ui_tr ndN }RhClear Download Listmainwindow_ui_tr@Clear all items in download list Clear all items in download listmainwindow_ui_trCompleteCompletemainwindow_ui_trConnections Connectionsmainwindow_ui_tr R^eRCreate New Queue...mainwindow_ui_tr2Create new download queueCreate new download queuemainwindow_ui_trR d N-vN }eNDelete Selected Download Filesmainwindow_ui_trDownloadDownloadmainwindow_ui_trN }r`Download Statusmainwindow_ui_trDDownload bottom of the list first"Download bottom of the list firstmainwindow_ui_tr,N Youtube SQvNQzN }Ƙb1Download video or audio from Youtube, Vimeo, etc.mainwindow_ui_trDownloaded Downloadedmainwindow_ui_trEditEditmainwindow_ui_trEnd TimeEnd Timemainwindow_ui_trErrormainwindow_ui_trRiOYeEstimated Time Leftmainwindow_ui_trExitExitmainwindow_ui_trFileFilemainwindow_ui_trFile Name File Namemainwindow_ui_treNY'\ File Sizemainwindow_ui_trgb~Ƙc...Find Video Links...mainwindow_ui_tr k!\egFirst Try Datemainwindow_ui_trHelpHelpmainwindow_ui_trϐ y Hide Optionsmainwindow_ui_trNeg,[Qec...Import Links from Text File...mainwindow_ui_tr;kb|~waw Keep System Awake!mainwindow_ui_tr gT\eg Last Try Datemainwindow_ui_trLimit Speed Limit Speedmainwindow_ui_trLinkLinkmainwindow_ui_trg\SR0|~bXvMinimize to System Traymainwindow_ui_tr&\b@ vN }eNyRQvNeNY9....Move Selected Download Files to Another Foldermainwindow_ui_tr&\b@ vN }eNyRQvNeNY9...1Move Selected Download Files to Another Folder...mainwindow_ui_tr N yb@ yvMove Selected Items Downmainwindow_ui_tr N yb@ yvMove Selected Items Upmainwindow_ui_trZMove currently selected items down by one row-Move currently selected items down by one rowmainwindow_ui_trVMove currently selected items up by one row+Move currently selected items up by one rowmainwindow_ui_trNot Active Not Activemainwindow_ui_trbS_؋N }eNY9Open Default Download Foldermainwindow_ui_trbS_N }eNY9Open Download Foldermainwindow_ui_trbS_eN... Open File...mainwindow_ui_trPause DownloadPause Downloadmainwindow_ui_trPercentage Percentagemainwindow_ui_tr6Persepolis Download ManagerPersepolis Download Managermainwindow_ui_trPreferences Preferencesmainwindow_ui_trProgressProgressmainwindow_ui_trProperties Propertiesmainwindow_ui_tr QueueQueuemainwindow_ui_tr ]QkdR Remove Queuemainwindow_ui_trR dRhN-b@ vN }#Remove Selected Downloads from Listmainwindow_ui_tr"Remove this queueRemove this queuemainwindow_ui_trN bReport an Issuemainwindow_ui_trReport an issueReport an issuemainwindow_ui_trResume DownloadResume Downloadmainwindow_ui_tr bS_e_eN Show Log Filemainwindow_ui_tr f>y:SUh Show Menubarmainwindow_ui_tr f>y:OhShow Side Panelmainwindow_ui_trf>y:|~bXvVhShow System Tray Iconmainwindow_ui_trf>y:/|~bXvVhShow/Hide system tray iconmainwindow_ui_trShut Down Shut Downmainwindow_ui_trSizeSizemainwindow_ui_trSort bySort bymainwindow_ui_tr _YkdR Start Queuemainwindow_ui_trStart Time Start Timemainwindow_ui_tr Start this queueStart this queuemainwindow_ui_trStartedStartedmainwindow_ui_tr StatusStatusmainwindow_ui_trP\kbb@g m;RN }Stop All Active Downloadsmainwindow_ui_trStop Download Stop Downloadmainwindow_ui_tr P\kbkdR Stop Queuemainwindow_ui_trStop this queueStop this queuemainwindow_ui_tr(Stop/Cancel DownloadStop/Cancel Downloadmainwindow_ui_tr O s Transfer Ratemainwindow_ui_trV&ideo Finder V&ideo Findermainwindow_ui_trVideo Finder Video Findermainwindow_ui_trViewViewmainwindow_ui_tr,Aria2 did not respond!Aria2 did not respond!progress_src_ui_tr&Aria2 disconnected!Aria2 disconnected!progress_src_ui_trXPersepolis is trying to connect! be patient!,Persepolis is trying to connect! be patient!progress_src_ui_tr"Please try again.Please try again.progress_src_ui_trTry again! Try again!progress_src_ui_trAfter downloadAfter downloadprogress_ui_tr ApplyApplyprogress_ui_tr(Download InformationDownload Informationprogress_ui_tr Download OptionsDownload Optionsprogress_ui_trDownloaded: Downloaded:progress_ui_tr(Estimated time left:Estimated time left:progress_ui_trP Limit speedprogress_ui_trcLink: progress_ui_trcepNumber of connections: progress_ui_tr PausePauseprogress_ui_tr6Persepolis Download ManagerPersepolis Download Managerprogress_ui_tr ResumeResumeprogress_ui_trShut Down Shut Downprogress_ui_trStatus: Status: progress_ui_trStopStopprogress_ui_trTransfer rate: Transfer rate: progress_ui_tr<b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr<b><center>This shortcut has been used before! Use another one!</center></b>_
This shortcut has been used before! Use another one!
setting_src_ui_tr&Restart Persepolis!Restart Persepolis!setting_src_ui_tr*<html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_trh<html><head/><body><p>Format HH:MM</p></body></html>4

Format HH:MM

 setting_ui_tr<html><head/><body><p>Set number of tries if download failed.</p></body></html>O

Set number of tries if download failed.

 setting_ui_trX<html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr<html><head/><body><p>Set timeout in seconds. </p></body></html>@

Set timeout in seconds.

 setting_ui_tr<html><head/><body><p>This feature may not work in your operating system.</p></body></html>[

This feature may not work in your operating system.

 setting_ui_tr<html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_tr ActionAction setting_ui_tr e^N }cAdd New Download Link setting_ui_tr e^ƘcAdd New Video Link setting_ui_tr CancelCancel setting_ui_trCategoryCategory setting_ui_tr ChangeChange setting_ui_tr2Change Aria2 default pathChange Aria2 default path setting_ui_trColor scheme: Color scheme:  setting_ui_tr[NIRColumns Customization setting_ui_trConnections Connections setting_ui_trDefaultsDefaults setting_ui_tr Download OptionsDownload Options setting_ui_tr N }eNY9Download folder:  setting_ui_trDownloaded Downloaded setting_ui_tr bS_weHEnable Notification Sounds setting_ui_trT/u(|~bXvVhEnable system tray icon setting_ui_trRiOYeEstimated Time Left setting_ui_trFile Name File Name setting_ui_tr Font: Font:  setting_ui_trRHide main window if close button clicked.)Hide main window if close button clicked. setting_ui_trIcons: Icons:  setting_ui_trNeg,[QecImport Links from Text File setting_ui_tr$Keep system awake!Keep system awake! setting_ui_tr Language:  setting_ui_trMaximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_trg\SR0|~bXvMinimize to System Tray setting_ui_tr N yb@ yvMove Selected Items Down setting_ui_tr N yb@ yvMove Selected Items Up setting_ui_tr&Notification type: Notification type:  setting_ui_trNotifications Notifications setting_ui_trcepNumber of connections:  setting_ui_tr"Number of tries: Number of tries:  setting_ui_trOKOK setting_ui_trPercentage Percentage setting_ui_trPreferences Preferences setting_ui_trPress new keysPress new keys setting_ui_trQuitQuit setting_ui_tr"RPC port number: RPC port number:  setting_ui_tr2Run Persepolis at startupRun Persepolis at startup setting_ui_trS[XN:Save As setting_ui_trShortcutShortcut setting_ui_trShortcuts Shortcuts setting_ui_trf>y:N }^zSShow download progress window setting_ui_tr f>y:SUh Show menubar setting_ui_tr f>y:OhShow side panel setting_ui_trSizeSize setting_ui_tr Size: Size:  setting_ui_tr StatusStatus setting_ui_trStyle: Style:  setting_ui_tr&Timeout (seconds): Timeout (seconds):  setting_ui_tr]QwhVh\:[Toolbar icons size:  setting_ui_tr O s Transfer Rate setting_ui_tr(Video Finder OptionsVideo Finder Options setting_ui_trVolume: Volume:  setting_ui_tr͋Օ (y)'Wait period between retries (seconds):  setting_ui_trAdd to queue: Add to queue:  text_ui_tr CancelCancel text_ui_tr,Change Download FolderChange Download Folder text_ui_trDeselect All Deselect All text_ui_trN } yDownload Options text_ui_tr N }eNY9Download folder:  text_ui_tr N }[xDownload password:  text_ui_trN }u(b7T T[xDownload username and password text_ui_tr N }u(b7T Download username:  text_ui_trIP:IP: text_ui_trP Limit speed text_ui_tr LinksLinks text_ui_trcepNumber of connections: text_ui_trOKOK text_ui_tr6Persepolis Download ManagerPersepolis Download Manager text_ui_tr Port:Port: text_ui_tr ProxyProxy text_ui_tr Nt[xProxy password:  text_ui_tr Ntu(b7T Proxy username:  text_ui_trSelect All Select All text_ui_tr4<b>Audio file status: </b>Audio file status: video_finder_progress_ui_tr,<b>Muxing status: </b>Muxing status: video_finder_progress_ui_tr4<b>Video file status: </b>Video file status: video_finder_progress_ui_tr~ yAdvanced optionsytaddlink_src_ui_tr h<_ Audio format:ytaddlink_src_ui_tr Fetch Media ListFetch Media Listytaddlink_src_ui_tr,Fetching Media Info...Fetching Media Info...ytaddlink_src_ui_tr>Please enter a valid video linkPlease enter a valid video linkytaddlink_src_ui_trSelect a formatSelect a formatytaddlink_src_ui_trVideo Finder Video Finderytaddlink_src_ui_tr Ƙh<_ Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_zh_CN.ts000066400000000000000000002435211464161131600244740ustar00rootroot00000000000000 about_ui_tr About Persepolis 关于 Persepolis Persepolis Download Manager Persepolis 下载管理器 <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers 开发人员 Translators 译者 License 许可协议 OK OK Special thanks to: 特别鸣谢: AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments <a href=https://github.com/KaranGauswami/socks-to-http-proxy>Socks to http proxy project</a> Version 4.2.0 TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! addlink_ui_tr Add to category: 添加到类别: Proxy 代理 IP: IP 地址: Port: 端口: Change Download Folder 更改下载文件夹 Download Folder: 下载文件夹: Cancel 取消 OK OK Link 链接 More Options 更多选项 Advanced Options 高级选项 Referrer: Referrer: Header: Header: Load cookies: 加载 cookies: User agent: User agent: Add Download Link 添加下载链接 Download link: 下载链接: Change file name: 更改文件名: Detect System Proxy Settings 检测系统代理设置 Proxy password: 代理密码: Proxy username: 代理用户名: Download username and password 下载用户名和密码 Download username: 下载用户名: Download password: 下载密码: Remember this path 记住此路径 Start time 开始时间 End time 结束时间 Limit speed 限速 Number of connections: 连接数: Download Later 稍后下载 HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>文件名</b>: <b>Size</b>: <b>大小</b>: after_download_ui_tr Persepolis Download Manager Persepolis 下载管理器 Open File 打开文件 Open Download Folder 打开下载文件夹 OK OK Don't show this message again. 不再显示这条信息。 <b>Download Completed!</b> <b>下载完成!</b> <b>Save as</b>: <b>另存为</b>: <b>Link</b>: <b>链接</b>: log_window_ui_tr Persepolis Log Persepolis 日志 Report Issue 上报问题 Close 关闭 Copy Selected to Clipboard 复制已选内容到剪贴板 Refresh Log Messages 刷新日志信息 Clear Log Messages 清除日志信息 mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! 队列已停止! Persepolis is shutting down Persepolis 正在关闭 your system in 20 seconds 你的系统在20秒内 Queue completed! 队列完成! Show main Window 显示主窗口 Please Wait... 请稍等... Ready... 准备... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 没有响应!请耐心等待!Persepolis 将在 2 秒后再次尝试! Error... 错误... Persepolis can not connect to Aria2 Persepolis 无法连接到 Aria2 Check your network & Restart Persepolis 请检查你的网络并重启 Persepolis Restart Persepolis 重启 Persepolis Reconnecting Aria2... 重新连接 aria2... Persepolis reconnected aria2 successfully Persepolis 已成功重新连接 aria2 Error: 错误... <b>Link</b>: <b>链接</b>: <b>Downloaded</b>: <b>已下载</b>: <b>Transfer rate</b>: <b>传输速度</b>: <b>Estimated time left</b>: <b>预计剩余时间</b>: <b>Connections</b>: <b>连接数</b>: <b>Status</b>: <b>状态</b>: Download Stopped 下载已停止 Error - 错误 - Download Complete 下载完成 <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>This link has been added before! Are you sure you want to add it again?</center></b> Download Starts 下载状态 Download Scheduled Download Scheduled Operation was not successful. 操作失败。 Please resume the following category: Please resume the following category: Aria2 disconnected! Aria2 未连接! Persepolis is trying to connect!be patient! Persepolis 正在尝试连接!请稍等! Aria2 did not respond! Aria2 did not respond! Try again! Try again! Aria2 did not respond Aria2 did not respond Try again Try again Please stop the following category: Please stop the following category: Persepolis is trying to connect! be patient! Persepolis is trying to connect! be patient! Please try again. Please try again. Minimize to system tray Minimize to system tray Not Found Not Found Operation was not successful! Operation was not successful! Operation was not successful! Please stop the following category first: Operation was not successful! Please stop the following category first: Please stop the following download first: Please stop the following download first: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <center>Do you want to continue?</center> <center>Do you want to continue?</center> Please stop the following category first: Please stop the following category first: </b>" already exists! </b>" already exists! Send selected downloads to Send selected downloads to Send to Send to Sort by Sort by <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b>Sorry! You can't remove default queue!</b> <b>Sorry! You can't remove default queue!</b> Some items didn't transferred successfully! Some items didn't transferred successfully! Please stop download progress first. Please stop download progress first. Hide options Hide options Show options Show options Stop all downloads first! Stop all downloads first! Moving is Moving is finished! finished! Download is in progress by video finder! Download is in progress by video finder! be patient! be patient! Stop the following download first: Stop the following download first: ffmpeg is not installed! ffmpeg is not installed! Not enough free space in: Not enough free space in: muxing error muxing error an error occurred 发生错误 Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File File Edit Edit View View Download Download Queue Queue Video Finder Video Finder Help Help Sort by Sort by Persepolis Download Manager Persepolis Download Manager Category Category File Name File Name Status Status Size Size Downloaded Downloaded Percentage Percentage Connections Connections Link Link &File &文件 &Edit &编辑 &View &View &Download &下载 &Queue &Queue &Help &帮助 Show/Hide system tray icon 显示/隐藏系统托盘图标 Add New Download Link 新建下载链接 Resume Download Resume Download Pause Download Pause Download Stop Download Stop Download Stop/Cancel Download Stop/Cancel Download Properties Properties Progress Progress Exit Exit Clear all items in download list Clear all items in download list Create new download queue Create new download queue Remove this queue Remove this queue Start this queue Start this queue Stop this queue Stop this queue Move currently selected items up by one row Move currently selected items up by one row Move currently selected items down by one row Move currently selected items down by one row Preferences Preferences About About Report an issue Report an issue Start Time Start Time End Time End Time Download bottom of the list first Download bottom of the list first Limit Speed Limit Speed Apply Apply After download After download Shut Down Shut Down V&ideo Finder V&ideo Finder <b>Video file status: </b> <b>Video file status: </b> <b>Audio file status: </b> <b>Audio file status: </b> <b>Status: </b> <b>Status: </b> <b>Muxing status: </b> <b>Muxing status: </b> downloaded downloaded Active Active Not Active Not Active Started Started Error 错误 Complete Complete Transfer Rate 传输速率: Estimated Time Left 预计剩余时间: First Try Date 首次尝试日期 Last Try Date 最后尝试日期 Find Video Links... 查找视频链接... Download video or audio from Youtube, Vimeo, etc. 从 Youtube 及其他网站下载视频或音频 Stop All Active Downloads 停止所有活动下载 File Size 文件大小 Download Status 下载状态 Show System Tray Icon 显示系统托盘图标 Show Menubar 显示菜单栏 Show Side Panel 显示侧边栏 Minimize to System Tray 最小化到系统托盘 Add New Download Link... 新建下载链接... Import Links from Text File... 从文本导入链接... Create a text file and put links in it, line by line! Open File... 打开文件... Open Download Folder 打开下载文件夹 Open Default Download Folder 打开默认下载文件夹 Clear Download List 清除下载列表 Remove Selected Downloads from List 删除列表中所选的下载 Delete Selected Download Files 删除选中的下载文件 Move Selected Download Files to Another Folder... 将所选的下载文件移动至其他文件夹... Move Selected Download Files to Another Folder 将所选的下载文件移动至其他文件夹... Create New Queue... 创建新列队 Remove Queue 已出此列队 Start Queue 开始此列队 Stop Queue 停止此列队 Move Selected Items Up 上移所选项目 Move Selected Items Down 下移所选项目 Report an Issue 上报问题 Show Log File 打开日志文件 Hide Options 隐藏选项 Keep System Awake! 阻止系统睡眠! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> 此选项将阻止系统进入睡眠状态。 如果您的电源管理器自动暂停系统,请打开此选项。 Start Mixing <b>Video File Status: </b> <b>视频文件状态:</b> <b>Audio File Status: </b> <b>音频文件状态:</b> <b>Mixing status: </b> Import Links from Clipboard... Import Links From Clipboard progress_src_ui_tr Aria2 disconnected! Aria2 disconnected! Persepolis is trying to connect! be patient! Persepolis is trying to connect! be patient! Aria2 did not respond! Aria2 did not respond! Please try again. Please try again. Try again! Try again! progress_ui_tr Persepolis Download Manager Persepolis Download Manager Status: Status: Downloaded: Downloaded: Transfer rate: Transfer rate: Estimated time left: Estimated time left: Number of connections: 连接数: Download Information Download Information After download After download Apply Apply Shut Down Shut Down Download Options Download Options Resume Resume Pause Pause Stop Stop Link: 链接: Limit speed 限速 setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> Restart Persepolis! Restart Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> <b><center>This shortcut has been used before! Use another one!</center></b> setting_ui_tr Preferences Preferences <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>Set number of tries if download failed.</p></body></html> Number of tries: Number of tries: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> Timeout (seconds): Timeout (seconds): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> Number of connections: 连接数: RPC port number: RPC port number: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> Change Aria2 default path Change Aria2 default path Change Change Download Options Download Options Volume: Volume: Notifications Notifications Style: Style: Color scheme: Color scheme: Icons: Icons: Notification type: Notification type: Font: Font: Size: Size: Run Persepolis at startup Run Persepolis at startup Keep system awake! Keep system awake! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>Format HH:MM</p></body></html> File Name File Name Status Status Size Size Downloaded Downloaded Percentage Percentage Connections Connections Category Category Video Finder Options Video Finder Options Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> Defaults Defaults Cancel Cancel OK OK Press new keys Press new keys Action Action Shortcut Shortcut Shortcuts Shortcuts Quit Quit Hide main window if close button clicked. Hide main window if close button clicked. <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>This feature may not work in your operating system.</p></body></html> Language: 语言: Minimize to System Tray 最小化到系统托盘 Remove Download Items Delete Download Items Move Selected Items Up 上移所选项目 Move Selected Items Down 下移所选项目 Add New Download Link 新建下载链接 Add New Video Link 新建视频链接 Import Links from Text File 从文本导入链接 Wait period between retries (seconds): 重试间隔 (秒): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: 下载文件夹: Create subfolders for Music,Videos, ... in default download folder Save As 另存为 Enable Notification Sounds 打开通知音效 Toolbar icons size: 工具栏图标尺寸: If browser is opened, start Persepolis in system tray Enable system tray icon 启用系统托盘图标 Show download complete dialog when download is finished Show menubar 显示菜单栏 Show side panel 显示侧边栏 Show download progress window 显示下载进度窗口 <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate 传输速率: Estimated Time Left 预计剩余时间: First Try Date Last Try Date Columns Customization 自定义列 Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> Check system clipboard for copied links <html><head/><body><p>The program will automatically check the clipboard for copied links. </p></body></html> text_ui_tr Persepolis Download Manager Persepolis Download Manager Links Links Select All Select All Deselect All Deselect All Add to queue: Add to queue: Proxy Proxy IP: IP: Port: Port: Change Download Folder Change Download Folder OK OK Cancel Cancel Download Options 下载选项 Proxy password: 代理密码: Proxy username: 代理用户名: Download username and password 下载用户名和密码 Download username: 下载用户名: Download password: 下载密码: Download folder: 下载文件夹: Limit speed 限速 Number of connections: 连接数: video_finder_progress_ui_tr <b>Video file status: </b> <b>Video file status: </b> <b>Audio file status: </b> <b>Audio file status: </b> <b>Muxing status: </b> <b>Muxing status: </b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder Video Finder Fetch Media List Fetch Media List Select a format Select a format Please enter a valid video link Please enter a valid video link Fetching Media Info... Fetching Media Info... Video format: 视频格式: Audio format: 音频格式: Advanced options 高级选项 persepolisdm-persepolis-867ee76/resources/locales/ui_zh_TW.qm000066400000000000000000000516331464161131600245160ustar00rootroot00000000000000z^=z%3*tJII=IFb>>m^:IW?J a!nT")01T'1T?_. l_`i<$bv 54D>$>HX .E9ZI o)^wJJ-B#-BH]9N$9NI!<=EG(&M?$]1xDZ xDZ1JKCD(@)*2֣,"_1'R*-u,6`x>j>q +@ > $/Q AN W,d ^+ `. gEr mp }Q] ~! 2F F0W U U+ UB O{ g` ^8 8 "ZW*- _ _%d if if- s>q `4d  YpD .x (EC ,! Fq Uq `r`A gn j n< v z  {Ǝ w% w1 H0 ?& & > m 7) / 5.9 (, 2SY e.-o e.44 st. q 5 q e NV  3; BU + C- B"  c C C/ \e' q B B n B+> B3 BG| i"!.d*7I7II_xBCxBFNdJ1D220 F6?r]>O]>1jiTD^{(}p   V@[N[+$q$q0J?4;.){>iK<a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a>Ihttps://persepolisdm.github.io about_ui_tr<a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a>Mhttps://telegram.me/persepolisdm about_ui_tr<a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a>Mhttps://twitter.com/persepolisdm about_ui_tr About PersepolisAbout Persepolis about_ui_trv| Developers about_ui_trck hk>License about_ui_trOKOK about_ui_tr Persepolis N {tVhPersepolis Download Manager about_ui_trSpecial thanks to: about_ui_tro Translators about_ui_tr RQe^R%Add to category:  addlink_ui_tr2xAdvanced Options addlink_ui_trSmCancel addlink_ui_trfe9N eY>Change Download Folder addlink_ui_tr N eY>Download Folder:  addlink_ui_trj-Header:  addlink_ui_tr IP OMW@IP:  addlink_ui_tr#}PLink addlink_ui_tr Qe CookieLoad cookies:  addlink_ui_trfYx More Options addlink_ui_trOKOK addlink_ui_tr#cWPort: addlink_ui_tr ProxyProxy addlink_ui_tr SqgOMW@ Referrer:  addlink_ui_tr Ou(Nt User agent:  addlink_ui_tr<b>jT </b>File name: after_download_src_ui_tr<b>Y'\</b> Size: after_download_src_ui_trOK OK after_download_ui_trU_jhH Open File after_download_ui_tr<b>N [b</b>Download Completed!after_download_ui_tr<b>#}P</b> Link: after_download_ui_tr<b>S[Xp</b>Save as: after_download_ui_trN Qoy:kd `oDon't show this message again.after_download_ui_trU_N eY>Open Download Folderafter_download_ui_tr Persepolis N {tVhPersepolis Download Managerafter_download_ui_trPersepolis e劌Persepolis Loglog_window_ui_trVX1UOL Report Issuelog_window_ui_tr</b>" ][XW(" already exists!mainwindow_src_ui_tr<b><center>]}eXNkd#}PN `x[QRQeNk!U</center></b>r
This link has been added before! Are you sure you want to add it again?
mainwindow_src_ui_trN<b><center>kddO\\l8NER*d]N vjhH</center></b>{
This operation will delete downloaded files from your hard disk
PERMANENTLY!
mainwindow_src_ui_tr<b>#cex</b>Connections: mainwindow_src_ui_tr<b>]N </b> Downloaded: mainwindow_src_ui_tr<b>RifB</b> Estimated time left: mainwindow_src_ui_tr<b>#}P</b> Link: mainwindow_src_ui_tr(<b>bkI`N yd-OGR</b>-Sorry! You can't remove default queue!mainwindow_src_ui_tr<b>raK</b> Status: mainwindow_src_ui_tr<b>P8^</b> Transfer rate: mainwindow_src_ui_tr2<center>`x[~|~U</center>)
Do you want to continue?
mainwindow_src_ui_trAria2 Y1SVaAria2 did not respondmainwindow_src_ui_trAria2 Y1SVaAria2 did not respond!mainwindow_src_ui_trHAria2 Y1SVaz PPersepolis \W( 2 y_͊fFAria2 didn't respond! be patient! Persepolis tries again in 2 seconds!mainwindow_src_ui_trAria2 g*#cAria2 disconnected!mainwindow_src_ui_tr2jg`v}#}N&eU_R Persepolis'Check your network & Restart Persepolismainwindow_src_ui_trN [bDownload Completemainwindow_src_ui_tr N ]cz Download Scheduledmainwindow_src_ui_trN YDownload Startsmainwindow_src_ui_tr N ]P\kbDownload Stoppedmainwindow_src_ui_tr_qrGd\ ]QwkcW(N (Download is in progress by video finder!mainwindow_src_ui_tr / - Error - mainwindow_src_ui_trv|u/...Error...mainwindow_src_ui_tr/Error: mainwindow_src_ui_trϐx Hide optionsmainwindow_src_ui_trg\S|}qS#Minimize to system traymainwindow_src_ui_tr][b Moving ismainwindow_src_ui_trb~N R0 Not Foundmainwindow_src_ui_tr zzN Not enough free space in:mainwindow_src_ui_tr dO\Y1eWOperation was not successful!mainwindow_src_ui_trdO\Y1eWQHP\kbNN ^R%HOperation was not successful! Please stop the following category first: mainwindow_src_ui_tr dO\Y1eW0Operation was not successful.mainwindow_src_ui_trPersepolis Persepolismainwindow_src_ui_tr,Persepolis q!lՐ#c Aria2#Persepolis can not connect to Aria2mainwindow_src_ui_tr&Persepolis \W( 20 y_Persepolis is shutting downmainwindow_src_ui_tr,Persepolis kcW(Vf#cz P,Persepolis is trying to connect! be patient!mainwindow_src_ui_tr,Persepolis kcW(Vf#cz P+Persepolis is trying to connect!be patient!mainwindow_src_ui_tr2Persepolis ]bRe#c aria2)Persepolis reconnected aria2 successfullymainwindow_src_ui_tr z P...Please Wait...mainwindow_src_ui_tr~|~NN ^R%&Please resume the following category: mainwindow_src_ui_trQHP\kbN 2^$Please stop download progress first.mainwindow_src_ui_trQHP\kbNN ^R%*Please stop the following category first: mainwindow_src_ui_trP\kbNN ^R%$Please stop the following category: mainwindow_src_ui_trQHP\kbNN N *Please stop the following download first: mainwindow_src_ui_trˑ͊f0Please try again.mainwindow_src_ui_tr OGR]P\kbQueue Stopped!mainwindow_src_ui_tr OGR][bQueue completed!mainwindow_src_ui_tr \1}...Ready...mainwindow_src_ui_tr kcW(e#c Aria2...Reconnecting Aria2...mainwindow_src_ui_treU_R PersepolisRestart Persepolismainwindow_src_ui_tr\b@xvN PSend selected downloads tomainwindow_src_ui_trPSend tomainwindow_src_ui_tr oy:N;zShow main Windowmainwindow_src_ui_troy:x Show optionsmainwindow_src_ui_trgNvN&g*P8bR+Some items didn't transferred successfully!mainwindow_src_ui_trc^e_Sort bymainwindow_src_ui_trQHP\kbb@g N Stop all downloads first!mainwindow_src_ui_trQHP\kbNN N #Stop the following download first: mainwindow_src_ui_tr͊f Try againmainwindow_src_ui_trˑ͊f Try again!mainwindow_src_ui_trz P be patient!mainwindow_src_ui_trg*[ ffmpegffmpeg is not installed!mainwindow_src_ui_tryR finished!mainwindow_src_ui_trY]/ muxing errormainwindow_src_ui_trj_your system in 20 secondsmainwindow_src_ui_tr]N  downloadedmainwindow_ui_trN (&D) &Downloadmainwindow_ui_tr}/ (&E)&Editmainwindow_ui_trjhH (&F)&Filemainwindow_ui_trSTR (&H)&Helpmainwindow_ui_trOGR (&Q)&Queuemainwindow_ui_trj (&V)&Viewmainwindow_ui_tr<b> jhHraK</b>Audio file status: mainwindow_ui_tr<b>Y]raK</b>Muxing status: mainwindow_ui_tr<b>raK</b>Status: mainwindow_ui_tr<b> jhHraK</b>Video file status: mainwindow_ui_treAboutmainwindow_ui_tr2LN-Activemainwindow_ui_trRQeeN #}PAdd New Download Linkmainwindow_ui_trN _After downloadmainwindow_ui_trYWu(Applymainwindow_ui_tr^R%Categorymainwindow_ui_trndN RhN-vb@g v Clear all items in download listmainwindow_ui_tr[bCompletemainwindow_ui_tr#} Connectionsmainwindow_ui_tr^zeN OGRCreate new download queuemainwindow_ui_trN Downloadmainwindow_ui_trn^vQ*QH N "Download bottom of the list firstmainwindow_ui_tr]N  Downloadedmainwindow_ui_tr}/Editmainwindow_ui_tr}Pg_fBEnd Timemainwindow_ui_tr/Errormainwindow_ui_tr╋Exitmainwindow_ui_trjhHFilemainwindow_ui_trjhHT z1 File Namemainwindow_ui_trSTRHelpmainwindow_ui_trP Limit Speedmainwindow_ui_tr#}PLinkmainwindow_ui_tr\vRMxSvvTN yRNR-Move currently selected items down by one rowmainwindow_ui_tr\vRMxSvvTN yRNR+Move currently selected items up by one rowmainwindow_ui_trnN- Not Activemainwindow_ui_trfP\N Pause Downloadmainwindow_ui_trv~Rk Percentagemainwindow_ui_tr Persepolis N {tVhPersepolis Download Managermainwindow_ui_trx Preferencesmainwindow_ui_tr2^Progressmainwindow_ui_tr\l`' Propertiesmainwindow_ui_trOGRQueuemainwindow_ui_tr ydkdOGRRemove this queuemainwindow_ui_trVX1UOLReport an issuemainwindow_ui_tr~|~N Resume Downloadmainwindow_ui_troy:/|}qS#Wy:Show/Hide system tray iconmainwindow_ui_trj_ Shut Downmainwindow_ui_trY'\Sizemainwindow_ui_trc^e_Sort bymainwindow_ui_trYfB Start Timemainwindow_ui_tr YkdOGRStart this queuemainwindow_ui_tr]YStartedmainwindow_ui_trraKStatusmainwindow_ui_trP\kbN  Stop Downloadmainwindow_ui_tr P\kbkdOGRStop this queuemainwindow_ui_trP\kb/SmN Stop/Cancel Downloadmainwindow_ui_tr_qrGd\ ]Qw (&I) V&ideo Findermainwindow_ui_tr _qrGd\ ]Qw Video Findermainwindow_ui_trjViewmainwindow_ui_trAria2 Y1SVaAria2 did not respond!progress_src_ui_trAria2 g*#cAria2 disconnected!progress_src_ui_tr,Persepolis kcW(Vf#cz P,Persepolis is trying to connect! be patient!progress_src_ui_trˑ͊f0Please try again.progress_src_ui_trˑ͊f Try again!progress_src_ui_trN _After downloadprogress_ui_trYWu(Applyprogress_ui_trN NJ Download Informationprogress_ui_trN xDownload Optionsprogress_ui_tr]N  Downloaded:progress_ui_trRifBEstimated time left:progress_ui_tr#cexNumber of connections: progress_ui_trfP\Pauseprogress_ui_tr Persepolis N {tVhPersepolis Download Managerprogress_ui_tr~|~Resumeprogress_ui_trj_ Shut Downprogress_ui_trraKStatus: progress_ui_trP\kbStopprogress_ui_tr P8^Transfer rate: progress_ui_tr<b><center>ˑeU_R Persepolis</center></b><br><center>gNfRW(eU_R Persepolis _bMgueH</center>{
Restart Persepolis Please!

Some changes take effect after restarting Persepolis
setting_src_ui_tr eU_R PersepolisRestart Persepolis!setting_src_ui_tr<html><head/><body><p>c[ JSON-RPC/XML-RPC O:g Vhv}vW_0Su(W_1024 - 65535-W_6801</p></body></html>

Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801

 setting_ui_tr\<html><head/><body><p>h<_ Ry</p></body></html>4

Format HH:MM

 setting_ui_trj<html><head/><body><p>-nN Y1eW_v͊fk!ex0</p></body></html>O

Set number of tries if download failed.

 setting_ui_tr<html><head/><body><p>-n͊f0uv HTTP O:g VhVP 503 VafB N {tVhg͊fN 0</p></body></html>

Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.

 setting_ui_tr^<html><head/><body><p>-n>fByex0</p></body></html>@

Set timeout in seconds.

 setting_ui_trv<html><head/><body><p>kdRW(`vO\im|}qSq!lkc^8KO\0</p></body></html>[

This feature may not work in your operating system.

 setting_ui_trj<html><head/><body><p>Ou(YP #}SNRN 0</p></body></html>c

Using multiple connections can help speed up your download.

 setting_ui_trdO\Action setting_ui_trSmCancel setting_ui_tr^R%Category setting_ui_trfe9Change setting_ui_trfe9 Aria2 -_Change Aria2 default path setting_ui_trMrColor scheme:  setting_ui_tr#} Connections setting_ui_tr-Defaults setting_ui_trN xDownload Options setting_ui_tr]N  Downloaded setting_ui_trjhHT z1 File Name setting_ui_tr[WWFont:  setting_ui_trdʕܕc  \ωz0)Hide main window if close button clicked. setting_ui_trWy:Icons:  setting_ui_tr;kb|}q2Qewaw j!_Keep system awake! setting_ui_trXdSgY'#}Pex<br/><small>(pVhNk!PYP _qrG#}P)</small>hMaximum number of links to capture:
(If browser sends multiple video links at a time) setting_ui_tr w^WNotification type:  setting_ui_trw Notifications setting_ui_tr#cexNumber of connections:  setting_ui_tr Vfk!exNumber of tries:  setting_ui_trOKOK setting_ui_trv~Rk Percentage setting_ui_trx Preferences setting_ui_tr c N ec uPress new keys setting_ui_trQQuit setting_ui_trRPC W_RPC port number:  setting_ui_tr j_fBU_R PersepolisRun Persepolis at startup setting_ui_tr_cwuShortcut setting_ui_tr_cwu Shortcuts setting_ui_trY'\Size setting_ui_trY'\Size:  setting_ui_trraKStatus setting_ui_trj#_Style:  setting_ui_tr>fB (y)Timeout (seconds):  setting_ui_tr_qrGd\ ]QwxVideo Finder Options setting_ui_trVolume:  setting_ui_tr RQeOGRAdd to queue:  text_ui_trSmCancel text_ui_trfe9N eY>Change Download Folder text_ui_trSmQhx Deselect All text_ui_tr IP OMW@IP: text_ui_tr#}PLinks text_ui_trOKOK text_ui_tr Persepolis N {tVhPersepolis Download Manager text_ui_tr#cWPort: text_ui_tr ProxyProxy text_ui_trQhx Select All text_ui_tr<b> jhHraK</b>Audio file status: video_finder_progress_ui_tr<b>Y]raK</b>Muxing status: video_finder_progress_ui_tr<b> jhHraK</b>Video file status: video_finder_progress_ui_tr2xAdvanced optionsytaddlink_src_ui_tr h<_ Audio format:ytaddlink_src_ui_tr dSZRhFetch Media Listytaddlink_src_ui_trkcW(dSZԌNJ ...Fetching Media Info...ytaddlink_src_ui_trˏ8Qeg eHv #}PPlease enter a valid video linkytaddlink_src_ui_trxdh<_Select a formatytaddlink_src_ui_tr _qrGd\ ]Qw Video Finderytaddlink_src_ui_tr h<_ Video format:ytaddlink_src_ui_trpersepolisdm-persepolis-867ee76/resources/locales/ui_zh_TW.ts000066400000000000000000002351351464161131600245300ustar00rootroot00000000000000 about_ui_tr About Persepolis About Persepolis Persepolis Download Manager Persepolis 下載管理器 <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://persepolisdm.github.io>https://persepolisdm.github.io</a> <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://telegram.me/persepolisdm>https://telegram.me/persepolisdm</a> <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! <a href=https://twitter.com/persepolisdm>https://twitter.com/persepolisdm</a> Developers 開發者 Translators 譯者 License 授權條款 OK OK Special thanks to: 致謝: Version 4.0.1 AliReza AmirSamimi Mohammadreza Abdollahzadeh Sadegh Alirezaie Mostafa Asadi Jafar Akhondali Kia Hamedi H.Rostami Ehsan Titish MohammadAmin Vahedinia TRANSLATORS NOTE: YOU REALLY DON'T NEED TO TRANSLATE THIS PART! Acknowledgments: <a href=https://github.com/aria2/aria2>Aria2c project</a> <a href=https://github.com/yt-dlp/yt-dlp>YT-DLP project</a> <a href=https://github.com/ffmpeg/ffmpeg>FFmpeg project</a> <a href=https://github.com/ginuerzh/gost>Gost project</a> Acknowledgments addlink_ui_tr Add to category: 加入類別: Proxy Proxy IP: IP 位址: Port: 連接埠: Change Download Folder 更改下載資料夾 Download Folder: 下載資料夾: Cancel 取消 OK OK Link 連結 More Options 更多選項 Advanced Options 進階選項 Referrer: 參照位址: Header: 標頭: Load cookies: 載入 Cookie: User agent: 使用者代理: Add Download Link Download link: Change file name: Detect System Proxy Settings Proxy password: Proxy username: Download username and password Download username: Download password: Remember this path Start time End time Limit speed Number of connections: Download Later HTTP HTTPS SOCKS5 after_download_src_ui_tr <b>File name</b>: <b>檔名</b>: <b>Size</b>: <b>大小</b>: after_download_ui_tr Persepolis Download Manager Persepolis 下載管理器 Open File 開啟檔案 Open Download Folder 開啟下載資料夾 OK OK Don't show this message again. 不再顯示此訊息 <b>Download Completed!</b> <b>下載完成!</b> <b>Save as</b>: <b>另存為</b>: <b>Link</b>: <b>連結</b>: log_window_ui_tr Persepolis Log Persepolis 日誌 Report Issue 回報問題 Close Copy Selected to Clipboard Refresh Log Messages Clear Log Messages mainwindow_src_ui_tr Persepolis Persepolis Queue Stopped! 佇列已停止! Persepolis is shutting down Persepolis 將在 20 秒後 your system in 20 seconds 關機 Queue completed! 佇列已完成! Show main Window 顯示主視窗 Please Wait... 請稍候... Ready... 就緒... Aria2 didn't respond! be patient! Persepolis tries again in 2 seconds! Aria2 失去回應!請稍候!Persepolis 將在 2 秒後重試! Error... 發生錯誤... Persepolis can not connect to Aria2 Persepolis 無法連接至 Aria2 Check your network & Restart Persepolis 請檢查您的網路連線並重新啟動 Persepolis Restart Persepolis 重新啟動 Persepolis Reconnecting Aria2... 正在重新連接至 Aria2... Persepolis reconnected aria2 successfully Persepolis 已成功重新連接至 aria2 Error: 錯誤: <b>Link</b>: <b>連結</b>: <b>Downloaded</b>: <b>已下載</b>: <b>Transfer rate</b>: <b>傳輸速度</b>: <b>Estimated time left</b>: <b>預計剩餘時間</b>: <b>Connections</b>: <b>連接數</b>: <b>Status</b>: <b>狀態</b>: Download Stopped 下載已停止 Error - 錯誤 - Download Complete 下載完成 <b><center>This link has been added before! Are you sure you want to add it again?</center></b> <b><center>已經新增過此連結了! 您確定要再加入一次嗎?</center></b> Download Starts 下載開始 Download Scheduled 下載已排程 Operation was not successful. 操作失敗。 Please resume the following category: 請繼續以下類別: Aria2 disconnected! Aria2 未連接! Persepolis is trying to connect!be patient! Persepolis 正在嘗試連接!請稍候! Aria2 did not respond! Aria2 失去回應! Try again! 請重試! Aria2 did not respond Aria2 失去回應 Try again 重試 Please stop the following category: 請停止以下類別: Persepolis is trying to connect! be patient! Persepolis 正在嘗試連接!請稍候! Please try again. 請重試。 Minimize to system tray 最小化至系統匣 Not Found 找不到 Operation was not successful! 操作失敗! Operation was not successful! Please stop the following category first: 操作失敗!請先停止以下類別: Please stop the following download first: 請先停止以下下載: <b><center>This operation will delete downloaded files from your hard disk<br>PERMANENTLY!</center></b> <b><center>此操作將永久刪除已下載的檔案!</center></b> <center>Do you want to continue?</center> <center>您確定要繼續嗎?</center> Please stop the following category first: 請先停止以下類別: </b>" already exists! </b>" 已存在! Send selected downloads to 將所選的下載傳送至 Send to 傳送至 Sort by 排序方式 <b><center>This operation will remove all download items in this queue<br>from "All Downloads" list!</center></b> <b>Sorry! You can't remove default queue!</b> <b>抱歉!您不能移除預設佇列!</b> Some items didn't transferred successfully! 某些項目並未傳輸成功! Please stop download progress first. 請先停止下載進度 Hide options 隱藏選項 Show options 顯示選項 Stop all downloads first! 請先停止所有下載! Moving is 已完成 finished! 移動! Download is in progress by video finder! 影片搜尋工具正在下載! be patient! 請稍候! Stop the following download first: 請先停止以下下載: ffmpeg is not installed! 未安裝 ffmpeg! Not enough free space in: 空間不足: muxing error 多工錯誤 an error occurred Please update Persepolis. There is not enough disk space available at the download folder! Please choose another one or clear some space. yt-dlp is not installed! mainwindow_ui_tr File 檔案 Edit 編輯 View 檢視 Download 下載 Queue 佇列 Video Finder 影片搜尋工具 Help 協助 Sort by 排序方式 Persepolis Download Manager Persepolis 下載管理器 Category 類別 File Name 檔案名稱 Status 狀態 Size 大小 Downloaded 已下載 Percentage 百分比 Connections 連線 Link 連結 &File 檔案 (&F) &Edit 編輯 (&E) &View 檢視 (&V) &Download 下載 (&D) &Queue 佇列 (&Q) &Help 協助 (&H) Show/Hide system tray icon 顯示/隱藏系統匣圖示 Add New Download Link 加入新下載連結 Resume Download 繼續下載 Pause Download 暫停下載 Stop Download 停止下載 Stop/Cancel Download 停止/取消下載 Properties 屬性 Progress 進度 Exit 離開 Clear all items in download list 清除下載列表中的所有項目 Create new download queue 建立新下載佇列 Remove this queue 移除此佇列 Start this queue 開始此佇列 Stop this queue 停止此佇列 Move currently selected items up by one row 將目前選取的項目向上移動一列 Move currently selected items down by one row 將目前選取的項目向下移動一列 Preferences 選項 About 關於 Report an issue 回報問題 Start Time 開始時間 End Time 結束時間 Download bottom of the list first 置底項目優先 下載 Limit Speed 限速 Apply 套用 After download 下載後 Shut Down 關機 V&ideo Finder 影片搜尋工具 (&I) <b>Video file status: </b> <b>視訊檔案狀態:</b> <b>Audio file status: </b> <b>音訊檔案狀態:</b> <b>Status: </b> <b>狀態:</b> <b>Muxing status: </b> <b>多工狀態:</b> downloaded 已下載 Active 進行中 Not Active 閒置中 Started 已開始 Error 錯誤 Complete 完成 Transfer Rate Estimated Time Left First Try Date Last Try Date Find Video Links... Download video or audio from Youtube, Vimeo, etc. Stop All Active Downloads File Size Download Status Show System Tray Icon Show Menubar Show Side Panel Minimize to System Tray Add New Download Link... Import Links from Text File... Create a text file and put links in it, line by line! Open File... Open Download Folder Open Default Download Folder Clear Download List Remove Selected Downloads from List Delete Selected Download Files Move Selected Download Files to Another Folder... Move Selected Download Files to Another Folder Create New Queue... Remove Queue Start Queue Stop Queue Move Selected Items Up Move Selected Items Down Report an Issue Show Log File Hide Options Keep System Awake! <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Start Mixing <b>Video File Status: </b> <b>Audio File Status: </b> <b>Mixing status: </b> progress_src_ui_tr Aria2 disconnected! Aria2 未連接! Persepolis is trying to connect! be patient! Persepolis 正在嘗試連接!請稍候! Aria2 did not respond! Aria2 失去回應! Please try again. 請重試。 Try again! 請重試! progress_ui_tr Persepolis Download Manager Persepolis 下載管理器 Status: 狀態: Downloaded: 已下載: Transfer rate: 傳輸速度: Estimated time left: 預計剩餘時間: Number of connections: 連接數: Download Information 下載資訊 After download 下載後 Apply 套用 Shut Down 關機 Download Options 下載選項 Resume 繼續 Pause 暫停 Stop 停止 Link: Limit speed setting_src_ui_tr <b><center>Restart Persepolis Please!</center></b><br><center>Some changes take effect after restarting Persepolis</center> <b><center>請重新啟動 Persepolis!</center></b><br><center>某些更動在重新啟動 Persepolis 後才會生效</center> Restart Persepolis! 重新啟動 Persepolis! <b><center>This shortcut has been used before! Use another one!</center></b> setting_ui_tr Preferences 選項 <html><head/><body><p>Set number of tries if download failed.</p></body></html> <html><head/><body><p>設置下載失敗後的重試次數。</p></body></html> Number of tries: 嘗試次數: <html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html> <html><head/><body><p>設置重試間隔。當 HTTP 伺服器回傳 503 回應時,下載管理器會重試下載。</p></body></html> <html><head/><body><p>Set timeout in seconds. </p></body></html> <html><head/><body><p>設置逾時秒數。</p></body></html> Timeout (seconds): 逾時 (秒): <html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html> <html><head/><body><p>使用多個連線可以加速下載。</p></body></html> Number of connections: 連接數: RPC port number: RPC 埠號: <html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html> <html><head/><body><p>指定 JSON-RPC/XML-RPC 伺服器監聽的埠號。可用埠號:1024 - 65535 預設埠號:6801</p></body></html> Change Aria2 default path 更改 Aria2 預設路徑 Change 更改 Download Options 下載選項 Volume: 音量: Notifications 通知 Style: 樣式: Color scheme: 配色: Icons: 圖示: Notification type: 通知類型: Font: 字型: Size: 大小: Run Persepolis at startup 開機時啟動 Persepolis Keep system awake! 阻止系統進入睡眠模式! <html><head/><body><p>Format HH:MM</p></body></html> <html><head/><body><p>格式 分:秒</p></body></html> File Name 檔案名稱 Status 狀態 Size 大小 Downloaded 已下載 Percentage 百分比 Connections 連線 Category 類別 Video Finder Options 影片搜尋工具選項 Maximum number of links to capture:<br/><small>(If browser sends multiple video links at a time)</small> 擷取最大連結數:<br/><small>(若瀏覽器一次傳送多個影片連結)</small> Defaults 預設 Cancel 取消 OK OK Press new keys 按下新按鍵 Action 操作 Shortcut 快捷鍵 Shortcuts 快捷鍵 Quit 退出 Hide main window if close button clicked. 若點擊關閉按鈕,將隱藏視窗。 <html><head/><body><p>This feature may not work in your operating system.</p></body></html> <html><head/><body><p>此功能在您的作業系統可能無法正常運作。</p></body></html> Language: Minimize to System Tray Remove Download Items Delete Download Items Move Selected Items Up Move Selected Items Down Add New Download Link Add New Video Link Import Links from Text File Wait period between retries (seconds): Wait period between each download in queue: Don't use certificate to verify the peers <html><head/><body><p>This option avoids SSL/TLS handshake failure. But use it at your own risk!</p></body></html> <html><head/><body><p>Attention: Wrong path may cause problems! Do it carefully or don't change default setting!</p></body></html> Download folder: Create subfolders for Music,Videos, ... in default download folder Save As Enable Notification Sounds Toolbar icons size: If browser is opened, start Persepolis in system tray Enable system tray icon Show download complete dialog when download is finished Show menubar Show side panel Show download progress window <html><head/><body><p>This option will prevent the system from going to sleep. It is necessary if your power manager is suspending the system automatically. </p></body></html> Show these columns: Transfer Rate Estimated Time Left First Try Date Last Try Date Columns Customization Remote time <html><head/><body><p>Retrieve timestamp of the remote file from the remote HTTP/FTP server and if it is available, apply it to the local file.</p></body></html> text_ui_tr Persepolis Download Manager Persepolis 下載管理器 Links 連結 Select All 全選 Deselect All 取消全選 Add to queue: 加入佇列: Proxy Proxy IP: IP 位址: Port: 連接埠: Change Download Folder 更改下載資料夾 OK OK Cancel 取消 Download Options Proxy password: Proxy username: Download username and password Download username: Download password: Download folder: Limit speed Number of connections: video_finder_progress_ui_tr <b>Video file status: </b> <b>視訊檔案狀態:</b> <b>Audio file status: </b> <b>音訊檔案狀態:</b> <b>Muxing status: </b> <b>多工狀態:</b> <b>Mixing status: </b> ytaddlink_src_ui_tr Video Finder 影片搜尋工具 Fetch Media List 擷取媒體列表 Select a format 選擇格式 Please enter a valid video link 請輸入有效的視訊連結 Fetching Media Info... 正在擷取媒體資訊... Video format: 視訊格式: Audio format: 音訊格式: Advanced options 進階選項 persepolisdm-persepolis-867ee76/resources/meson.build000066400000000000000000000002041464161131600231330ustar00rootroot00000000000000icon_files = [ 'com.github.persepolisdm.persepolis.svg', 'persepolis-tray.svg'] install_data(icon_files, install_dir: icondir) persepolisdm-persepolis-867ee76/resources/persepolis-tray.svg000066400000000000000000000042061464161131600246620ustar00rootroot00000000000000 persepolisdm-persepolis-867ee76/resources/pproxy_bundle.py000066400000000000000000000001061464161131600242360ustar00rootroot00000000000000from pproxy.server import main if __name__ == "__main__": main() persepolisdm-persepolis-867ee76/resources/resources.qrc000066400000000000000000000227261464161131600235270ustar00rootroot00000000000000 translators.txt com.github.persepolisdm.persepolis.svg persepolis-tray.svg Breeze/about.svg Breeze/add.svg Breeze/exit.svg Breeze/folder.svg Breeze/minimize.svg Breeze/ok.svg Breeze/pause.svg Breeze/play.svg Breeze/preferences.svg Breeze/remove.svg Breeze/setting.svg Breeze/stop.svg Breeze/stop_all.svg Breeze/trash.svg Breeze/window.svg Breeze/file.svg Breeze/multi_remove.svg Breeze/multi_trash.svg Breeze/select_all.svg Breeze/add_queue.svg Breeze/start_queue.svg Breeze/stop_queue.svg Breeze/pause_queue.svg Breeze/remove_queue.svg Breeze/menu.svg Breeze/up.svg Breeze/down.svg Breeze/multi_up.svg Breeze/multi_down.svg Breeze/clipboard.svg Breeze/refresh.svg Breeze/video_finder.svg Breeze-Dark/about.svg Breeze-Dark/add.svg Breeze-Dark/exit.svg Breeze-Dark/folder.svg Breeze-Dark/minimize.svg Breeze-Dark/ok.svg Breeze-Dark/pause.svg Breeze-Dark/play.svg Breeze-Dark/preferences.svg Breeze-Dark/remove.svg Breeze-Dark/setting.svg Breeze-Dark/stop.svg Breeze-Dark/stop_all.svg Breeze-Dark/trash.svg Breeze-Dark/window.svg Breeze-Dark/file.svg Breeze-Dark/multi_remove.svg Breeze-Dark/multi_trash.svg Breeze-Dark/select_all.svg Breeze-Dark/add_queue.svg Breeze-Dark/start_queue.svg Breeze-Dark/stop_queue.svg Breeze-Dark/pause_queue.svg Breeze-Dark/remove_queue.svg Breeze-Dark/menu.svg Breeze-Dark/up.svg Breeze-Dark/down.svg Breeze-Dark/multi_up.svg Breeze-Dark/multi_down.svg Breeze-Dark/clipboard.svg Breeze-Dark/refresh.svg Breeze-Dark/video_finder.svg Papirus/about.svg Papirus/add.svg Papirus/exit.svg Papirus/folder.svg Papirus/minimize.svg Papirus/ok.svg Papirus/pause.svg Papirus/play.svg Papirus/preferences.svg Papirus/remove.svg Papirus/setting.svg Papirus/stop.svg Papirus/stop_all.svg Papirus/trash.svg Papirus/window.svg Papirus/file.svg Papirus/multi_remove.svg Papirus/multi_trash.svg Papirus/select_all.svg Papirus/add_queue.svg Papirus/start_queue.svg Papirus/stop_queue.svg Papirus/pause_queue.svg Papirus/remove_queue.svg Papirus/menu.svg Papirus/up.svg Papirus/down.svg Papirus/multi_up.svg Papirus/multi_down.svg Papirus/clipboard.svg Papirus/refresh.svg Papirus/video_finder.svg Papirus-Dark/about.svg Papirus-Dark/add.svg Papirus-Dark/exit.svg Papirus-Dark/folder.svg Papirus-Dark/minimize.svg Papirus-Dark/ok.svg Papirus-Dark/pause.svg Papirus-Dark/play.svg Papirus-Dark/preferences.svg Papirus-Dark/remove.svg Papirus-Dark/setting.svg Papirus-Dark/stop.svg Papirus-Dark/stop_all.svg Papirus-Dark/trash.svg Papirus-Dark/window.svg Papirus-Dark/file.svg Papirus-Dark/multi_remove.svg Papirus-Dark/multi_trash.svg Papirus-Dark/select_all.svg Papirus-Dark/add_queue.svg Papirus-Dark/start_queue.svg Papirus-Dark/stop_queue.svg Papirus-Dark/pause_queue.svg Papirus-Dark/remove_queue.svg Papirus-Dark/menu.svg Papirus-Dark/up.svg Papirus-Dark/down.svg Papirus-Dark/multi_up.svg Papirus-Dark/multi_down.svg Papirus-Dark/clipboard.svg Papirus-Dark/refresh.svg Papirus-Dark/video_finder.svg Papirus-Light/about.svg Papirus-Light/add.svg Papirus-Light/exit.svg Papirus-Light/folder.svg Papirus-Light/minimize.svg Papirus-Light/ok.svg Papirus-Light/pause.svg Papirus-Light/play.svg Papirus-Light/preferences.svg Papirus-Light/remove.svg Papirus-Light/setting.svg Papirus-Light/stop.svg Papirus-Light/stop_all.svg Papirus-Light/trash.svg Papirus-Light/window.svg Papirus-Light/file.svg Papirus-Light/multi_remove.svg Papirus-Light/multi_trash.svg Papirus-Light/select_all.svg Papirus-Light/add_queue.svg Papirus-Light/start_queue.svg Papirus-Light/stop_queue.svg Papirus-Light/pause_queue.svg Papirus-Light/remove_queue.svg Papirus-Light/menu.svg Papirus-Light/up.svg Papirus-Light/down.svg Papirus-Light/multi_up.svg Papirus-Light/multi_down.svg Papirus-Light/clipboard.svg Papirus-Light/refresh.svg Papirus-Light/video_finder.svg dark_style.qss dark fusion/down_arrow_disabled.svg dark fusion/down_arrow.svg dark fusion/down_arrow_hover.svg dark fusion/up_arrow_disabled.svg dark fusion/up_arrow.svg dark fusion/up_arrow_hover.svg dark fusion/left_arrow.svg dark fusion/left_arrow_disabled.svg dark fusion/right_arrow.svg dark fusion/right_arrow_disabled.svg dark fusion/checkbox_checked_disabled.svg dark fusion/checkbox_checked.svg dark fusion/checkbox_indeterminate_disabled.svg dark fusion/checkbox_indeterminate.svg dark fusion/checkbox_unchecked_disabled.svg dark fusion/checkbox_unchecked.svg light_style.qss light fusion/down_arrow_disabled.svg light fusion/down_arrow.svg light fusion/down_arrow_hover.svg light fusion/up_arrow_disabled.svg light fusion/up_arrow.svg light fusion/up_arrow_hover.svg light fusion/left_arrow.svg light fusion/left_arrow_disabled.svg light fusion/right_arrow.svg light fusion/right_arrow_disabled.svg light fusion/checkbox_checked_disabled.svg light fusion/checkbox_checked.svg light fusion/checkbox_indeterminate_disabled.svg light fusion/checkbox_indeterminate.svg light fusion/checkbox_unchecked_disabled.svg light fusion/checkbox_unchecked.svg locales/ui_ar.qm locales/ui_es_ES.qm locales/ui_fr_FR.qm locales/ui_ko.qm locales/ui_pl_PL.qm locales/ui_pt.qm locales/ui_ru.qm locales/ui_tr.qm locales/ui_zh_CN.qm locales/ui_de.qm locales/ui_fa_IR.qm locales/ui_hu.qm locales/ui_nl_NL.qm locales/ui_pt_BR.qm locales/ui_sv.qm locales/ui_tr_TR.qm locales/ui_zh_TW.qm persepolisdm-persepolis-867ee76/resources/resources_generator.sh000077500000000000000000000026751464161131600254260ustar00rootroot00000000000000#!/bin/bash while getopts "trqh" arg;do case $arg in t) translate="1";; r) resources="1";; q) create_qm_files="1";; *) echo "-t updates ui.ts file." echo "-r updates resources.py file." echo "-q create qm files from ts files." esac done # finding parent directory dir=`pwd` parent_dir=`dirname $dir` if [ "$translate" == "1" ];then # generate ui.ts file pylupdate5 -translate-function ui_tr "$dir/translation_files.pro" echo "$dir/locales/ui.ts is generated!" fi if [ "$resources" == "1" ];then # generate resource.py file # for pyqt5 # pyrcc5 resources.qrc -o "$parent_dir/persepolis/gui/resources.py" # for pysside6 rcc -g python -o "$parent_dir/persepolis/gui/resources.py" resources.qrc #add some line to file sed -i '6i try:' "$parent_dir/persepolis/gui/resources.py" sed -i '7i\ from PySide6 import QtCore' "$parent_dir/persepolis/gui/resources.py" sed -i '8i except:' "$parent_dir/persepolis/gui/resources.py" sed -i '9i\ from PyQt5 import QtCore' "$parent_dir/persepolis/gui/resources.py" sed -i '/PySide2/d' "$parent_dir/persepolis/gui/resources.py" echo "$parent_dir/persepolis/gui/resource.py is generated!" fi if [ "$create_qm_files" == "1" ];then for file in $dir/locales/* ;do # generate qm files from ts files lrelease "$file" done fi persepolisdm-persepolis-867ee76/resources/translation_files.pro000066400000000000000000000013721464161131600252420ustar00rootroot00000000000000TEMPLATE = app TARGET = ts INCLUDEPATH += persepolis # Input SOURCES += ../persepolis/gui/about_ui.py \ ../persepolis/gui/addlink_ui.py \ ../persepolis/gui/after_download_ui.py \ ../persepolis/gui/log_window_ui.py \ ../persepolis/gui/mainwindow_ui.py \ ../persepolis/gui/progress_ui.py \ ../persepolis/gui/setting_ui.py \ ../persepolis/gui/text_queue_ui.py \ ../persepolis/gui/video_finder_progress_ui.py\ ../persepolis/scripts/after_download.py \ ../persepolis/scripts/mainwindow.py \ ../persepolis/scripts/progress.py \ ../persepolis/scripts/setting.py \ ../persepolis/scripts/video_finder_addlink.py TRANSLATIONS += locales/ui.ts persepolisdm-persepolis-867ee76/resources/translators.txt000066400000000000000000000063001464161131600241110ustar00rootroot00000000000000Arabic: Majdi Sobain MajdiSobain Saleh Alanazi Sal7_one Rayan M rayanm Rex_sa rex07 Simo simonetworking 明 张 zhuangsha19740612 Chinese (China): 0day 0 0day zyppe 210hcl 哥哥 好 485250464 江 王 664766245 x x 731515713 Charley Yang CharleyY Alan Yee Choyee Yonghui Chen ColoPaul SY C DarciaLee_066 Hiyool J L JULIANLEEEEE Jack Su JackSu 快乐的老鼠宝宝 LaoShuBaby haonan li Li_haonan Liro Liu Liro 明阳 蒋 Lotumn Allure R Riseup Vento Fang Vento8866 安塞斯塔 薇薇安 VivianAncestor Ye Wehchs WehchsYe K X X_K ing YIn YIning yyy zzz ZZyyy 鹏 张 a5357663 yongkang yang acme969290422 AliReza AmirSamimi alireza_amirsamimi altria morgan altria066 anakin micheal anakinlt arthur 韩 arthurh Leon Chen bioleon Gabrielle Chou canonlayido 禅和 李 cc379 Sheng Cheng cs54ysm Davin davinma drhenk Dai drhenkdss ZHAN Dr dts0080 dan chin egg233 chen chen false yining fan fan211210 koishi a ghostxt0 ZARK LEE godiamguilty jiangsheng hong hongjiangsheng dp h huangdp Jackson Hu huming2207 W Z icwaos xiang wang ifoanle 海龙 江 jianghailong haha ha jiangweiyang336 家俊 黄 jiayezhang22 liu li kulierhao k y kyalt leo xxx leoxxx 湖广 廖 liaohuguang lei li lilei9587 旭麒 刘 liuxuqi 戈扬 赵 lucius.z qihao mao maoqihao monowolf Lucas monowolf u muguo muguou eo L nbnatcom Ora Prinzing prinzingora s k qqwwee 斌 熊 qw71111520 Jane Yang qwe866zxc Minagawa Hifumi reeealin 354 6548 richard954 rose tiffany rose_tiffany CUI SAN sanc163sa 佳 于 sheena.ringo Sin Qiu sino1641 giga d togiga 思敏 鲍 tulipasky 刘 俊君 tusks wang yuehu wangyuehu xinpu wei weixinpu mike williams williamsguo T W wt1182657346 xiao wu wu12138 wwj402 cq n xiaolu yin xiao xiaoyinge 一弘 郑 yihong2018 youngcrazyboy 卓琪 刘 you志者 an mu zhenlailu long long zql00l 骏一 戚 zsns1994 徐 大侠 伏城 书罕 向 墨墨墨墨墨 chuantong xu 徐传统 00 000 敷衍伤情 花卷 春 春花卷 German (de): Patrick Meier SonArc Andreas Mueller anzbert Dutch (Netherlands): Heimen Stoffels Vistaus French (France): Cwpute BipBoup cwpute Simon Porte sporte Hungarian: Totya Totya Korean: JungHee Lee MarongHappy Persian (Iran): AliReza AmirSamimi alireza_amirsamimi h_r 71 hayyan711 Mostafa Bodagh mosi2772 Mostafa Asadi mostafaasadi Polish (Poland): FadeMind Maurycy Błaszczak LuxF3rre Arkadiusz Rogóż arcio Portuguese: Antonio Barbosa AlvoErrado2 Portuguese (Brazil): Cirnos Gersonzao Carlos Henrique De Freitas Ferreira Neocazen Thiago Schuch ThigSchuch eltonfabricio10 Marli Masa marlimasa Russian: Victor ViktorOnlin Михаил Сомов belliric300 Nikita Paseka deadman1987 Pavel irbinix Sergey Suhih linuxmasterclub Spanish (Spain): Edgardo Castro Castro eddy9305 Jose G. Jimenez S. josegjimenez Juan Manuel ptero.4 Rubén Fernández rubenterco Toni Estévez toniem Turkish (Turkey): Oğuzhan Aksoy OnePage abc Def abcmen Yaşar Çiv yasarciv67 Chinese (Taiwan): Enfeng Tsao 5iderealArt Sr R sr3296001 qge hao 鸟语花香 Portuguese: Antonio Barbosa AlvoErrado2 Swedish: Kristoffer Grundström Umeaboy persepolisdm-persepolis-867ee76/test/000077500000000000000000000000001464161131600177425ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/test/.pep8000066400000000000000000000000441464161131600206150ustar00rootroot00000000000000[pycodestyle] max_line_length = 120 persepolisdm-persepolis-867ee76/test/test.py000077500000000000000000000024061464161131600213000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 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 . import sys import os import platform # finding os platform os_type = platform.system() # Don't run persepolis as root! if os_type == 'Linux' or os_type == 'FreeBSD' or os_type == 'OpenBSD' or os_type == 'Darwin': uid = os.getuid() if uid == 0: print('Do not run persepolis as root.') sys.exit(1) cwd = os.path.abspath(__file__) run_dir = os.path.dirname(cwd) # if persepolis run in test folder print('persepolis is running from test folder') parent_dir = os.path.dirname(run_dir) sys.path.insert(0, parent_dir) from persepolis import __main__ persepolisdm-persepolis-867ee76/uninstall.py000077500000000000000000000053351464161131600213570ustar00rootroot00000000000000#!/usr/bin/env python3 # coding: utf-8 # 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 . # import platform import glob import os import shutil import sys os_type = platform.system() if os_type == 'Linux': path_list = ['/usr/share/man/man1/persepolis.1.gz', '/usr/share/pixmaps/com.github.persepolisdm.persepolis.svg', '/usr/share/pixmaps/persepolis-tray.svg', '/usr/share/applications/com.github.persepolisdm.persepolis.desktop', '/usr/share/metainfo/com.github.persepolisdm.persepolis.appdata.xml', '/usr/bin/persepolis'] elif os_type in ('FreeBSD', 'OpenBSD'): path_list = ['/usr/local/share/man/man1/persepolis.1.gz', '/usr/local/share/pixmaps/com.github.persepolisdm.persepolis.svg', '/usr/local/share/pixmaps/persepolis-tray.svg', '/usr/local/share/applications/com.github.persepolisdm.persepolis.desktop', '/usr/local/share/metainfo/com.github.persepolisdm.persepolis.appdata.xml', '/usr/local/bin/persepolis'] else: print('This script is for Linux and BSD') sys.exit(1) # finding persepolis directories in /usr/lib/python3.6/site-packages/ python_version_list = ['python3.5', 'python3.6', 'python3.7', 'python3.8', 'python3.9', 'python3.10', 'python3.11', 'python3.12', 'python3.13'] for python_version in python_version_list: # for BSD if os_type == 'Linux': pattern = '/usr/lib/' + python_version + '/site-packages/persepolis*' elif os_type == 'FreeBSD' or os_type == 'OpenBSD': pattern = '/usr/local/lib/' + python_version + '/site-packages/persepolis*' for folder in glob.glob(pattern): path_list.append(folder) print(path_list) uid = os.getuid() if uid != 0: print('run this script as root.') sys.exit(1) for path in path_list: if os.path.exists(path): if os.path.isfile(path): # if path is for file os.remove(path) # removing file else: shutil.rmtree(path) # removing folder print(str(path) + ' is removed!') print('uninstallation is complete!') persepolisdm-persepolis-867ee76/xdg/000077500000000000000000000000001464161131600175455ustar00rootroot00000000000000persepolisdm-persepolis-867ee76/xdg/com.github.persepolisdm.persepolis.appdata.xml000066400000000000000000000036641464161131600306410ustar00rootroot00000000000000 com.github.persepolisdm.persepolis FSFAP GPL-3.0 Persepolis Download Manager Download manager

Persepolis is easy to use graphical download manager that speed up your downloads!

Persepolis features:

  • Multi segment downloading.
  • Scheduling downloads.
  • Download queue.
  • Downloading video from Youtube and more.
  • Persepolis has browser extension for Firefox and Chromium.

com.github.persepolisdm.persepolis.desktop Persepolis Download Manaer https://persepolisdm.github.io/img/screen/persepolis.png https://persepolisdm.github.io/ https://github.com/persepolisdm/persepolis/issues https://github.com/persepolisdm/persepolis/wiki https://www.transifex.com/persepolis/persepolis-translations/ AliReza AmirSamimi
persepolisdm-persepolis-867ee76/xdg/com.github.persepolisdm.persepolis.desktop.in000066400000000000000000000024431464161131600305000ustar00rootroot00000000000000[Desktop Entry] Actions=Open;Tray; Categories=Qt;Network; Comment[en_US]=Download Manager Comment=Download Manager Comment[ko]=다운로드 관리자 Exec=persepolis GenericName[en_US]=Download Manager GenericName=Download Manager GenericName[bn]=ডাউনলোড মেনেজার GenericName[fa]=نرم افزار مدیریت بارگیری GenericName[it]=Download Manager GenericName[ko]=다운로드 관리자 Icon=com.github.persepolisdm.persepolis Keywords=Internet;WWW;Web; Name[en_US]=Persepolis Download Manager Name=Persepolis Download Manager Name[bn]=পার্সেপোলিস Name[fa]=پرسپولیس Name[it]=Download Manager Persepolis StartupNotify=true StartupWMClass=com.github.persepolisdm.persepolis Terminal=false Type=Application X-KDE-SubstituteUID=false [Desktop Action Open] Exec=@persepolisbin@ Name=Start Persepolis Name[bn]=পার্সেপোলিস শুরু করুন Name[fa]=اجرای برنامه Name[it]=Avvia Persepolis Name[ko]=Persepolis 시작 [Desktop Action Tray] Exec=persepolis --tray Name=Start in System Tray Name[bn]=সিস্টেম-ট্রে-তে শুরু করুন Name[fa]=اجرای برنامه در سینی نمایه Name[it]=Avvia nella barra delle applicazioni Name[ko]=시스템 트레이에서 시작 persepolisdm-persepolis-867ee76/xdg/meson.build000066400000000000000000000007101464161131600217050ustar00rootroot00000000000000desktop_file='com.github.persepolisdm.persepolis.desktop' xml_file='com.github.persepolisdm.persepolis.appdata.xml' conf = configuration_data() conf.set('persepolisbin', join_paths(bindir, 'persepolis')) configure_file( input: 'com.github.persepolisdm.persepolis.desktop.in', output: 'com.github.persepolisdm.persepolis.desktop', configuration: conf, install: true, install_dir: desktopdir, ) install_data(xml_file, install_dir: appdatadir)